[英]Creating Chess in Python, and Pawn Movement Gets Affected By Bishop
我正在使用Pygame制作國際象棋。
目前,我只能制造白色的棋子和白色的主教。 我為每個WhitePawn和WhiteBishop類都有一個projected()函數,該函數突出顯示棋子可以移動的位置。 例如,如果E2上有一個棋子,而E4上有一個主教,則E2(當您單擊該棋子時)和E3會亮起,但E4不會亮起,因為主教在路上。 當您單擊發光的正方形時,它將把棋子移動到板上的那個位置。 這兩個類的noProjected()函數應該刪除板上的發光位置。
現在我的問題是,如果白色棋子試圖通過白色主教的投影路徑移動(即使我沒有單擊它),它也不會照亮正方形,因此我不能移動到那里。 例如,如果E2上有白色棋子,D4上有White Bishop,則當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()
謝謝!
您幾乎已經確定了問題所在:無論板上是否移動,您都在為板上的每個部件調用noProjected() ,這不是您所需要的功能。 相反,你需要等待,直到玩家選擇一塊,然后進行電話追蹤移動僅那件。
如果您要移動典當,那么主教就無法進行業務處理。 唯一的問題是主教本身是否擋路。 您不應基於多條攻擊線來更改亮點。
你最終的游戲一個注意: 你必須易位的時候要注意:王不能城堡出來,進入或通過檢查:如果這中間的廣場下敵人的攻擊,玩家無法城堡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.