Esempio n. 1
0
 def test_set_reward(self):
     reward = 100
     self.learner = Learner()
     tictactoe = TicTacToe()
     action = tictactoe.available_moves()[0]
     self.learner.set_reward(reward, action, tictactoe.board)
     self.assertEqual(reward,
                      self.learner.get_reward(action, tictactoe.board))
Esempio n. 2
0
    def test_look_both_players(self):
        self.learner = Learner()
        self.other_player = RandomPlayer()
        tictactoe = TicTacToe()

        action1 = tictactoe.available_moves()[0]
        tictactoe.play(action1[0], action1[1], self.learner)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.learner.name]))
        self.assertEqual(action1, self.learner.history[self.learner.name][0])

        action2 = tictactoe.available_moves()[0]
        tictactoe.play(action2[0], action2[1], self.other_player)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.other_player.name]))
        self.assertEqual(action2,
                         self.learner.history[self.other_player.name][0])
Esempio n. 3
0
    def test_look_player(self):
        self.learner = Learner()
        tictactoe = TicTacToe()
        action = tictactoe.available_moves()[0]
        tictactoe.play(action[0], action[1], self.learner)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.learner.name]))
        self.assertEqual(action, self.learner.history[self.learner.name][0])

        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.learner.name]))
        self.assertEqual(action, self.learner.history[self.learner.name][0])
Esempio n. 4
0
def playerVai():
    prompt = "Y"
        
    while prompt == "y" or prompt == "Y":
        end = False
        aiGame = TicTacToe()
        min_symb = "X"  # according to the ai, the player is the minimizing player
        max_symb = "O"
        isMaximizing = True
        aiGame.drawBoard(aiGame.board)
        while end == False:
            valid = False
            
            guess = int(input("It's your turn. Enter a valid integer:"))
            while valid == False:
                if not aiGame.select_space(aiGame.board, guess, min_symb):
                    guess = int(input("Invalid move. Please enter an integer between 1 and 9 that is not occupied "))
                else:
                    valid = True
                    aiGame.drawBoard(aiGame.board)

            print("Now the ai is deciding...")
            aiGame.select_space(aiGame.board, aiGame.minimax(aiGame.board, not isMaximizing)[1], max_symb)
            aiGame.drawBoard(aiGame.board)

            if aiGame.has_won(aiGame.board, min_symb) == True:
                end = True
                print(min_symb, "wins. Congrats!")
            elif aiGame.has_won(aiGame.board, max_symb) == True:
                end = True
                print(max_symb, "wins. Congrats!")
            elif len(aiGame.available_moves(aiGame.board)) == 0:
                end = True
                print("It's a tie.")

        input("Press Enter to continue")
        prompt = input("Do you want to play another game? (Y/N)? ")
Esempio n. 5
0
def playerVplayer():
    prompt = "Y"

    while prompt == "y" or prompt == "Y":
        end = False
        symbol = "O"
        myGame = TicTacToe()
        myGame.drawBoard(myGame.board)
        
        while end == False:
            valid = False
            
            if symbol == "O":
                symbol = "X"
            elif symbol == "X":
                symbol = "O"
                
            guess = int(input("It is the turn for " + symbol + ". What is your move? "))
                
            while valid == False:
                if not myGame.select_space(myGame.board, guess, symbol):
                    guess = int(input("Invalid move. Turn for " + symbol + " again. What is your move? "))
                else:
                    valid = True
                    myGame.drawBoard(myGame.board)    
            
            if myGame.has_won(myGame.board, symbol) == True:
                end = True
                print(symbol, "wins. Congrats!")
                
            elif len(myGame.available_moves(myGame.board)) == 0:
                end = True
                print("It's a tie.")

        input("Press Enter to continue")
        prompt = input("Do you want to play another game? (Y/N)? ")
