やあ!チェスエンジンを作っていますが、make/unmakeメソッドに問題があります。
ピースのタイプ(ポーン、クイーンなど)と位置を保持するPieceクラスと、ターゲットスクエア、移動されたピース、キャプチャされたピースを保持するMoveクラスがあります。
問題は、makeMoveメソッドを呼び出すと、Pieceオブジェクト内のターゲットの正方形にピースの位置が変更されることです。しかし、今は、Moveオブジェクトを使用してunmakeMoveを呼び出すことができません。これは、ピースの位置を変更したばかりであるため、移動がどこから来たのかについての情報がないためです。この問題にどのように取り組みますか?
どうもありがとうございます!
class Board:
# Previous methods omitted.
def makeMove(self, move, player):
""" Makes a move on the board and changes Piece object. Returns None. """
self.moved_piece = move.getPiece()
self.captured_piece = move.getCapturedPiece(self)
if self.captured_piece: # Remove captured piece from player's piece dict.
player.removePiece(self.captured_piece)
self.setPiece(move.getTargetSquare(), self.moved_piece) # Set moved piece on target square.
self.setPiece(self.moved_piece.getPosition(), EMPTY) # Make the origin square empty.
self.moved_piece.changePosition(move.getTargetSquare()) # Change piece object's position.
def unmakeMove(self, move, player):
""" Unmakes a move. Returns None. """
self.moved_piece = move.getPiece()
self.captured_piece = move.getCapturedPiece(self)
self.setPiece(self.moved_piece.getPosition(), captured_piece) # Set captured piece or empty square to target square.
# Set piece to original square. HOW !?