簡體   English   中英

用Python創建國際象棋,棋子動作受到Bishop的影響

[英]Creating Chess in Python, and Pawn Movement Gets Affected By Bishop

我正在使用Pygame制作國際象棋。

目前,我只能制造白色的棋子和白色的主教。 我為每個WhitePawnWhiteBishop類都有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM