38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
class ReversiHeuristic():
|
|
def __init__(self, logger, weight = [1, 2, 10, 20]):
|
|
self.logger = logger
|
|
self.weight = weight
|
|
|
|
def get(self, board):
|
|
size = board.get_board_size()
|
|
score = 0
|
|
weights = self._get_weight(size)
|
|
for pos_x in range(size):
|
|
for pos_y in range(size):
|
|
if board._board[pos_x][pos_y] == board._nextPlayer:
|
|
score += weights[pos_x][pos_y]
|
|
else:
|
|
score -= weights[pos_x][pos_y]
|
|
return score
|
|
|
|
def _get_weight(self, size):
|
|
w = [[ 0 for _ in range(size)] for _ in range(size)]
|
|
|
|
for pos_y in range(size):
|
|
for pos_x in range(size):
|
|
|
|
# Elements in the corner
|
|
if pos_x in [0, size -1] and pos_y in [0,size - 1]:
|
|
w[pos_x][pos_y] = self.weight[3]
|
|
|
|
# Elements on the border
|
|
elif pos_x in [0, size -1] or pos_y in [0, size -1]:
|
|
w[pos_x][pos_y] = self.weight[2]
|
|
|
|
# Element the center
|
|
elif pos_x in range( int(size // 2 - 2), size // 2 + 2) and pos_y in range( size // 2 - 2, size // 2 + 2):
|
|
w[pos_x][pos_y] = self.weight[1]
|
|
|
|
else:
|
|
w[pos_x][pos_y] = self.weight[0]
|
|
return w
|