def test_board(): """test init""" board = Board(3) zero_field = np.zeros((3, 3), dtype='int8') game_field = board.field assert board assert (zero_field == game_field).all() assert board.check_state() is None """test function move""" board.move(0, 0, Board.BLACK) board.move(0, 1, Board.WHITE) game_field = board.field assert game_field[0, 0] == Board.BLACK assert game_field[0, 1] == Board.WHITE try: board.move(0, 1, Board.WHITE) except AssertionError: pass try: board.move(2, 2, 0) except AssertionError: pass """test function check_win""" board.remove_all() board.move(2, 0, Board.BLACK) board.move(0, 2, Board.WHITE) board.move(1, 2, Board.BLACK) board.move(2, 1, Board.WHITE) board.move(0, 0, Board.BLACK) board.move(1, 1, Board.WHITE) assert board.check_state() != Board.WHITE """test function remove""" board.remove(0, 2) board.remove(1, 1) board.remove(2, 0) game_field = board.field assert game_field[0, 2] == 0 assert game_field[1, 1] == 0 assert game_field[2, 0] == 0 """test function remove_all""" board.remove_all() game_field = board.field assert (zero_field == game_field).all() """test function legal_moves""" board.move(0, 0, Board.BLACK) board.move(0, 1, Board.WHITE) board.move(0, 2, Board.BLACK) board.move(1, 0, Board.BLACK) board.move(1, 1, Board.WHITE) board.move(1, 2, Board.BLACK) moves = set([(2, 0), (2, 1), (2, 2)]) assert board.legal_moves() == moves
class Game(object): """Playing a game""" BEGIN = 0 END = 1 PROGRESS = 2 def __init__(self, black_player, white_player): self._width = 3 self._board = Board(self._width) self._black_player = black_player self._white_player = white_player self._current_player = self._black_player self._moves = [] self._steps = 0 self._state = Game.BEGIN self._winner = None @property def moves(self): return self._moves @property def steps(self): return self._steps def play(self): while self._state != Game.END: i, j = self._current_player.next_move(self._board) if self._current_player == self._black_player: self._board.move(i, j, Board.BLACK) self._current_player = self._white_player self._moves.append((i, j, Board.BLACK)) else: self._board.move(i, j, Board.WHITE) self._current_player = self._black_player self._moves.append((i, j, Board.WHITE)) if self._state == Game.BEGIN: self._state = Game.PROGRESS self._steps += 1 if self._board.check_state() == Board.WHITE: self._winner = self._white_player self._state = Game.END if self._board.check_state() == Board.BLACK: self._winner = self._black_player self._state = Game.END @property def winner(self): if self._winner == self._white_player: return 'WHITE' elif self._winner == self._black_player: return 'BLACK' else: return 'Nobody'