我正在使用Pygame制作国际象棋。
目前,我只能制作白棋和白主教。我为每个 WhitePawn 和 WhiteBishop 类都有一个 projection()函数,它突出显示了棋子可以进行的位置。例如,如果在E2上有一个棋子,在E4上有一个主教,那么E2(当你点击该棋子时)和E3会亮起,但E4不会亮起,因为主教挡路了。当您点击点亮的方块时,它会将块移动到板上的那个位置。两个类的 noProjected()功能应该可以消除电路板上的点亮位置。
我现在的问题是,如果白色的棋子试图穿过白色主教的投射路径(即使我没有点击它),它也不会照亮广场,因此我无法移动到那里。例如,如果白色典当在D4上是E2和白色主教,那么当E2,E3和E4点亮时,E2和E4会亮起。
我确实猜测问题是底部的for循环:play.totalPlayList包含play.whitePawnList(板上的所有白棋子)和play.whiteBishopList。当我颠倒顺序时,在该列表中,典当运动起作用(当然主教运动没有)。所以即使我只点击了pawn,whiteBishop.noProjected()函数仍然被调用,我不想要。
class PlayWhiteBishop(pygame.sprite.Sprite):
def __init__(self):
self.select = 0
def update(self):
def highlight(self):
self.image = images["sprWhiteBishopHighlighted"]
self.select = 1
def projected(self):
for grid in room.gridList:
for i in range(1,8):
if ord(grid.coordinate[0]) == ord(self.coordinate[0])-i and grid.coordinate[1] == self.coordinate[1]-i and grid.occupied == 0:
grid.highlight()
for i in range(1,8):
if ord(grid.coordinate[0]) == ord(self.coordinate[0])-i and grid.coordinate[1] == self.coordinate[1]+i and grid.occupied == 0:
grid.highlight()
for i in range(1,8):
if ord(grid.coordinate[0]) == ord(self.coordinate[0])+i and grid.coordinate[1] == self.coordinate[1]-i and grid.occupied == 0:
grid.highlight()
for i in range(1,8):
if ord(grid.coordinate[0]) == ord(self.coordinate[0])+i and grid.coordinate[1] == self.coordinate[1]+i and grid.occupied == 0:
grid.highlight()
def noHighlight(self):
self.image = images["sprWhiteBishop"]
self.select = 0
def noProjected(self):
#SAME EXACT CODE as projected() except replace grid.highlight() with grid.noHighlight()
while RUNNING:
elif (event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]
for pieceList in play.totalPlayList:
for piece in pieceList:
if (piece.rect.collidepoint(mousePos) and piece.select == 0):
piece.highlight()
piece.projected()
else:
piece.noHighlight()
piece.noProjected()
谢谢!
答案 0 :(得分:2)
你几乎已经自己发现了这个问题:你正在为电路板上的每个部件调用 noProjected(),无论它是否正在移动 - 这不是你需要的功能那里。相反,你需要等到玩家选择一个片段,然后拨打电话来跟踪那个片段的移动。
如果你要移动棋子,你就没有主教可以移动的业务处理;唯一的问题是主教本身是否在阻碍。您不应该根据多个攻击线更改突出显示。
最终游戏的一个注意事项:你做在施法时必须注意:国王不能城堡出入,进入或通过检查:如果是中间广场在敌人的攻击下,玩家无法躲避。