Modification for reversi
This commit is contained in:
parent
d42a76f8f3
commit
511f64b3d6
@ -34,7 +34,6 @@ def calc_flip(pos, own, enemy):
|
|||||||
:param enemy: bitboard
|
:param enemy: bitboard
|
||||||
:return: flip stones of enemy when I place stone at pos.
|
:return: flip stones of enemy when I place stone at pos.
|
||||||
"""
|
"""
|
||||||
assert 0 <= pos <= 63, f"pos={pos}"
|
|
||||||
f1 = _calc_flip_half(pos, own, enemy)
|
f1 = _calc_flip_half(pos, own, enemy)
|
||||||
f2 = _calc_flip_half(63 - pos, rotate180(own), rotate180(enemy))
|
f2 = _calc_flip_half(63 - pos, rotate180(own), rotate180(enemy))
|
||||||
return f1 | rotate180(f2)
|
return f1 | rotate180(f2)
|
||||||
@ -125,7 +124,14 @@ class Reversi:
|
|||||||
self.board = None # 8 * 8 board with 1 for black, -1 for white and 0 for blank
|
self.board = None # 8 * 8 board with 1 for black, -1 for white and 0 for blank
|
||||||
self.color = None # 1 for black and -1 for white
|
self.color = None # 1 for black and -1 for white
|
||||||
self.action = None # number in 0~63
|
self.action = None # number in 0~63
|
||||||
self.winner = None
|
# self.winner = None
|
||||||
|
self.black_win = None
|
||||||
|
|
||||||
|
def get_board(self, black=None, white=None):
|
||||||
|
self.black = black or (0b00001000 << 24 | 0b00010000 << 32)
|
||||||
|
self.white = white or (0b00010000 << 24 | 0b00001000 << 32)
|
||||||
|
self.board = self.bitboard2board()
|
||||||
|
return self.board
|
||||||
|
|
||||||
def simulate_is_valid(self, board, color):
|
def simulate_is_valid(self, board, color):
|
||||||
self.board = board
|
self.board = board
|
||||||
@ -134,18 +140,19 @@ class Reversi:
|
|||||||
own, enemy = self.get_own_and_enemy()
|
own, enemy = self.get_own_and_enemy()
|
||||||
mobility = find_correct_moves(own, enemy)
|
mobility = find_correct_moves(own, enemy)
|
||||||
valid_moves = bit_to_array(mobility, 64)
|
valid_moves = bit_to_array(mobility, 64)
|
||||||
|
valid_moves = np.argwhere(valid_moves)
|
||||||
valid_moves = list(np.reshape(valid_moves, len(valid_moves)))
|
valid_moves = list(np.reshape(valid_moves, len(valid_moves)))
|
||||||
return valid_moves
|
return valid_moves
|
||||||
|
|
||||||
def simulate_step_forward(self, board, color, vertex):
|
def simulate_step_forward(self, state, vertex):
|
||||||
self.board = board
|
self.board = state[0]
|
||||||
self.color = color
|
self.color = state[1]
|
||||||
self.board2bitboard()
|
self.board2bitboard()
|
||||||
self.vertex2action(vertex)
|
self.vertex2action(vertex)
|
||||||
step_forward = self.step()
|
step_forward = self.step()
|
||||||
if step_forward:
|
if step_forward:
|
||||||
new_board = self.bitboard2board()
|
new_board = self.bitboard2board()
|
||||||
return new_board
|
return [new_board, 0 - self.color], 0
|
||||||
|
|
||||||
def executor_do_move(self, board, color, vertex):
|
def executor_do_move(self, board, color, vertex):
|
||||||
self.board = board
|
self.board = board
|
||||||
@ -155,13 +162,14 @@ class Reversi:
|
|||||||
step_forward = self.step()
|
step_forward = self.step()
|
||||||
if step_forward:
|
if step_forward:
|
||||||
new_board = self.bitboard2board()
|
new_board = self.bitboard2board()
|
||||||
return new_board
|
for i in range(64):
|
||||||
|
board[i] = new_board[i]
|
||||||
|
|
||||||
def executor_get_score(self, board):
|
def executor_get_score(self, board):
|
||||||
self.board = board
|
self.board = board
|
||||||
self._game_over()
|
self._game_over()
|
||||||
if self.winner is not None:
|
if self.black_win is not None:
|
||||||
return self.winner, 0 - self.winner
|
return self.black_win
|
||||||
else:
|
else:
|
||||||
ValueError("Game not finished!")
|
ValueError("Game not finished!")
|
||||||
|
|
||||||
@ -219,6 +227,7 @@ class Reversi:
|
|||||||
|
|
||||||
def _game_over(self):
|
def _game_over(self):
|
||||||
# self.done = True
|
# self.done = True
|
||||||
|
'''
|
||||||
if self.winner is None:
|
if self.winner is None:
|
||||||
black_num, white_num = self.number_of_black_and_white
|
black_num, white_num = self.number_of_black_and_white
|
||||||
if black_num > white_num:
|
if black_num > white_num:
|
||||||
@ -227,9 +236,12 @@ class Reversi:
|
|||||||
self.winner = -1
|
self.winner = -1
|
||||||
else:
|
else:
|
||||||
self.winner = 0
|
self.winner = 0
|
||||||
|
'''
|
||||||
|
if self.black_win is None:
|
||||||
|
black_num, white_num = self.number_of_black_and_white
|
||||||
|
self.black_win = black_num - white_num
|
||||||
|
|
||||||
def illegal_move_to_lose(self, action):
|
def illegal_move_to_lose(self, action):
|
||||||
logger.warning(f"Illegal action={action}, No Flipped!")
|
|
||||||
self._game_over()
|
self._game_over()
|
||||||
|
|
||||||
def get_own_and_enemy(self):
|
def get_own_and_enemy(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user