Esempio n. 6
0
class TestLearner(unittest.TestCase):
    def test_next_move_init(self):
        self.learner = Learner()
        tictactoe = TicTacToe()
        self.assertEqual(0, self.learner.get_reward((0, 0), tictactoe.board))

    def test_set_reward(self):
        reward = 100
        self.learner = Learner()
        tictactoe = TicTacToe()
        action = tictactoe.available_moves()[0]
        self.learner.set_reward(reward, action, tictactoe.board)
        self.assertEqual(reward,
                         self.learner.get_reward(action, tictactoe.board))

    def test_look_player(self):
        self.learner = Learner()
        tictactoe = TicTacToe()
        action = tictactoe.available_moves()[0]
        tictactoe.play(action[0], action[1], self.learner)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.learner.name]))
        self.assertEqual(action, self.learner.history[self.learner.name][0])

        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.learner.name]))
        self.assertEqual(action, self.learner.history[self.learner.name][0])

    def test_look_other_player(self):
        self.learner = Learner()
        self.other_player = RandomPlayer()
        tictactoe = TicTacToe()
        action = tictactoe.available_moves()[0]
        tictactoe.play(action[0], action[1], self.other_player)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.other_player.name]))
        self.assertEqual(action,
                         self.learner.history[self.other_player.name][0])

    def test_look_both_players(self):
        self.learner = Learner()
        self.other_player = RandomPlayer()
        tictactoe = TicTacToe()

        action1 = tictactoe.available_moves()[0]
        tictactoe.play(action1[0], action1[1], self.learner)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.learner.name]))
        self.assertEqual(action1, self.learner.history[self.learner.name][0])

        action2 = tictactoe.available_moves()[0]
        tictactoe.play(action2[0], action2[1], self.other_player)
        self.learner.look(tictactoe)
        self.assertEqual(1, len(self.learner.history[self.other_player.name]))
        self.assertEqual(action2,
                         self.learner.history[self.other_player.name][0])

    def test_play(self):
        self.learner = Learner()
        self.tictactoe = TicTacToe()
        action = self.tictactoe.available_moves()[0]
        self.tictactoe.play(action[0], action[1], self.learner)

    def test_learn_single(self):
        self.learner = Learner('X')
        self.other_player = Player('O')
        self.tictactoe = TicTacToe()

        fields = [(0, 0), (0, 1), (0, 2)]

        for field in fields:
            self.tictactoe.play(*field, self.learner)

        self.assertEqual(fields, self.tictactoe.is_winner(self.learner))
        self.learner.learn(self.tictactoe, 100, self.learner)
        print(self.learner.rewards)

        self.tictactoe = TicTacToe()
        while (self.tictactoe.available_moves()
               and not self.tictactoe.is_winner(self.learner)
               and not self.tictactoe.is_winner(self.other_player)):
            self.tictactoe.play(*self.learner.next_move(self.tictactoe),
                                self.learner)

        print(self.tictactoe.board)

        self.assertFalse(self.tictactoe.is_winner(self.other_player))
        self.assertEqual(fields, self.tictactoe.is_winner(self.learner))

    def test_learn_single_starting(self):
        self.learner = Learner()
        self.other_player = Player()
        self.tictactoe = TicTacToe()

        fields = [(0, 0), (0, 1), (0, 2)]
        other_fields = [(1, 0), (1, 1)]

        for field in range(len(fields)):
            self.tictactoe.play(*fields[field], self.learner)
            try:
                self.tictactoe.play(*other_fields[field], self.other_player)
            except (IndexError):
                pass
            self.learner.look(self.tictactoe)

        self.assertEqual(fields, self.tictactoe.is_winner(self.learner))
        self.learner.learn(self.tictactoe, 100, self.learner)
        print(self.learner.rewards)

        self.tictactoe = TicTacToe()
        while (self.tictactoe.available_moves()
               and not self.tictactoe.is_winner(self.learner)
               and not self.tictactoe.is_winner(self.other_player)):
            self.tictactoe.play(*self.learner.next_move(self.tictactoe),
                                self.learner)
            if (other_fields):
                self.tictactoe.play(*other_fields.pop(0), self.other_player)

        print(self.tictactoe.board)

        self.assertFalse(self.tictactoe.is_winner(self.other_player))
        self.assertEqual(fields, self.tictactoe.is_winner(self.learner))

    def test_learn_single_otherstarting(self):
        self.learner = Learner()
        self.other_player = Player()
        self.tictactoe = TicTacToe()

        fields = [(0, 0), (0, 1), (0, 2)]
        other_fields = [(1, 0), (1, 1), (2, 2)]

        for field in range(len(fields)):
            self.tictactoe.play(*fields[field], self.learner)
            try:
                self.tictactoe.play(*other_fields[field], self.other_player)
            except (IndexError):
                pass

        self.assertEqual(fields, self.tictactoe.is_winner(self.learner))
        self.learner.learn(self.tictactoe, 100, self.learner)
        print(self.learner.rewards)

        self.tictactoe = TicTacToe()
        while (self.tictactoe.available_moves()
               and not self.tictactoe.is_winner(self.learner)
               and not self.tictactoe.is_winner(self.other_player)):
            self.tictactoe.play(*other_fields.pop(0), self.other_player)
            self.tictactoe.play(*self.learner.next_move(self.tictactoe),
                                self.learner)

        print(self.tictactoe.board)

        self.assertFalse(self.tictactoe.is_winner(self.other_player))
        self.assertEqual(fields, self.tictactoe.is_winner(self.learner))
