def main(): computer = AI(board, board_coordinates) print ("Welcome to Tic Tac Toe! Player is 'X', CPU is 'O'.") computer.print_board() game_won = False while game_won is False: if computer.check_board_for_winner(): break print ("Player's turn...") computer.get_free_spots() player_move = int(input("Enter your field number: ")) GPS = computer.coordinates[player_move] while computer.board[GPS[0]][GPS[1]] != ".": player_move = int(input("Enter valid field number: ")) GPS = computer.coordinates[player_move] computer.board[GPS[0]][GPS[1]] = "X" computer.available_spots.remove(computer.coordinates[player_move]) computer.print_board() print ("CPU's turn ...") computer.get_free_spots() computer.move() computer.print_board() game_won = computer.check_board_for_winner() if computer.get_free_spots() == [] and game_won is False: print("Round draw.") break
class TestAI(unittest.TestCase): def setUp(self): self.testAI = AI([[".", ".", "."], [".", ".", "."], [".", ".", "."]], {1: (0, 0), 2: (0, 1), 3: (0, 2), 4: (1, 0), 5: (1, 1), 6: (1, 2), 7: (2, 0), 8: (2, 1), 9: (2, 2)}) def test_init(self): self.assertEqual(self.testAI.board, [[".", ".", "."], [".", ".", "."], [".", ".", "."]]) self.assertEqual(self.testAI.coordinates, {1: (0, 0), 2: (0, 1), 3: (0, 2), 4: (1, 0), 5: (1, 1), 6: (1, 2), 7: (2, 0), 8: (2, 1), 9: (2, 2)}) def test_free_spots(self): self.testAI.board = [["X", "X", "."], ["X", ".", "O"], ["O", ".", "O"]] result = self.testAI.get_free_spots() self.assertEqual(result, [(0, 2), (1, 1), (2, 1)]) def test_move_with_one_spot_available(self): self.testAI.board = [["X", "X", "O"], ["O", ".", "X"], ["O", "X", "O"]] self.testAI.move() self.assertEqual(self.testAI.board, [["X", "X", "O"], ["O", "O", "X"], ["O", "X", "O"]]) self.assertEqual(self.testAI.get_free_spots(), []) def test_check_rows_of_matrix_correct(self): self.testAI.board = [["X", "X", "X"], ["O", ".", "X"], ["O", "X", "O"]] result = self.testAI.check_rows_of_matrix(self.testAI.board) self.assertTrue(result) def test_check_cols_of_matrix_correct(self): self.testAI.board = [["X", "O", "X"], ["X", ".", "X"], ["X", "X", "O"]] transposed = zip(*self.testAI.board) result = self.testAI.check_rows_of_matrix(transposed) self.assertTrue(result) def test_check_cols_of_matrix_incorrect(self): self.testAI.board = [["X", "O", "X"], ["O", "X", "O"], ["X", "O", "X"]] result = self.testAI.check_rows_of_matrix(self.testAI.board) self.assertFalse(result) def test_diagonals_correct(self): self.testAI.board = [["X", "O", "X"], ["O", "X", "O"], ["X", "O", "X"]] result = self.testAI.check_diagonals(self.testAI.board) self.assertTrue(result) def test_diagonals_incorrect(self): self.testAI.board = [["X", "X", "X"], ["X", "O", "O"], ["X", "O", "O"]] result = self.testAI.check_diagonals(self.testAI.board) self.assertFalse(result) def test_check_board_fully_correct(self): self.testAI.board = [["X", "O", "X"], ["X", ".", "X"], ["X", "X", "O"]] result = self.testAI.check_board_for_winner() self.assertTrue(result) def test_check_board_fully_incorrect(self): self.testAI.board = [[".", ".", "."], [".", ".", "."], [".", ".", "."]] result = self.testAI.check_board_for_winner() self.assertFalse(result)