Exemplo n.º 1
0
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
Exemplo n.º 2
0
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'