@ -68,7 +68,7 @@ class GameState:
return False
def Eliminate ( self , row , col , nxt_row , nxt_col ) : #下一步可吃对手的棋
return self . board [ nxt_row ] [ nxt_col ] == ' 00 ' or self . board [ nxt_row ] [ nxt_col ] [ 0 ] != self . board [ row ] [ col ] [ 0 ] and ( eval ( self . board [ row ] [ col ] [ 1 ] ) > = eval ( self . board [ nxt_row ] [ nxt_col ] [ 1 ] ) or self [ row] [ col] [ 1 ] == 1 and self . board [ row] [ col] [ 1 ] == 7 )
return self . board [ nxt_row ] [ nxt_col ] == ' 00 ' or self . board [ nxt_row ] [ nxt_col ] [ 0 ] != self . board [ row ] [ col ] [ 0 ] and ( eval ( self . board [ row ] [ col ] [ 1 ] ) > = eval ( self . board [ nxt_row ] [ nxt_col ] [ 1 ] ) and n ot ( eval ( self . boa rd[ row ] [ col ] [ 1 ] ) == 7 and eval ( self . board [ nxt_ row] [ nxt_ col] [ 1 ] ) == 1 ) or eval ( self . board [ row ] [ col ] [ 1 ] ) == 1 and eval ( self . board [ nxt_ row] [ nxt_ col] [ 1 ] ) == 7 )
# 定义移动方式
#----------------------------------
@ -76,7 +76,7 @@ class GameState:
# 1.下一步的可行位置以二维数组的格式进行记录。
# 2.getValidMoves返回值为下一步可行位置构成的集合。
#----------------------------------
def getAllMoves ( self ) :
def getAllMoves ( self ) : #全部合法移动的集合
moves = [ ]
for row in range ( len ( self . board ) ) :
for col in range ( len ( self . board [ row ] ) ) :
@ -92,7 +92,7 @@ class GameState:
for direction in directions :
new_row = row + direction [ 0 ] * 1
new_col = col + direction [ 1 ] * 1
if 0 < = new_row < = 8 and 0 < = new_col < = 6 :
if 0 < = new_row < = 6 and 0 < = new_col < = 8 :
nxt_piece = self . board [ new_row ] [ new_col ]
if nxt_piece == ' 00 ' and not self . inWater ( new_row , new_col ) and not self . inHome ( new_row , new_col , self . color ) : #如果下一个位置是空的,则可以移动
moves . append ( Move ( ( row , col ) , ( new_row , new_col ) , self . board ) )
@ -105,12 +105,12 @@ class GameState:
enemy_color = ' b ' if self . red_to_move else ' r '
for direction in directions :
new_row = row + direction [ 0 ] * 1
new_col = col + direction [ 0 ] * 1
if 0 < = new_row < = 8 and 0 < = new_col < = 6 :
new_col = col + direction [ 1 ] * 1
if 0 < = new_row < = 6 and 0 < = new_col < = 8 :
nxt_piece = self . board [ new_row ] [ new_col ]
if nxt_piece == ' 00 ' and not self . inHome ( new_row , new_col , self . color ) :
if nxt_piece == ' 00 ' :
moves . append ( Move ( ( row , col ) , ( new_row , new_col ) , self . board ) )
elif nxt_piece [ 0 ] == enemy_color and self . Eliminate ( row , col , new_row , new_col ) :
elif nxt_piece [ 0 ] == enemy_color and self . Eliminate ( row , col , new_row , new_col ) and not self . inWater ( row , col ) :
moves . append ( Move ( ( row , col ) , ( new_row , new_col ) , self . board ) )
return moves
@ -155,7 +155,7 @@ class GameState:
for direction in directions :
new_row = row + direction [ 0 ] * 1
new_col = col + direction [ 1 ] * 1
if 0 < = new_row < = 8 and 0 < = new_col < = 6 :
if 0 < = new_row < = 6 and 0 < = new_col < = 8 :
nxt_piece = self . board [ new_row ] [ new_col ]
if nxt_piece == ' 00 ' and not self . inWater ( new_row , new_col ) and not self . inHome ( new_row , new_col , self . color ) : #如果下一个位置是空的,则可以移动
moves . append ( Move ( ( row , col ) , ( new_row , new_col ) , self . board ) )
@ -170,7 +170,7 @@ class GameState:
for i in range ( 1 , 2 ) :
end_row = row + direction [ 0 ] * 1
end_col = col + direction [ 1 ] * 1
if 0 < = end_row < = 8 and 0 < = end_col < = 6 : # check for possible moves only in boundaries of the board
if 0 < = end_row < = 6 and 0 < = end_col < = 8 : # check for possible moves only in boundaries of the board
end_piece = self . board [ end_row ] [ end_col ]
if end_piece == " -- " and not self . inWater ( end_row , end_col ) and self . moveNotOwnDen ( end_row , end_col , enemy_color ) : # empty space is valid and Not in Water
@ -203,6 +203,7 @@ class GameState:
def makeMove ( self , move ) : #cur是当前位置, nxt是下一个位置,参数传入为元组
self . board [ move . end_row ] [ move . end_col ] = self . board [ move . start_row ] [ move . start_col ]
self . board [ move . start_row ] [ move . start_col ] = ' 00 '
self . red_to_move = not self . red_to_move
class Move :
def __init__ ( self , start_loc , end_loc , board ) :
@ -213,3 +214,8 @@ class Move:
self . nxt_piece = board [ self . end_row ] [ self . end_col ]
self . cur_piece = board [ self . start_row ] [ self . start_col ]
self . attack = self . nxt_piece != ' 00 '
self . moveID = self . start_row + self . start_col * 10 + self . end_row * 100 + self . end_col * 1000 #Hash
def __eq__ ( self , __o : object ) - > bool :
if isinstance ( __o , Move ) :
return self . moveID == __o . moveID
return False