Exemplo n.º 1
0
def get_board_api(id):
    board = get_board(id)
    if board == -1:
        response = jsonify({'board': None})
        response.status_code = 500
    else:
        response = jsonify({'board': board})
        response.status_code = 200
    return response
Exemplo n.º 2
0
def _dummy_brain(board_id, player):
    board = get_board(board_id)
    candidates = []
    for y in range(len(board)):
        for x in range(len(board)):
            if board[y][x] == 0:
                candidates.append((x, y))
    if len(candidates) == 0:
        return None
    return choice(candidates)
Exemplo n.º 3
0
def _put_stone(board_id, x, y, player, auto):
    board = get_board(board_id)
    board_size = len(board)
    if not player in [1, 2]:
        return -1
    if auto:
        x, y = _get_move(board_id, player)
    if x < 0 or x >= board_size or y < 0 or y >= board_size:
        return -1
    if board[y][x] != 0:
        return -1

    update_board(board_id, x, y, player)

    if _judge(board_id, player):
        return 1  # win

    if _board_full(board_id):
        return 99  # end

    return 0
Exemplo n.º 4
0
def _judge(board_id, player):
    board = get_board(board_id)
    board_size = len(board)
    for y in range(board_size):
        for x in range(board_size):
            # check to right
            if x + 4 < board_size:
                if all(board[y][x + dx] == player for dx in range(5)):
                    return True
            # check to down
            if y + 4 < board_size:
                if all(board[y + dy][x] == player for dy in range(5)):
                    return True
            # check to right-down
            if x + 4 < board_size and y + 4 < board_size:
                if all(board[y + d][x + d] == player for d in range(5)):
                    return True
            # check to left-down
            if x - 4 >= 0 and y + 4 < board_size:
                if all(board[y + d][x - d] == player for d in range(5)):
                    return True
    return False
Exemplo n.º 5
0
def _board_full(board_id):
    board = get_board(board_id)
    if any(item == 0 for item in sum(board, [])):
        return False
    return True
Exemplo n.º 6
0
def scoring_model(board_id, player):
    board = get_board(board_id)
    board_size = len(board)
    score = [[0 for y in range(board_size)] for x in range(board_size)]
    if player == 1:
        opponent = 2
    else:
        opponent = 1
    for y in range(board_size):
        for x in range(board_size):
            if board[y][x] != 0:
                score[y][x] = -1

            # check to right
            if x + 4 < board_size:
                num_player = sum(board[y][x + dx] == player for dx in range(5))
                num_opponent = sum(board[y][x + dx] == opponent
                                   for dx in range(5))
                for dx in range(5):
                    if board[y][x + dx] == 0:
                        score[y][x + dx] += _score(num_player, num_opponent)

            # check to down
            if y + 4 < board_size:
                num_player = sum(board[y + dy][x] == player for dy in range(5))
                num_opponent = sum(board[y + dy][x] == opponent
                                   for dy in range(5))
                for dy in range(5):
                    if board[y + dy][x] == 0:
                        score[y + dy][x] += _score(num_player, num_opponent)

            # check to right-down
            if x + 4 < board_size and y + 4 < board_size:
                num_player = sum(board[y + d][x + d] == player
                                 for d in range(5))
                num_opponent = sum(board[y + d][x + d] == opponent
                                   for d in range(5))
                for d in range(5):
                    if board[y + d][x + d] == 0:
                        score[y + d][x + d] += _score(num_player, num_opponent)

            # check to left-down
            if x - 4 >= 0 and y + 4 < board_size:
                num_player = sum(board[y + d][x - d] == player
                                 for d in range(5))
                num_opponent = sum(board[y + d][x - d] == opponent
                                   for d in range(5))
                for d in range(5):
                    if board[y + d][x - d] == 0:
                        score[y + d][x - d] += _score(num_player, num_opponent)

    max_score = max(sum(score, []))
    candidates = []
    for y in range(len(board)):
        for x in range(len(board)):
            if score[y][x] == max_score and board[y][x] == 0:
                candidates.append((x, y))
    if len(candidates) == 0:
        return None

    return choice(candidates)