def count_adjacent(self, player, xy, game_=None): if game_ is None: board = self.game.board else: board = game_.board x, y = xy other = "" total = "" lr_index = [0, 1, 1, 1, 0, -1, -1, -1] ud_index = [1, 1, 0, -1, -1, -1, 0, 1] has_enemy = False for i in range(8): ij = x + lr_index[i], y + ud_index[i] if tokens.out_of_board(ij) or board.is_cell_empty(ij): other += "0" total += "0" continue total += "1" if board.get_colour(ij) == player: other += "0" else: other += "1" has_enemy = True if not has_enemy: return other, other return other, total
def pieces_threatened(game_state, player): other = game.other_player(player) home_b = count_pieces(game_state[player]) pieces = 0 for enemy in game_state[other]: xy = enemy[1], enemy[2] for move in tokens.available_moves(other): if move == "Boom": continue for dist in range(enemy[0]): dist = enemy[0] - dist xy2 = game.dir_to_xy(xy, move, dist) temp_game = game.Game(game_state) if tokens.out_of_board( xy2) or not temp_game.board.is_cell_empty(xy2): continue temp_game.move_token(1, xy, move, dist, other) temp_game.boom(xy2, other) home_a = count_pieces(temp_game.get_game_state()[player]) pieces += home_b - home_a return pieces
def boom_area(pieces): locs = [] for piece in pieces: x, y = piece[1], piece[2] for i in range(x - 1, x + 1 + 1): for j in range(y - 1, y + 1 + 1): ij = (i, j) if tokens.out_of_board(ij): continue if ij not in locs: locs.append(ij) return len(locs)
def has_potential_threat(self, xy, player): if not xy: return False else: x, y = xy for i in range(x - 1, x + 1 + 1): for j in range(y - 1, y + 1 + 1): ij = i, j if tokens.out_of_board(ij) or ij == xy: continue if not self.game.board.is_cell_empty( ij) and self.game.board.get_colour(ij) == player: return True return False
def get_nearest_corner(self, ally_xy, enemy_xy): from math import sqrt, pow closest = None min_dist = float("inf") horizontal = [-1, 1] vertical = [-1, 1] for i in horizontal: for j in vertical: ij = enemy_xy[0] + i, enemy_xy[1] + j if tokens.out_of_board(ij): continue dist = sqrt( pow(ally_xy[0] - ij[0], 2) + pow(ally_xy[1] - ij[1], 2)) if dist < min_dist: min_dist = dist closest = ij return closest