繁体   English   中英

蟒蛇棋子运动

[英]Python Chess Piece Movement

我在 Python 的早期正在进行的国际象棋游戏中遇到了为棋子生成有效棋子的问题......我遇到了主教的麻烦。 这是我的程序的一瞥......右下角的白象被选中,红色方块代表有效的动作......很明显主要问题是什么。

如果有一个阻塞部分,我希望我的程序停止添加更多的潜在动作,

在此处输入图片说明

^^ 不是重复的; 我咨询过其他来源

主教课程:

class Bishop(Piece):
    def __init__(self, x, y, pl, im):
        Piece.__init__(self, x, y, pl, im) 

    def findAvailableMoves(self):
        for i in range(1, 8):
            for (dx, dy) in [(i, i), (i, -i), (-i, i), (-i, -i)]:
                if self.inBoundsPiece(self.cor.x + dx, self.cor.y + dy):
                    if board.board[self.cor.y + dy][self.cor.x + dx] == None:
                    self.potentialMoves.append((self.cor.y + dy, self.cor.x + dx))

class WBishop(Bishop):
    def __init__(self, x, y):
        Bishop.__init__(self, x, y, 1, wBishop)

class BBishop(Bishop):
    def __init__(self, x, y):
        Bishop.__init__(self, x, y, 2, bBishop)

我认为最简单的解决方案是重新排列循环的顺序,这样外循环在四个方向上循环,内循环通过距离。 然后在遇到阻塞件时停止内循环。 一旦搜索越​​界,您也可以停止内部循环。

def findAvailableMoves(self):
    for (dx, dy) in [(1, 1), (1, -1), (-1, 1), (-1, -1)]:
        for i in range(1, 8):
            (x, y) = (self.cor.x + i*dx, self.cor.y + i*dy)
            if self.inBoundsPiece(x, y) and board.board[x][y] == None:
                self.potentialMoves.append((x, y))
            else:
                break

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM