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))
Exemple #2
0
 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)
Exemple #4
0
 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))
Exemple #5
0
 def setUp(self):
     self.x_minimax = Minimax("x", 20)
     self.o_minimax = Minimax("o", 20)
     self.board = BaseBoard(3)
Exemple #6
0
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))
Exemple #7
0
 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))
Exemple #8
0
 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)
Exemple #10
0
 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