我正在尝试为国际象棋游戏制作一些逻辑,并且已经坚持确保我不会在同一个广场上放置多个棋子。我目前的代码如下,但我不确定它在哪里工作。
def add(self, pawn, x_coordinate, y_coordinate, piece_color):
for each_pawn in self.pawns:
if each_pawn.x_coordinate == x_coordinate and each_pawn.y_coordinate == y_coordinate:
pawn.x_coordinate = -1
pawn.y_coordinate = -1
else:
pawn.x_coordinate = x_coordinate
pawn.y_coordinate = y_coordinate
self.pawns.append(pawn)
Pawns被设置为班级顶部的空列表。我的想法是我正在创建的棋子进入列表,然后当创建任何后续的棋子时,它正在检查它们是否具有相同的坐标,如果它确实放置在-1,-1方格中,即在棋盘上。我确信它不是特别优雅,但我是Python的新手,希望在我有一些基础工作时回来重构。谢谢你的帮助!
答案 0 :(得分:1)
在循环结束时pawn
的坐标将对应于测试它的最后一个pawn的结果。在break
之后添加pawn.y_coordinate = -1
语句。
答案 1 :(得分:1)
class Pawn:
def __init(x, y):
self.x_coordinate = x
self.y_coordinate = y
@property
def x_coordinate(self):
return self.x_coordinate
@x_coordinate.setter
def x_corrdinate(x):
self.x_coordinate = x
@property
def y_coordinate(self):
return self.y_coordinate
@y_coordinate.setter
def y_corrdinate(y):
self.y_coordinate = y
def __hash__(self):
return hash(self.x_coordinate) ^ hash(self.y_coordinate)
def __eq__(self, other):
return self.x_coordinate == other. x_coordinate and self.x_coordinate == other.y_coordinate
基本上,写一个具有x和y坐标的类Pawn,覆盖__eq__()
方法和__hash__()
,当检查if pawn not in pawns:
使用__eq__()
时,将使用它们验证2 Pawn实例是否相等或不基于它们的x和y坐标。
如何使用?
pawn = Pawn(-1, -1)
if pawn not in pawns:
pawns.append(pawn)