【发布时间】:2020-01-22 12:07:00
【问题描述】:
我正在用 Java 创建一个简单的基于控制台的 Battleships,对于不熟悉该游戏的人来说,它是在 2D 网格上玩的,您可以在其中水平或垂直放下不同大小的战舰。在我的示例中,它是使用 2D 字符数组创建的 10x10 网格。船只不允许相互重叠,它们不能共享同一个 1x1 网格。
我已经设法修复它们不能相互重叠,但我遇到的问题是如果一艘船在起始位置共享相同的列或行(取决于船是垂直放置还是水平放置),我放不下。
请参阅下面的示例图片以更好地理解。
public void placeShip(ShipType shipType, int posX, int posY, int shipSize, Placement placement) {
boolean success = true;
char tempChar = 'x';
if(shipType == ShipType.BATTLESHIP)
tempChar = 'B';
else if(shipType == ShipType.CARRIER)
tempChar = 'C';
else if(shipType == ShipType.DESTROYER)
tempChar = 'D';
else if(shipType == ShipType.SUBMARINE)
tempChar = 'S';
if(placement == Placement.HORIZONTAL) {
for(int i = 0; i < posX+shipSize; i++) {
for(int j = 0; j < posX+shipSize; j++) {
if(board[i][posX-1] != '0' || board[posY-1][i] != '0') {
System.out.println("Can't place down the ship ");
success = false;
break;
}
}
}
if(success) {
System.out.println("Got space");
for(int i = 0; i < shipSize; i++) {
board[posY-1][posX-1+i] = tempChar;
success = false;
}
}
}
if(placement == Placement.VERTICAL) {
for(int i = 0; i < posY+shipSize; i++) {
for(int j = 0; j < posX+shipSize; j++) {
if(board[posY-1][i] != '0' || board[i][posX-1] != '0') {
System.out.println("Can't place down the ship ");
success = false;
break;
}
}
}
if(success) {
System.out.println("Got space");
for(int i = 0; i < shipSize; i++) {
board[posY-1+i][posX-1] = tempChar;
success = false;
}
}
}
}
上面是我用来放置船只的代码,我发送位置 X 和 Y 以及船的大小和船的方向。
【问题讨论】:
标签: java arrays loops for-loop nested-loops