Esempio n. 7
0
class TestTicTacToe(unittest.TestCase):

    #todo: try writing decorator for unittests: print test summary, print board, print analysis

    def setUp(self):
        self.tictactoe = TicTacToe()
        #self.tictactoe.print_board()

    def test_is_winner_negative(self):
        player = Player('X')
        row = column = 1
        self.tictactoe.play(row, column, player)
        self.assertFalse(self.tictactoe.is_winner(player))
        print('test_is_winner_negative:')
        self.tictactoe.print_board()

    def test_play_retrieve(self):
        player = Player('X')
        row = column = 1
        self.tictactoe.play(row, column, player)
        self.assertIsNotNone(self.tictactoe.retrieve(row, column))
        self.assertEqual(self.tictactoe.retrieve(row, column), 'X')
        print('test_play_retrieve:')
        self.tictactoe.print_board()

    def test_play_retrieve_boundary(self):
        player = Player('X')
        row = column = self.tictactoe.board_size() - 1
        self.tictactoe.play(row, column, player)
        self.assertIsNotNone(self.tictactoe.retrieve(row, column))
        self.assertEqual(self.tictactoe.retrieve(row, column), player.name)
        print('test_play_retrieve_boundary:')
        self.tictactoe.print_board()

    def test_is_winner_row(self):
        player = Player('X')
        row = 0
        fields = [(row, column)
                  for column in range(self.tictactoe.board_size())]
        for field in fields:
            self.tictactoe.play(*field, player)
        self.assertTrue(self.tictactoe.is_winner(player))
        self.assertEqual(fields, self.tictactoe.is_winner(player))
        print('test_is_winner_row:')
        self.tictactoe.print_board()

    def test_is_winner_column(self):
        player = Player('X')
        column = 0
        fields = [(row, column) for row in range(self.tictactoe.board_size())]
        for field in fields:
            self.tictactoe.play(*field, player)
        self.assertTrue(self.tictactoe.is_winner(player))
        self.assertEqual(fields, self.tictactoe.is_winner(player))
        print('test_is_winner_column:')
        self.tictactoe.print_board()

    def test_is_winner_diagonal1(self):
        player = Player('X')
        fields = [(0, 0), (1, 1), (2, 2)]
        for field in fields:
            self.tictactoe.play(*field, player)
        self.assertTrue(self.tictactoe.is_winner(player))
        self.assertEqual(fields, self.tictactoe.is_winner(player))
        print('test_is_winner_diagonal1:')
        self.tictactoe.print_board()

    def test_is_winner_diagonal2(self):
        player = Player('X')
        fields = [(0, 2), (1, 1), (2, 0)]
        for field in fields:
            self.tictactoe.play(*field, player)
        self.assertTrue(self.tictactoe.is_winner(player))
        self.assertEqual(fields, self.tictactoe.is_winner(player))
        print('test_is_winner_diagonal2:')
        self.tictactoe.print_board()

    def test_available_moves(self):
        player = Player('X')
        test_position = (1, 1)
        self.tictactoe.play(*test_position, player)
        available_moves = self.tictactoe.available_moves()
        self.assertTrue(available_moves)
        self.assertNotIn(test_position, available_moves)
        print('test_available_moves:')
        self.tictactoe.print_board()

    def test_available_moves_none(self):
        player = Player('X')
        for row in range(self.tictactoe.board_size()):
            for column in range(self.tictactoe.board_size()):
                self.tictactoe.play(row, column, player)
        self.assertFalse(self.tictactoe.available_moves())
        print('test_available_moves_none:')
        self.tictactoe.print_board()

    def test_available_moves_border(self):
        player = Player('X')
        for row in range(self.tictactoe.board_size() - 1):
            for column in range(self.tictactoe.board_size() - 1):
                self.tictactoe.play(row, column, player)

        available_moves = self.tictactoe.available_moves()

        for position in range(self.tictactoe.board_size()):
            self.assertIn((position, self.tictactoe.board_size() - 1),
                          available_moves)
            self.assertIn((self.tictactoe.board_size() - 1, position),
                          available_moves)
        print('test_available_moves_border:')
        self.tictactoe.print_board()