diff --git a/game/game.go b/game/game.go index 383dd14..48013fd 100644 --- a/game/game.go +++ b/game/game.go @@ -26,11 +26,9 @@ type Match struct { // uses shellArray as its backing array. shells []bool // round is the round number. Once it reaches 3, the match is over. - round uint - // game is the game number. May be nice for metrics eventually. - game uint + round int8 // turn is the turn number. When even, it is the dealer's turn. - turn uint + turn int8 // hp is the starting and max HP of both players in the current round. hp int8 // damage is the amount of damage a live shell will deal this turn. @@ -65,7 +63,6 @@ func (g *Match) NextRound() { g.players[0].StartRound(g.hp) g.players[1].StartRound(g.hp) g.round++ - g.game = 0 g.NextGame() } @@ -83,7 +80,6 @@ func (g *Match) NextGame() { } g.shells = g.shellArray[:shells] ShuffleSlice(&g.rng, g.shells) - g.game++ g.turn = 0 g.prev = nil g.NextTurn() @@ -104,12 +100,12 @@ func (g *Match) NextTurn() { // CurrentPlayer gets the current player. func (g *Match) CurrentPlayer() *Player { - return &g.players[g.turn%2] + return &g.players[g.turn&1] } // Opponent returns the player who is not the current player. func (g *Match) Opponent() *Player { - return &g.players[g.turn%2^1] + return &g.players[g.turn&1^1] } // Apply uses an item by index for the current player. diff --git a/game/game_test.go b/game/game_test.go index e7e7623..b84d355 100644 --- a/game/game_test.go +++ b/game/game_test.go @@ -25,7 +25,6 @@ func TestNewGame(t *testing.T) { {len(g.shells) < 2 || len(g.shells) > 8, "bad shells count %d, want 2-8", []any{len(g.shells)}}, {&g.shells[0] != &g.shellArray[0], "shells[0] is %p, want %p", []any{&g.shells[0], &g.shellArray[0]}}, {g.round != 1, "first round is %d, want 1", []any{g.round}}, - {g.game != 1, "first group is %d, want 1", []any{g.game}}, {g.turn != 1, "first turn is %d, want 1", []any{g.turn}}, {g.hp < 2 || g.hp > 4, "hp is %d, want 2-4", []any{g.hp}}, {g.damage != 1, "damage is %d, want 1", []any{g.damage}}, @@ -43,7 +42,7 @@ func TestNewGame(t *testing.T) { func TestGameStartRound(t *testing.T) { t.Parallel() g := New(player.ID{1}, player.ID{2}) - for i := uint(1); i < 10000; i++ { + for i := int8(1); i < 100; i++ { checks := []struct { failed bool msg string @@ -54,7 +53,6 @@ func TestGameStartRound(t *testing.T) { {len(g.shells) < 2 || len(g.shells) > 8, "bad shells count %d, want 2-8", []any{len(g.shells)}}, {&g.shells[0] != &g.shellArray[0], "shells[0] is %p, want %p", []any{&g.shells[0], &g.shellArray[0]}}, {g.round != i, "round is %d, want %d", []any{g.round, i}}, - {g.game != 1, "group is %d, want 1", []any{g.game}}, {g.turn != 1, "turn is %d, want 1", []any{g.turn}}, {g.hp < 2 || g.hp > 4, "hp is %d, want 2-4", []any{g.hp}}, {g.damage != 1, "damage is %d, want 1", []any{g.damage}}, @@ -70,7 +68,6 @@ func TestGameStartRound(t *testing.T) { g.players[0].hp = 0 g.popShell() g.popShell() - g.game = 2 g.turn = 3 g.damage = 2 // Start the next round and check again. @@ -94,7 +91,6 @@ func TestGameStartGroup(t *testing.T) { {&g.shells[0] != &g.shellArray[0], "shells[0] is %p, want %p", []any{&g.shells[0], &g.shellArray[0]}}, {counts.Live != counts.Blank && counts.Live+1 != counts.Blank, "imbalanced live/blank %d/%d", []any{counts.Live, counts.Blank}}, {g.round != 1, "round is %d, want 1", []any{g.round}}, - {g.game != i, "group is %d, want %d", []any{g.game, i}}, {g.turn != 1, "turn is %d, want 1", []any{g.turn}}, {g.damage != 1, "damage is %d, want 1", []any{g.damage}}, {g.reveal, "revealed at start", nil}, @@ -121,14 +117,13 @@ func TestGameStartGroup(t *testing.T) { func TestGameNextTurn(t *testing.T) { t.Parallel() g := New(player.ID{1}, player.ID{2}) - for i := uint(1); i < 10000; i++ { + for i := int8(1); i < 100; i++ { checks := []struct { failed bool msg string args []any }{ {g.round != 1, "round is %d, want 1", []any{g.round}}, - {g.game != 1, "group is %d, want 1", []any{g.game}}, {g.turn != i, "turn is %d, want %d", []any{g.turn, i}}, {g.damage != 1, "damage is %d, want 1", []any{g.damage}}, {g.reveal, "revealed at start", nil}, diff --git a/serve/dto.go b/serve/dto.go index 493e361..8774253 100644 --- a/serve/dto.go +++ b/serve/dto.go @@ -8,7 +8,7 @@ type Game struct { // The dealer is always the first player. Players [2]Player `json:"players"` // Round is the current round. - Round uint `json:"round"` + Round int8 `json:"round"` // Damage is the damage a live shell will deal this turn. Damage int8 `json:"damage"` // Shell gives whether the current shell is live if it is revealed.