63 lines
899 B
Go
63 lines
899 B
Go
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.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")
|
|
}
|
|
}
|
|
|
|
func (i Item) String() string {
|
|
s := [...]string{"", "🔍", "🚬", "🍺", "👮", "🔪"}
|
|
return s[i]
|
|
}
|