gpt4 book ai didi

java - 我怎样才能简化这段代码? (国际象棋游戏障碍测试)

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

我正在用 Java 制作国际象棋游戏,并进行测试以确保没有棋子阻挡棋子移动的路径。棋子从 (srcX,srcY) 移动到 (dstX,dstY)。

我写了这段代码来检查车是否有障碍物:

    if(dstY == srcY) {

// No change on Y axis, so moving east or west

if(dstX > srcX) {
// Moving east
// Test every cell the piece will pass over
for(int x = srcX+1; x < dstX; x++) {
// Is the cell set?
if(isPiece(x, srcY)) {
return true;
}
}
} else {
// Must be moving west
// Test every cell the piece will pass over
for(int x = srcX-1; x > dstX; x--) {
// Is the cell set?
if(isPiece(x, srcY)) {
return true;
}
}
}

} else if(dstX == srcX) {

// No change on X axis, so moving north or south

if(dstY > srcY) {
// Moving north
// Test every cell the piece will pass over
for(int y = srcY+1; y < dstY; y++) {
// Is the cell set?
if(isPiece(srcX, y)) {
return true;
}
}
} else {
// Must be moving south
// Test every cell the piece will pass over
for(int y = srcY-1; y > dstY; y--) {
// Is the cell set?
if(isPiece(srcX, y)) {
return true;
}
}
}
}

但它有点大,我相信它可以被简化..有什么想法吗?

ps,这只是阻塞测试。我已经验证了所有其他内容。

最佳答案

测试方向后,您可以设置 dx、dy 值(例如,dx=1、dy=0 表示东)。然后,您可以对所有情况使用一个 for 循环,并在每次迭代时将 x 和 y 分别递增 dx 和 dy。

然后您可以将方向检查简化为以下内容:

if dstY == srcY: dy = 0
else: dy = (dstY - srcY) / abs(dstY - srcY)
if dstX == srcX: dx = 0
else: dx = (dstX - srcX) / abs(dstX - srcX)

代码:

int dx, dy;
if (dstY == srcY) dy = 0;
else dy = (dstY - srcY) / Math.abs(dstY - srcY);
if (dstX == srcX) dx = 0;
else dx = (dstX - srcX) / Math.abs(dstX - srcX);

while (srcX != dstX || srcY != dstY) {
srcX += dx; srcY += dy;
if (isPiece(srcX, srcY))
return true;
}
return false;

另请注意,如果移动不是水平、垂直或对角线,则此代码(和您的代码)将失败。

关于java - 我怎样才能简化这段代码? (国际象棋游戏障碍测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315762/

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