Пример #1
0
 def test_is_terminal(self):
     for b in [DEMO_BOARD_1, DEMO_BOARD_2]:
         board = MinMax(b, 'x')
         self.assertFalse(board.is_terminal,
                          'this board should not be terminal: %s' % b)
     for b in [DEMO_BOARD_3, DEMO_BOARD_4]:
         board = MinMax(b, 'x')
         self.assertTrue(board.is_terminal,
                         'this board should be terminal: %s' % b)
Пример #2
0
 def test_get_children(self):
     board = MinMax(DEMO_BOARD_1, 'x')
     # this board has player 'x', children should have player 'o'
     count = 0
     for child, move in board._get_children():
         self.assertEquals(child.player, 'o', 'child has wrong player set')
         self.assertTrue(move in [5, 6, 7], 'unexpected move: %s' % move)
         count += 1
     self.assertEquals(count, 3, "wrong number of children: %s" % count)
Пример #3
0
 def test_get_children(self):
     board = MinMax(DEMO_BOARD_1, 'x')
     # this board has player 'x', children should have player 'o'
     count = 0
     for child, move in board._get_children():
         self.assertEquals(child.player, 'o',
                           'child has wrong player set')
         self.assertTrue(move in [5, 6, 7],
                         'unexpected move: %s' % move)
         count += 1
     self.assertEquals(count, 3,
                       "wrong number of children: %s" % count)
Пример #4
0
def move(request):
    cell_id = request.GET.get('cell_id', _marker)
    player = request.GET.get('player', _marker)
    if player == _marker:
        # we don't know who's turn it is.  error out
        return json_response('error')

    board = get_current_board(request)

    cell = None
    if cell_id == _marker:
        # the computer did this one.  Make a move
        time.sleep(0.25)
        engine = MinMax(board, player)
        score, cell = engine.choose(8, -999999, 999999)
        board[cell] = player
    else:
        # the human did it, check the incoming value
        try:
            cell = int(cell_id)
        except ValueError:
            return json_response('error')
        else:
            # make a new engine with the player's choice and get the score
            board[cell] = player

    request.session['board'] = board
    engine = MinMax(board, player)
    score = engine.score

    if engine.is_terminal:
        if abs(score) > 200:
            return json_response('win', value=cell, player=player)
        else:
            return json_response('tie', value=cell, player=player)

    return json_response(value=cell, player=player)
Пример #5
0
def move(request):
    cell_id = request.GET.get('cell_id', _marker)
    player = request.GET.get('player', _marker)
    if player == _marker:
        # we don't know who's turn it is.  error out
        return json_response('error')

    board = get_current_board(request)

    cell = None
    if cell_id == _marker:
        # the computer did this one.  Make a move
        time.sleep(0.25)
        engine = MinMax(board, player)
        score, cell = engine.choose(8, -999999, 999999)
        board[cell] = player
    else:
        # the human did it, check the incoming value
        try:
            cell = int(cell_id)
        except ValueError:
            return json_response('error')
        else:
            # make a new engine with the player's choice and get the score
            board[cell] = player

    request.session['board'] = board
    engine = MinMax(board, player)
    score = engine.score

    if engine.is_terminal:
        if abs(score) > 200:
            return json_response('win', value=cell, player=player)
        else:
            return json_response('tie', value=cell, player=player)

    return json_response(value=cell, player=player)