package engine import ( "sakura/engine/pool" ) type Game struct { Shadow *pool.Pool Distance *pool.Pool Yin *Player Yang *Player Stack []IsCard Actions map[InteractionID]Action CurrentPlayer *Player } func (g *Game) propagate() { g.Distance.OverflowsTo = g.Shadow } func NewGame() *Game { g := &Game{ Shadow: pool.New(0, pool.Infinite), Distance: pool.New(10, 10), Actions: nil, } g.Yin = NewPlayer(g) g.Yang = NewPlayer(g) g.propagate() g.NextTurn() return g } var Tie = &Player{} func (g *Game) Winner() *Player { if g.Yin.Life.Value <= 0 && g.Yang.Life.Value <= 0 { return Tie } if g.Yin.Life.Value <= 0 { return g.Yang } if g.Yang.Life.Value <= 0 { return g.Yin } return nil } func (g *Game) NextTurn() { current := g.CurrentPlayer.Opponent(g) g.CurrentPlayer = current g.Actions = Interactions(&ShuffleDeck{ &BaseAction{ User: current, BaseSource: nil, }, }, &DrawCard{ &BaseAction{ User: current, BaseSource: nil, }, }) }