Пример #1
0
def main():
    clock = pygame.time.Clock()
    game = Game(WIN)

    while game.is_active:
        clock.tick(FPS)

        if game.turn == RED:
            _, new_board = minimax(game.get_board(), 3, False)
            game.ai_move(new_board)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game.is_active = False

            elif event.type == pygame.MOUSEBUTTONDOWN:
                x, y = pygame.mouse.get_pos()
                row, col = get_row_col_from_mouse(x, y)
                game.is_active = game.play(row, col)

        game.update()

    pygame.quit()
Пример #2
0
class TestGame(TestCase):
    def setUp(self):
        self.game = Game()
        assert (self.game.get_players() == [])

        self.game._players[X] = X_TOKEN
        assert (self.game.get_players() == [X])

        self.game._players[O] = O_TOKEN
        assert (self.game.get_players() == [X, O])

    def test_board_size_three(self):
        expected = [None, None, None]
        assert (self.game.get_board().count(expected) == 3)

    def test_board_move(self):
        self.game.do_move(0, 0, X_TOKEN)
        assert (self.game.get_board()[0][0] == X)

    def test_random_board_move(self):
        line = random.randint(0, 2)
        column = random.randint(0, 2)
        self.game.do_move(line, column, O_TOKEN)
        assert (self.game.get_board()[line][column] == O)

    def test_finish_line(self):
        self.game.do_move(0, 0, O_TOKEN)
        self.game.do_move(2, 2, X_TOKEN)
        self.game.do_move(0, 1, O_TOKEN)
        self.game.do_move(1, 1, X_TOKEN)
        with self.assertRaises(GameFinished):
            self.game.do_move(0, 2, O_TOKEN)

    def test_finish_column(self):
        self.game.do_move(0, 0, O_TOKEN)
        self.game.do_move(2, 2, X_TOKEN)
        self.game.do_move(1, 0, O_TOKEN)
        self.game.do_move(1, 1, X_TOKEN)
        with self.assertRaises(GameFinished):
            self.game.do_move(2, 0, O_TOKEN)

    def test_finish_left_diagonal(self):
        self.game.do_move(0, 0, O_TOKEN)
        self.game.do_move(0, 2, X_TOKEN)
        self.game.do_move(1, 1, O_TOKEN)
        self.game.do_move(2, 1, X_TOKEN)
        with self.assertRaises(GameFinished):
            self.game.do_move(2, 2, O_TOKEN)

    def test_finish_right_diagonal(self):
        self.game.do_move(0, 2, O_TOKEN)
        self.game.do_move(2, 2, X_TOKEN)
        self.game.do_move(1, 1, O_TOKEN)
        self.game.do_move(2, 1, X_TOKEN)
        with self.assertRaises(GameFinished):
            self.game.do_move(2, 0, O_TOKEN)

    def test_use_invalid_player(self):
        with self.assertRaises(GameException):
            self.game.do_move(0, 0, 2)

    def test_move_after_finish_game(self):
        self.game.do_move(0, 0, O_TOKEN)
        self.game.do_move(2, 2, X_TOKEN)
        self.game.do_move(1, 0, O_TOKEN)
        self.game.do_move(2, 1, X_TOKEN)
        with self.assertRaises(GameFinished):
            self.game.do_move(2, 0, O_TOKEN)

        with self.assertRaises(GameException):
            self.game.do_move(1, 1, O_TOKEN)

    def test_try_do_two_moves_same_player(self):
        self.game.do_move(0, 0, O_TOKEN)
        with self.assertRaises(GameException):
            self.game.do_move(1, 0, O_TOKEN)