gpt4 book ai didi

java - 如何确定国际象棋中的路径是否没有障碍?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:00 25 4
gpt4 key购买 nike

我有一个包含所有 Piece 对象的二维数组,每个对象都是 Rook、Bishop、King 等的实例...

如何判断从 srcX,srcY 到 dstX,dstY 的路径是否被另一 block 挡住了?

我唯一能想到的就是涉及大量繁琐的代码=/

最佳答案

您对“大量乏味代码”的评论过于夸张了。棋盘上的任何路径都不会超过八个方 block ,所有这些方 block 都可以通过一个简单的算法来跟踪——递增或递减行和/或列计数器。 (马除外,它只能移动到八个方格并且不能被阻挡。)我怀疑任何棋子的代码都不会超过二十行。

例如这里是主教的代码:

// check move legality not taking into account blocking
boolean canMoveBishopTo(int srcx,int srcY,int destX,int destY) {
if (srcX<0 || srcX>7 ||srcY<0 || srcY>7 || destX<0 || destX>7 ||destY<0 || destY>7) {
throw new IllegalArgumentException();
}
if ((srcX==destX || srcY==destY) {
return false;
}

if (Math.abs(destX-srcX) == Math.abs(srcY-destY) {
return true;
}
return false;
}

boolean isBishopMoveBlocked(int srcX,int srcY,int destX,int destY) {
// assume we have already done the tests above
int dirX = destX > srcX ? 1 : -1;
int dirY = destY > srcY ? 1 : -1;
for (int i=1; i < Math.abs(destX - srcX) - 1; ++i) {
if (pieceOnSquare(srcX + i*dirX, srcY + i*dirY) {
return false;
}
}
return true;
}

关于java - 如何确定国际象棋中的路径是否没有障碍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4305205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com