战舰游戏2D阵列中的舰船重叠问题,Java

战舰游戏2D阵列中的舰船重叠问题,Java,java,arrays,loops,for-loop,nested-loops,Java,Arrays,Loops,For Loop,Nested Loops,我正在用Java创建一个简单的基于控制台的战舰,对于不熟悉游戏的人来说,它是在2D网格上玩的,在那里你可以水平或垂直放置不同大小的战舰。在我的示例中,它是使用2D字符数组创建的10x10网格。船舶不允许相互重叠,它们不能共享同一1x1网格 我已经设法修复了它们,使它们不能相互重叠,但我的问题是,如果一艘船在起始位置共享相同的列或行(取决于该船是垂直放置还是水平放置),我无法将其放下 请参阅下面的示例图片,以便更好地理解 public void placeShip(ShipType-ShipTy

我正在用Java创建一个简单的基于控制台的战舰,对于不熟悉游戏的人来说,它是在2D网格上玩的,在那里你可以水平或垂直放置不同大小的战舰。在我的示例中,它是使用2D字符数组创建的10x10网格。船舶不允许相互重叠,它们不能共享同一1x1网格

我已经设法修复了它们,使它们不能相互重叠,但我的问题是,如果一艘船在起始位置共享相同的列或行(取决于该船是垂直放置还是水平放置),我无法将其放下

请参阅下面的示例图片,以便更好地理解

public void placeShip(ShipType-ShipType、int-posX、int-posY、int-shipSize、Placement-Placement){
布尔成功=真;
char tempChar='x';
if(船型==船型.战列舰)
tempChar='B';
否则如果(shipType==shipType.CARRIER)
tempChar='C';
else if(shipType==shipType.DESTROYER)
tempChar='D';
else if(shipType==shipType.subside)
tempChar='S';
if(placement==placement.HORIZONTAL){
对于(int i=0;i

上面是我用来放置船只的代码,我在其中发送X和Y位置以及船只的大小和方向。

你需要重新考虑你的循环,以检查船只是否可以放下。让我们把其中一个分解成简单的英语:

if(placement==placement.HORIZONTAL){
对于(int i=0;i
第一期:

for(int i = 0; i < posX+shipSize; i++)
职位
董事会[i][posX-1]
在这种情况下没有任何意义,也与你的船的位置无关,因为你总是从
i=0开始
。因此,无论你想把你的船放在哪里,如果你的船在同一行或同一列,我们就有问题了。这就是你的问题的原因。相反,它是uld类似于:
if(board[posY-1][posX-1]!=“0”)

最后,为什么不正确地设置
posX
posY
的位置呢?这样你就不必减去1而迷惑自己了

最终,您的新块应该是这样的(但我不能确定,因为您没有发布最小可复制示例):

if(placement==placement.HORIZONTAL){
对于(int i=0;i
谢谢你的帮助,它帮我解决了问题。我被这一切弄得困惑和慌乱,我尝试了很多东西,我想我只是添加了一些不必要的东西。
for(int i = 0; i < posX+shipSize; i++)
if(placement == Placement.HORIZONTAL) {
  for(int i = 0; i < shipSize; i++) {
    if(board[posY-1][posX-1+i] != '0') {
      System.out.println("Can't place down the ship ");
      success = false;
      break;
    }
  }

  // your code