c++ - 检查两点之间的骑士移动是否有效
问题描述
我正在用 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
为了效率,绝对值可以无分支计算。
推荐阅读
- apache-spark - 明确火花数据框中的分区数
- javascript - 如何使用javascript将占位符颜色更改为透明
- r - 如何使用 Tidyverse 对几列进行分组并计算百分比并创建新的 df?
- python - 尝试运行 pyinstaller 创建的 .exe 文件时“执行脚本失败”
- css - 完整的单词应该在同一行呈现
- couchbase - 我正在使用 CouchbaseMock 进行单元测试,其中 Couchbase 客户端会将 N1QL 查询发送到模拟服务器
- php - string 和 int 值相加的输出是什么?
- c# - 获取 ntlm 令牌(www-authenticate - 标头)
- php - 使用 CallbackFilter 搜索多个子模型字段时,类没有名为 user.email 的字段或关联
- react-native - expo build:ios 时 Unicode 规范化不适用于 ASCII-8BIT