我正在写一个国际象棋游戏,并试图通过类给每个独特的作品提供自己的属性和方法。我有一个棋盘的字符串表示形式,其中还包含游戏开始时每个棋子的字符串表示形式。我想通过Pawn类将我的棋子表示变成对象,但不完全知道如何做到这一点。关于使用类的困惑
例如,如果我想遍历每个白色棋子字符串(由“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)
是什么让你觉得'my_board [row] [column]'_isn't_一个唯一的变量名? – TigerhawkT3
但是,如果我要调用我的passive_move方法,原来的my_board [row] [col]是作为类对象保留还是作为新的位置? – Perplexityy
这个问题没有意义。我怀疑你需要找到一个教程,并阅读清单和对象。 – TigerhawkT3