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_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_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 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)? ")
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)? ")
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))
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()