diff --git a/aima/games.py b/aima/games.py index 533ebc277..64e759bbb 100644 --- a/aima/games.py +++ b/aima/games.py @@ -466,8 +466,8 @@ def terminal_test(self, state): def display(self, state): """Print the board as a grid, with empty squares shown as dots.""" board = state.board - for x in range(1, self.h + 1): - for y in range(1, self.v + 1): + for y in range(1, self.v + 1): + for x in range(1, self.h + 1): print(board.get((x, y), '.'), end=' ') print() @@ -508,7 +508,7 @@ def __init__(self, h=7, v=6, k=4): def actions(self, state): """Return legal moves: bottom-row squares or squares directly above an occupied one.""" return [(x, y) for (x, y) in state.moves - if x == self.h or (x + 1 , y ) in state.board] + if y == self.v or (x, y + 1) in state.board] class Gomoku(TicTacToe): """Also known as Five in a row.""" diff --git a/tests/test_games.py b/tests/test_games.py index 81301a70c..e3bcdd3c3 100644 --- a/tests/test_games.py +++ b/tests/test_games.py @@ -91,6 +91,23 @@ def test_random_tests(): # The player 'X' (one who plays first) in TicTacToe never loses: assert ttt.play_game(alpha_beta_player, random_player) >= 0 +def test_ttt_display_dimensions(): + import io + from contextlib import redirect_stdout + + d = { + TicTacToe(): (3, 3), + TicTacToe(h=7, v=5): (7, 5), + TicTacToe(h=5, v=7): (5, 7), + ConnectFour(): (7, 6) + } + + for game, (h, v) in d.items(): + output = io.StringIO() + with redirect_stdout(output): + game.display() + + assert output.getvalue() == (". " * h + "\n") * v if __name__ == "__main__": pytest.main()