|
|
|
@ -1,10 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from re import S
|
|
|
|
|
from shutil import move
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GameState:
|
|
|
|
|
def __init__(self):
|
|
|
|
|
'''
|
|
|
|
@ -99,9 +95,9 @@ class GameState:
|
|
|
|
|
if 0<=new_row<=8 and 0<=new_col<=6 :
|
|
|
|
|
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((new_row,new_col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
elif nxt_piece[0]==enemy_color and not self.inWater(new_row,new_col) and not self.inHome(new_row,new_col,self.color) and self.Eliminate(row,col,new_row,new_col):#如果是敌方棋子,且不在水里,且可以消除,则添加到可行路径中
|
|
|
|
|
moves.append((new_row,new_col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
return moves
|
|
|
|
|
|
|
|
|
|
def getMseMoves(self,row,col,moves):
|
|
|
|
@ -113,9 +109,9 @@ class GameState:
|
|
|
|
|
if 0<=new_row<=8 and 0<=new_col<=6 :
|
|
|
|
|
nxt_piece = self.board[new_row][new_col]
|
|
|
|
|
if nxt_piece == '00' and not self.inHome(new_row,new_col,self.color):
|
|
|
|
|
moves.append((new_row,new_col))
|
|
|
|
|
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):
|
|
|
|
|
moves.append((new_row,new_col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
return moves
|
|
|
|
|
|
|
|
|
|
def getEagMoves(self,row,col,moves):
|
|
|
|
@ -131,9 +127,9 @@ class GameState:
|
|
|
|
|
if 0<=new_row<=6:
|
|
|
|
|
nxt_piece = self.board[new_row][col]
|
|
|
|
|
if nxt_piece == '00':
|
|
|
|
|
moves.append((new_row,col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
elif nxt_piece[0]==enemy_color and not self.inWater(new_row,col) and not self.inHome(row,new_col,self.color) and self.Eliminate(row,col,new_row,new_col):
|
|
|
|
|
moves.append((new_row,col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
else :
|
|
|
|
|
break
|
|
|
|
|
moveNum_row += 1
|
|
|
|
@ -143,9 +139,9 @@ class GameState:
|
|
|
|
|
if 0 <= new_col <= 8:
|
|
|
|
|
nxt_piece = self.board[row][new_col]
|
|
|
|
|
if nxt_piece == '00' and not self.inWater(row,new_col) and not self.inHome(row,new_col,self.color):
|
|
|
|
|
moves.append((row,new_col))
|
|
|
|
|
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):
|
|
|
|
|
moves.append((row,new_col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
else :
|
|
|
|
|
break
|
|
|
|
|
moveNum_col += 1
|
|
|
|
@ -162,9 +158,9 @@ class GameState:
|
|
|
|
|
if 0<=new_row<=8 and 0<=new_col<=6 :
|
|
|
|
|
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((new_row,new_col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
elif nxt_piece[0]==enemy_color and not self.inWater(new_row,new_col) and not self.inHome(new_row,new_col,self.color) and self.Eliminate(row,col,new_row,new_col):#如果是敌方棋子,且不在水里,且可以消除,则添加到可行路径中
|
|
|
|
|
moves.append((new_row,new_col))
|
|
|
|
|
moves.append(Move((row,col),(new_row,new_col),self.board))
|
|
|
|
|
return moves
|
|
|
|
|
|
|
|
|
|
def getLionMoves(self,row,col,moves):
|
|
|
|
@ -178,20 +174,20 @@ class GameState:
|
|
|
|
|
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
|
|
|
|
|
moves.append((end_row, end_col))
|
|
|
|
|
moves.append(Move((row, col), (end_row, end_col), self.board))
|
|
|
|
|
|
|
|
|
|
elif end_piece == "--" and self.inWater(end_row,end_col):
|
|
|
|
|
jump_row = end_row - row #Vertical jump
|
|
|
|
|
jump_col = end_col - col #Horizontal jump
|
|
|
|
|
|
|
|
|
|
if jump_row != 0 and self.jumpConditions(row,col,end_row,end_col,jump_row,jump_col,enemy_color):
|
|
|
|
|
moves.append((end_row+(3*jump_row), end_col))
|
|
|
|
|
moves.append(Move((row, col), (end_row+(3*jump_row), end_col), self.board))
|
|
|
|
|
|
|
|
|
|
elif jump_col != 0 and self.jumpConditions(row,col,end_row,end_col,jump_row,jump_col,enemy_color):
|
|
|
|
|
moves.append((end_row, end_col+(2*jump_col)))
|
|
|
|
|
|
|
|
|
|
elif end_piece[0] == enemy_color and not self.inWater(end_row,end_col) and self.canAttack(row, col, end_row, end_col): # capture enemy piece
|
|
|
|
|
moves.append((end_row, end_col))
|
|
|
|
|
moves.append(Move((row, col), (end_row, end_col), self.board))
|
|
|
|
|
break
|
|
|
|
|
else: # friendly piece
|
|
|
|
|
break
|
|
|
|
@ -203,4 +199,17 @@ class GameState:
|
|
|
|
|
if self.board[3][0][0] == 'r' or self.board[3][8][0] == 'b':
|
|
|
|
|
self.conquered = True
|
|
|
|
|
return self.conquered
|
|
|
|
|
|
|
|
|
|
#移动操作
|
|
|
|
|
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'
|
|
|
|
|
|
|
|
|
|
class Move:
|
|
|
|
|
def __init__(self,start_loc,end_loc,board):
|
|
|
|
|
self.start_row = start_loc[0]
|
|
|
|
|
self.start_col = start_loc[1]
|
|
|
|
|
self.end_row = end_loc[0]
|
|
|
|
|
self.end_col = end_loc[1]
|
|
|
|
|
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'
|