Eu comecei a aprender sobre as aulas de Python hoje e tive uma pergunta rápida. Estou muito surpreso com o quão mais sucinto ele tornou meu código, mas estou tentando descobrir se o seguinte é possível para um problema de xadrez no qual estou trabalhando.
(1) Posso acrescentar uma lista de alguma forma a partir de um método de classe? Estou tentando descobrir se há uma maneira de acumular as peças em uma lista cada vez que a captura é chamada.
(2) Como posso chamar um método de dentro da classe para ser usado em outro método? Gostaria de poder verificar se um movimento é válido antes mesmo de prosseguir se a peça deve tentar capturar outro ou movimento.
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
def valid_move(self,r,c,r_offset,c_offset):
#r, c are integers for the coordinates on the board
#r_offset,c_offset are the cells the piece might move to
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r <= 7 or self.tgt_c >= 0:
return True
return False
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
def move(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board()
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
Obrigado como sempre.
1. Posso acrescentar uma lista de algum método de classe?
crie um list
- piecesList
em sua classe para armazenar as peças:
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
self.piecesList = [] #or init using some argument if you want to use some list from outside of the class
e sempre que seu capture
método for chamado, simplesmente anexe a parte no piecesList
:
def capture(self,r,c, r_offset, c_offset):
self.piecesList.append(self.piece)
piece = self.piece
2. Como posso chamar um método de dentro da classe para ser usado em outro método?
você pode simplesmente chamá-lo usando self.method(arg1, arg2...)
:
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
if self.valid_move(r,c,r_offset,c_offset) == False:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras