我正在写一个国际象棋游戏,并试图通过课程为每个独特的作品提供自己的属性和方法。我有一个棋盘的字符串表示,它还包含游戏开始时每个棋子的字符串表示。我想通过Pawn类将我的pawn表示转换为对象,但不完全确定如何做到这一点。
例如,如果我想迭代每个白色典当字符串(用#34表示; WP"),该行是什么:
for i in range(0, 8):
my_board[i][1] = Pawn(i, i)
实际上呢?它是否在每个位置创建了类对象,这使我能够通过我创建的方法永久访问它们在列表中移动它们?如果是这样,他们不会需要唯一的变量名称吗?或者该对象仅作为创建它的初始位置存在?理想情况下,我会为每个项目创建一个唯一的对象,但我不确定我是否正确实现了该项目。
这是我的其余代码供参考。
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
class Pawn:
def __init__(self, x, y):
self.x = x
self.y = y
def passive_move(self):
my_board[self.x][self.y-1] = self
self.y -= 1
def initialise_board(my_board):
pieces = ["C ", "Kn", "B ", "Q ", "K ", "B ", "Kn", "C "]
for x in range(len(pieces)):
my_board[x][0] = pieces[x]
my_board[x][7] = pieces[x]
for i in range(0, 8):
my_board[i][1] = "WP"
my_board[i][6] = "BP"
return my_board
def str_represent_board(game_board):
board_letters = ["A", "B", "C", "D", "E", "F", "G", "H"]
print(3 * " ", end = " ")
for i in board_letters:
print((i) + 3 * (" "), end = " ")
print("\n" + 41 * "_")
c = 0
for y in range(1, 9):
print(y, end = " ")
print(1 * " ", end = " ")
for z in game_board:
print(z[c] + 2 * " ", end = " ")
c += 1
print(1 * ("\n"))
print(41 * "_")
if __name__ == "__main__":
my_board = ChessBoard().create_board()
my_board = initialise_board(my_board)
str_represent_board(my_board)
for i in range(0, 8):
my_board[i][1] = Pawn(i, i)
答案 0 :(得分:-1)
你的循环为每个pawn位置创建一个类实例。每个类实例独立于其他类实例。这有点像说我每天都想要一件衬衫。它们是相同的,但它们是单独的衬衫,我将做不同的事情。它们不需要唯一的变量名称,因为它们根据它们在列表中的位置而有所区别,但是现在它的方式,它覆盖了该单元格的字符串标签。更好的方法是创建一个编号的pawn实例列表,这些实例是" Pieces"的子类。或类似的东西。这些pawn实例具有可在移动时更新的位置属性。