class MinimaxNextMoveTests(unittest.TestCase): def setUp(self): self.x_minimax = Minimax("x",20) self.o_minimax = Minimax("o",20) self.board = BaseBoard(3) def tearDown(self): self.board.board_state = {} def test_if_minimax_chooses_winning_move_with_threat(self): self.board.board_state = {1:"o", 2:"o", 4:"x", 5:"x"} self.assertEqual(3,self.o_minimax.next_move(self.board)) def test_when_returns_eight(self): self.board.board_state = {9:"x", 5:"o"} self.assertEqual(8,self.o_minimax.next_move(self.board)) def test_minimax_move_defense(self): computer = self.o_minimax self.board.board_state = {1:"o", 5:"x", 9:"x"} self.assertTrue(self.o_minimax.next_move(self.board) in (3,7)) def test_that_it_prevents_win(self): self.board.board_state = {9:"x", 5:"o", 6:"x"} self.assertEqual(3,self.o_minimax.next_move(self.board)) def test_minimax_goes_for_fastest_win(self): self.board.board_state = {1:"x", 2:"x"} self.assertEqual(3,self.x_minimax.next_move(self.board)) def test_that_it_handles_junk_boards(self): self.board.board_state = {0:"", 5:"o", 6:"x", 9:"x"} self.assertEqual(3, self.o_minimax.next_move(self.board)) def test_that_it_counters(self): self.board.board_state = {1:"x",2:"x"} self.assertEqual(3,self.o_minimax.next_move(self.board)) def test_that_it_anticipates_setup(self): self.board.board_state = {1:"x"} self.assertEqual(5,self.o_minimax.next_move(self.board)) def test_it_is_dumb_with_lower_depths(self): self.board.board_state = {1:"x",2:"x"} self.assertNotEqual(3,Minimax("o",1).next_move(self.board)) def test_it_with_four_by_four(self): board = BaseBoard(4) board.board_state = {1: "x", 2: "x", 3: "x", 5: "o", 6: "o", 7: "o", 8: "x", 9: "x", 10: "o", 11: "x", 12: "x", 13: "o", 14: "x", 15: "o", 16: "x"} self.assertEqual(4,self.x_minimax.next_move(board)) def test_it_with_two_by_two(self): board = BaseBoard(2) board.board_state = {1:"x",3:"shoe",4:"moo"} self.assertEqual(2,self.x_minimax.next_move(board))
def __init__(self, token, prompter=None, minimax=None): self.token = token if prompter is None: prompter = Prompter() if minimax is None: minimax = Minimax(self.token, 6) self.prompter = prompter self.minimax = minimax self.times_next_move_called = 0
def player(player_type,token,display_object=None): if display_object is None: display_object=Prompter() players = {"Human":HumanPlayer(token,display_object), "Humanoid":Humanoid(token,display_object), "ImpossibleAI":ImpossibleAI(token,display_object), "EasyAI":ImpossibleAI(token,display_object,Minimax(token,1))} return players.get(player_type)
def test_integration_with_instantiated_minimax(self): minimax = Minimax("o", 1) ai = ImpossibleAI("o", minimax=minimax) board = BaseBoard(3) self.assertTrue(ai.next_move(board) in range(1, 10))
def setUp(self): self.x_minimax = Minimax("x", 20) self.o_minimax = Minimax("o", 20) self.board = BaseBoard(3)
class MinimaxNextMoveTests(unittest.TestCase): def setUp(self): self.x_minimax = Minimax("x", 20) self.o_minimax = Minimax("o", 20) self.board = BaseBoard(3) def tearDown(self): self.board.board_state = {} def test_if_minimax_chooses_winning_move_with_threat(self): self.board.board_state = {1: "o", 2: "o", 4: "x", 5: "x"} self.assertEqual(3, self.o_minimax.next_move(self.board)) def test_when_returns_eight(self): self.board.board_state = {9: "x", 5: "o"} self.assertEqual(8, self.o_minimax.next_move(self.board)) def test_minimax_move_defense(self): computer = self.o_minimax self.board.board_state = {1: "o", 5: "x", 9: "x"} self.assertTrue(self.o_minimax.next_move(self.board) in (3, 7)) def test_that_it_prevents_win(self): self.board.board_state = {9: "x", 5: "o", 6: "x"} self.assertEqual(3, self.o_minimax.next_move(self.board)) def test_minimax_goes_for_fastest_win(self): self.board.board_state = {1: "x", 2: "x"} self.assertEqual(3, self.x_minimax.next_move(self.board)) def test_that_it_handles_junk_boards(self): self.board.board_state = {0: "", 5: "o", 6: "x", 9: "x"} self.assertEqual(3, self.o_minimax.next_move(self.board)) def test_that_it_counters(self): self.board.board_state = {1: "x", 2: "x"} self.assertEqual(3, self.o_minimax.next_move(self.board)) def test_that_it_anticipates_setup(self): self.board.board_state = {1: "x"} self.assertEqual(5, self.o_minimax.next_move(self.board)) def test_it_is_dumb_with_lower_depths(self): self.board.board_state = {1: "x", 2: "x"} self.assertNotEqual(3, Minimax("o", 1).next_move(self.board)) def test_it_with_four_by_four(self): board = BaseBoard(4) board.board_state = { 1: "x", 2: "x", 3: "x", 5: "o", 6: "o", 7: "o", 8: "x", 9: "x", 10: "o", 11: "x", 12: "x", 13: "o", 14: "x", 15: "o", 16: "x" } self.assertEqual(4, self.x_minimax.next_move(board)) def test_it_with_two_by_two(self): board = BaseBoard(2) board.board_state = {1: "x", 3: "shoe", 4: "moo"} self.assertEqual(2, self.x_minimax.next_move(board))
def test_it_is_dumb_with_lower_depths(self): self.board.board_state = {1: "x", 2: "x"} self.assertNotEqual(3, Minimax("o", 1).next_move(self.board))
def next_move(self,board_state,ai_depth=None): ai_depth = self.__error_check(ai_depth) self.board.set_state(board_state) comp_move = Minimax("o",ai_depth).next_move(self.board) self.board.make_move(comp_move,"o") return comp_move
def setUp(self): self.x_minimax = Minimax("x",20) self.o_minimax = Minimax("o",20) self.board = BaseBoard(3)
def __init__(self, token, prompter=None, minimax=None): self.token = token if prompter is None: prompter = Prompter() if minimax is None: minimax = Minimax(self.token, 20) self.minimax = minimax self.prompter = prompter