def test_legal_moves(self): board = load_board(''' .XXXXXXXO XX.OOOOO. OOOOOOOOO XXXXXXXX. OOOOOOOOO XXXXXXXXX XXXXXXXXX XXXXXXXXX XXXXXXXX. ''') position = Position( board=board, n=0, komi=6.5, caps=(0, 0), ko=pc('J8'), recent=tuple(), to_play=BLACK, ) empty_spots = pc_set('A9 C8 J8 J6 J1') B_legal_moves = pc_set('A9 C8 J6') for move in empty_spots: if move not in B_legal_moves: with self.assertRaises(go.IllegalMove): position.play_move(move) else: position.play_move(move) # pass should also be legal position.play_move(None) pass_position = position.pass_move() W_legal_moves = pc_set('C8 J8 J6 J1') for move in empty_spots: if move not in W_legal_moves: with self.assertRaises(go.IllegalMove): pass_position.play_move(move) else: pass_position.play_move(move) # pass should also be legal pass_position.play_move(None)
def test_passing(self): start_position = Position( board=TEST_BOARD, n=0, komi=6.5, caps=(1, 2), ko=pc('A1'), recent=tuple(), to_play=BLACK, ) expected_position = Position( board=TEST_BOARD, n=1, komi=6.5, caps=(1, 2), ko=None, recent=(PlayerMove(BLACK, None), ), to_play=WHITE, ) pass_position = start_position.pass_move() self.assertEqualPositions(pass_position, expected_position)
def test_passing(self): start_position = Position( board=TEST_BOARD, n=0, komi=6.5, caps=(1, 2), ko=pc('A1'), recent=tuple(), to_play=BLACK, ) expected_position = Position( board=TEST_BOARD, n=1, komi=6.5, caps=(1, 2), ko=None, recent=(PlayerMove(BLACK, None),), to_play=WHITE, ) pass_position = start_position.pass_move() self.assertEqualPositions(pass_position, expected_position)
class Referee(): def __init__(self): self.go = Position(n=9, komi=3.25) def action(self, coord): """ 输入:落子坐标 输出:是否合法,提子列表,胜负(0:未决出胜负,1:胜,-1:负) """ # 判断是否pass if coord == [-1, -1]: self.go = self.go.pass_move() # 检查胜负情况 winner = 0 if self.go.is_game_over(): winner = self.go.result() print(self.go.result_string()) return [True, [], winner] # 检查是否合法 if not self.go.is_move_legal(tuple(coord)): return (False, [], 0) # 棋盘信息备份 preBoard = self.go.board.copy() preBoard[coord[0], coord[1]] = 1 # 落子 self.go = self.go.play_move(tuple(coord)) # 检查是否提子,若提子则存储提子信息到列表 absDiff = np.abs(preBoard) - np.abs(self.go.board) takes = np.transpose(np.nonzero(absDiff)) return (True, takes, 0)