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
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)
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
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
def _board_full(board_id): board = get_board(board_id) if any(item == 0 for item in sum(board, [])): return False return True
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)