【发布时间】:2017-04-10 23:01:31
【问题描述】:
我正在使用 Pygame 制作国际象棋。
目前,我只有制作白兵和白象的能力。我对每个 WhitePawn 和 WhiteBishop 类都有一个 projected() 函数,它突出显示棋子可以去的棋盘上的位置。例如,如果 E2 上有一个棋子,E4 上有一个象,那么 E2(当您单击棋子时)和 E3 会亮起,但 E4 不会亮起,因为象在路上。当你点击点亮的方块时,它会将棋子移动到棋盘上的那个位置。两个类的 noProjected() 函数都应该删除板上的点亮位置。
我现在的问题是,如果白色棋子试图通过白色主教的投影路径(即使我没有点击它),它不会点亮正方形,因此我不能移动到那里.例如,如果一个白兵在 E2 上,而白象在 D4 上,则 E2 和 E4 亮起,而 E2、E3 和 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()
谢谢!
【问题讨论】:
标签: python class for-loop pygame chess