c++ - 检查骑士在两点之间移动是否有效

标签 c++ algorithm chess

我正在用 C++ 做一个国际象棋项目。我正在尝试检查二维数组中的有效骑士移动。

我有玩家的旧位置 this->getLocX(),this->getLocY() 变量(玩家所在的位置)并且我有 x,y(这是玩家想要将他的骑士移动到的地方)。

如何以最好的方式检查有效性?这是我的解决方案,但我想知道是否有更好的方法。

if (x == this->getLocX() + 1 && y == this->getLocY() + 2 || x == this->getLocX() - 1 && y == this->getLocY() + 2 || y == this->getLocY() + 1 && x == this->getLocX() + 2 || y == this->getLocY() + 1 && x == this->getLocX() - 2  || x == this->getLocX() - 1 && y == this->getLocY() + 2 || x == this->getLocX() + 1 && y == this->getLocY() - 2 || y == this->getLocY() - 1 && x == this->getLocX() - 2 || y == this->getLocY() - 1 && x == this->getLocX() + 2 || x == this->getLocX() - 1 && y == this->getLocY() - 2)
{
    //Move is vaid
}

最佳答案

我的尝试:

abs((X0 - X1) * (Y0 - Y1)) == 2

为了提高效率,可以无分支地计算绝对值。

关于c++ - 检查骑士在两点之间移动是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53749562/

相关文章:

c++ - Friend 函数,期望 Primary Expression before 。 token

c++ - 快速排序 3 个值

c++ - 没有循环的算法复杂度?

algorithm - 2 = 西塔 (1 + 1/n)^n ;为什么 e 是常数 theta?

c++ - Eclipse-CDT:如何配置调试器以在出现异常时停止?

c++ - emacs中C++模式注释区域的快捷键是什么?

java - 捕捉雨水高度是数组

c++ - n 皇后 (n > 1000) 的快速启发式算法

python - 国际象棋编程的走棋和撤棋

Java - 2D 数组操作正在影响索引的逆