首页 > 解决方案 > 检查两点之间的骑士移动是否有效

问题描述

我正在用 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
}

标签: c++algorithmchess

解决方案


我的尝试:

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

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


推荐阅读