package game type Item int8 const ( ItemNone Item = iota ItemLens ItemCig ItemBeer ItemCuff ItemKnife ) func NewItem(rng *RNG) Item { return Item(rng.Intn(5)) + 1 } func (i Item) Apply(g *Game) bool { switch i { case ItemNone: return false case ItemLens: if g.Reveal { return false } g.Reveal = true return true case ItemCig: cur := &g.PP[g.CurrentPlayer()] if cur.HP < g.HP { cur.HP++ return true } return false case ItemBeer: g.PopShell() if g.Empty() { g.StartGroup() } return true case ItemCuff: opp := g.Opponent() if opp.Cuffs != Uncuffed { return false } opp.Cuffs = Cuffed return true case ItemKnife: if g.Damage != 1 { return false } g.Damage = 2 return true default: panic("shotgun: unknown item") } }