2

我不是一个伟大的程序员,所以我想知道是否有人可以帮助我。在我的战舰游戏中,我有由 Rect 类制成的船,但我需要检查它们是否重叠。这就是我到目前为止所拥有的。

编辑:到底出了什么问题:我有两艘大小为 2 和 5 的船。所以说船 1 有 (0,0)(0,1) 坐标,船 2 有 (0,1) 到 (5,1)。它非常适合在点(0,1)上检查一号船的坐标,但仅此而已。我希望这是有道理的。所以如果我在 (1,1) 上检查 (0,0) 和 (0,1) 它显示没有错误

   public boolean contains(Ship ship) {
    int currentX = ship.getX();
    int currentY = ship.getY();
    int testX = xCoord;
    int testY = yCoord;

    if (rotated) {      //if ship is horizontal enter
        for (int j = 0; j < sizeOfShip; j++) {
            for (int k = 0; k < ship.getSize(); k++) {
                if (testX == currentX && testY == currentY) {
                    return false;
                }
                testX++;
            }
            if (ship.rotated)
                currentX++;
            else {
                currentY++;
            }
        }
    }
    //
    if (!rotated) {
        for (int j = 0; j < sizeOfShip; j++) {
            for (int k = 0; k < ship.getSize(); k++) {
                if (testX == currentX && testY == currentY) {
                    return false;
                }
                testY++;
            }
            if (ship.rotated)
                currentX++;
            else {
                currentY++;
            }           }
    }
    return true;

}
4

2 回答 2

3

问题是,例如对于船 (0,1)(5,1),您需要检查所有值 (0,1)(1,1)(2,1)(3,1)(4,1) (5,1) 与所有其他船的相似值,例如 (0,0)(0,1) (不再,因为它是小船)。

您需要修改您的 for 循环来为您执行此操作。我建议打印出那些 currentX/currentY 值以确保它们正在执行此操作。特别是,我不认为您希望每次迭代都增加 currentX/Y,而是在一个 for 循环中增加 currentX,在另一个循环中增加 currentY。

干杯。

于 2013-04-07T00:33:04.230 回答
3

我认为问题出在此处(另一个也是如此if):

...
    testX++;
 }
 if (ship.rotated)
     currentX++;
 else {
     currentY++;
 }
 ...

我假设testXthis船舶x价值。您在内testX循环中的每次迭代和外循环中的输入参数值()中递增。同时,您永远不会重置该值。假设船的长度为 5,输入参数的长度为 2,两者都是水平的。在外部循环的 3 次迭代之后,增加了 6。currentXthistestX

我认为您想currentX/Y在每次内部迭代后交换增量并重置值:

for (int j = 0; j < sizeOfShip; j++) {
    for (int k = 0; k < ship.getSize(); k++) {
        if (testX == currentX && testY == currentY) {
            return false;
        }
        if (ship.rotated)
            currentX++;
        else {
            currentY++;
        }
    }
    currentX = ship.getX();
    currentY = ship.getY();
    testX++;
}

这必须为两个ifs 完成。我不能尝试这个,所以尝试一下,如果我犯了错误,请告诉我。:)


换个说法。你可以更换

}
//
if (!rotated) {
...

}
else {
...
于 2013-04-07T00:51:59.613 回答