Python 需要一个有效的算法来根据规范移动游戏块(游戏:Janggi)

Python 需要一个有效的算法来根据规范移动游戏块(游戏:Janggi),python,algorithm,class,oop,Python,Algorithm,Class,Oop,我正在用Python为一款类似韩国象棋的游戏Janggi构建后端 以下是一些基本规则: 我发现有几件作品在制作上有点挑战性。。。即马和象块 他们也有同样的问题,所以我只关注马的部分 从本质上讲,马匹在没有跳跃的情况下,先垂直移动一步,然后斜向外移动一步。我设置的方法是\u legal\u move()方法,如果可以移动,它应该返回True或False。(此方法是特定于工件的。其他类中的其他方法确保遵守一般的法律动作) 然而,我目前没有考虑“不跳跃”规则。我基本上只有一个合法的转置坐标列表。但是,

我正在用Python为一款类似韩国象棋的游戏Janggi构建后端

以下是一些基本规则:

我发现有几件作品在制作上有点挑战性。。。即马和象块

他们也有同样的问题,所以我只关注马的部分

从本质上讲,马匹在没有跳跃的情况下,先垂直移动一步,然后斜向外移动一步。我设置
的方法是\u legal\u move()
方法,如果可以移动,它应该返回True或False。(此方法是特定于工件的。其他类中的其他方法确保遵守一般的法律动作)

然而,我目前没有考虑“不跳跃”规则。我基本上只有一个合法的转置坐标列表。但是,如果在“到”和“从”坐标之间有一块,它不会检测到这个问题

试着想想我如何解释马在从坐标和到坐标之间必须“行走”的空间

这是我当前的迭代

class Horse(GamePiece):
    """
    Represents Horse game piece, inherits from Game Piece class
    """

    def __init__(self, _player_piece_color):
        """

        """
        super().__init__(_player_piece_color)
        self._moves = [(-1, -2), (-1, 2), (-2, -1),
                    (-2, 1), (0, 0), (1, -2), 
                    (1, 2), (2, -1), (2, 1)]
    
    def is_legal_move(self, x_from, y_from, x_to, y_to):
        """
        checks that Horse piece can make attempted move
        returns True if legal, False otherwise
        """
        
        diff = (x_to - x_from, y_to - y_from)
        return diff in self._moves

您需要创建一个
self.\u跳转
字典,该字典将
diff
作为键,并返回任何内容都不能处于的中间位置

您还需要为电路板的
is_legal_move
添加一个参数,以便检查条件


是的,您需要将该参数添加到其他片段的相同方法中。但是他们可以忽略它。

这是有道理的,我会试试看。那么,那些同样从电路板继承来的元件又如何呢?这样,它们就可以直接访问电路板了?还是会因为所有的实例化而变得混乱?@hobbr属于“更喜欢组合而不是继承”。更多信息,请参阅。但是除了一般原则之外,如果工件知道电路板和电路板关于工件的信息,那么您已经创建了一个打破参考计数的圆形图案。当然,垃圾收集器最终会收集垃圾,但为什么要让它做额外的工作来找到它呢?是的,这听起来很合理。。。棋盘实际上是一个空白空间和游戏子对象实例的集合。有没有办法从工件类调用Board类变量并确保引用的是同一个实例?例如,如果我想查看我正在玩的棋盘当前状态的其他棋子,其中一个棋子类可以检查棋盘吗?在计件方法中,是否只有这样才能将板作为参数传递下去?