我试图写一个国际象棋游戏,并在尝试移动我的Pawn时遇到上述错误。我第一次调用my_board[0][0].passive_move()
工作正常,并正确地将对象移动到第二个列表中。但是,如果我立即再次调用它,我会在标题中得到错误,而不是将对象移动到第三个列表中。
__author__ = 'admin'
class Pawn:
def __init__(self, y, x):
self.board = my_board
self.y = y
self.x = x
def __str__(self):
return "Pawn"
def passive_move(self):
self.board[self.y+1][self.x] = self
self.board[self.y][self.x] = chr(self.y+65)+str(self.x+1)
self.y += 1
class ChessBoard:
def __init__(self):
self.board = self.create_board
def create_board(self):
game_board = []
letters = ["A", "B", "C", "D", "E", "F", "G", "H"]
for x in range(len(letters)):
game_board.append([])
for y in range(1, 9):
game_board[x].append(str(letters[x])+str(y))
return game_board
if __name__ == "__main__":
my_board = ChessBoard().create_board()
for x in range(len(my_board)):
my_board[0][x] = Pawn(0, x)
my_board[0][0].passive_move()
my_board[0][0].passive_move()
print(my_board)
答案 0 :(得分:0)
问题是你在同一个棋盘坐标上拨打passive_move
两次:
my_board[0][0].passive_move()
my_board[0][0].passive_move()
在第一次调用之后,最初在该方块上的pawn将向上移动一个,因此该square将保持一个字符串而不是Pawn
实例。由于字符串没有passive_move
方法,因此第二次调用时会出错。
请注意,如果您仅将board
编入索引并保存了对Pawn
实例的引用,则可以告诉它移动两次。尝试这样的事情:
pawn = my_board[0][0]
pawn.passive_move()
pawn.passive_move()