Add bot to play against.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package game
|
||||
|
||||
// SimulateBattle resolves a hypothetical two-player battle between the given
|
||||
// arranged decks (top of deck first) and returns the result. It runs on a
|
||||
// scratch game, so it never touches real state — callers (notably the AI
|
||||
// player) can roll out as many what-if battles as they like. Dice rolls are
|
||||
// random unless rollDie is non-nil.
|
||||
func SimulateBattle(round, prioritySeat int, deckA, deckB []Card, rollDie func() int) *BattleResult {
|
||||
g := &Game{
|
||||
Round: round,
|
||||
PrioritySeat: prioritySeat,
|
||||
RollDie: rollDie,
|
||||
// Cards minted during the simulation (apples, bees) get IDs far away
|
||||
// from real ones, purely to avoid confusion when reading results.
|
||||
NextCardID: 1_000_000,
|
||||
Players: []*Player{
|
||||
{Name: "A", Seat: 0, Deck: append([]Card(nil), deckA...)},
|
||||
{Name: "B", Seat: 1, Deck: append([]Card(nil), deckB...)},
|
||||
},
|
||||
}
|
||||
g.resolveBattle()
|
||||
return g.Battle
|
||||
}
|
||||
|
||||
// TierContents returns the full printed contents of a tier's shop deck —
|
||||
// public information from the box. Cards carry placeholder IDs; they are
|
||||
// reference data, not live instances.
|
||||
func TierContents(tier int) []Card {
|
||||
scratch := &Game{}
|
||||
scratch.buildShopDecks()
|
||||
if tier < 1 || tier > len(scratch.ShopDecks) {
|
||||
return nil
|
||||
}
|
||||
return scratch.ShopDecks[tier-1]
|
||||
}
|
||||
Reference in New Issue
Block a user