我不是一个优秀的程序员,所以我想知道是否有人可以帮助我。在我的战舰游戏中,我有从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;
}
答案 0 :(得分: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。
干杯。
答案 1 :(得分:3)
我认为问题出在这里(对于其他if
也是如此):
...
testX++;
}
if (ship.rotated)
currentX++;
else {
currentY++;
}
...
我认为testX
this
的值为x
。您正在内部循环中的每次迭代中递增testX
,并在外部循环中递增输入参数值(currentX
)。与此同时,您永远不会重置该值。让我们说this
船的长度为5,输入参数的长度为2,两者都是水平的。在外循环testX
的3次迭代之后增加了6。
我认为您希望在每次内部迭代后交换增量并重置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++;
}
这两个if
都必须这样做。我不能尝试这个,所以试一试告诉我是否犯了错误。 :)
另一方面。你可以替换
}
//
if (!rotated) {
...
与
}
else {
...