implement conceding
This commit is contained in:
parent
2b9e617c10
commit
e8786073aa
15
game/game.go
15
game/game.go
@ -163,6 +163,21 @@ func (g *Game) Shoot(id player.ID, self bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Concede sets the player with the given ID to zero health. The returned
|
||||||
|
// Boolean indicates whether the game has ended. (It will be false if id does
|
||||||
|
// not correspond to either player.)
|
||||||
|
func (g *Game) Concede(id player.ID) bool {
|
||||||
|
switch id {
|
||||||
|
case g.players[0].id:
|
||||||
|
g.players[0].hp = 0
|
||||||
|
case g.players[1].id:
|
||||||
|
g.players[1].hp = 0
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// DTO returns the current game state as viewed by the given player.
|
// DTO returns the current game state as viewed by the given player.
|
||||||
func (g *Game) DTO(id player.ID) serve.Game {
|
func (g *Game) DTO(id player.ID) serve.Game {
|
||||||
return serve.Game{
|
return serve.Game{
|
||||||
|
@ -405,6 +405,42 @@ func TestGameShoot(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConcede(t *testing.T) {
|
||||||
|
dealer, chall := player.ID{1}, player.ID{2}
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
p player.ID
|
||||||
|
winner player.ID
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "dealer",
|
||||||
|
p: dealer,
|
||||||
|
winner: chall,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "challenger",
|
||||||
|
p: chall,
|
||||||
|
winner: dealer,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "neither",
|
||||||
|
p: player.ID{3},
|
||||||
|
winner: player.ID{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, c := range cases {
|
||||||
|
c := c
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
g := New(dealer, chall)
|
||||||
|
g.Concede(c.p)
|
||||||
|
if got := g.Winner(); deref(got).id != c.winner {
|
||||||
|
t.Errorf("wrong winner: %#v doesn't have id %#v", got, c.winner)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGameShellCounts(t *testing.T) {
|
func TestGameShellCounts(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
|
Loading…
Reference in New Issue
Block a user