我正在制作一艘战舰游戏,但在同一地点射击时遇到问题。我为shoot方法使用了一个数组,对行使用shoot[0],对列使用shoot[1]。我正在尝试创建一个二维数组来存储行的shoot[0]和列的shoot[1]的位置;然后使用该双数组,我可以检查已经命中的位置。问题是,我不确定是否可以将信号数组存储在double array [row] [col]中的位置。

在这段代码上工作了一段时间之后,我得到了一个2D数组来存储Shoot [0]和Shoot [1]的值。但我不知道我是否做对了:

    public static void shoot(int[] shoot, int[][] ships){
    int[][] check = new int[6][6];
    Scanner input = new Scanner(System.in);

    System.out.print("Enter AI Row: ");
    shoot[0] = input.nextInt();

    System.out.print("Enter AI Column: ");
    shoot[1] = input.nextInt();

    while((shoot[0] <= 0 || shoot[1] <= 0) ||(shoot[0] == 0 && shoot[1] == 0) || (shoot[0] > 5 || shoot[1] > 5)){
      System.out.println("You must enter a location greater than 0 and NOT over 5! ");
      System.out.print("Enter Row: ");
      shoot[0] = input.nextInt();

      System.out.print("Enter Column: ");
      shoot[1] = input.nextInt();
    }

    int temp1 = 0, temp2 = 0;
    for (int row = 0; row < 25; row++){
      for (int col = 0; col < 25; col++){
        if (row == shoot[0] && col == shoot[1])
        {
          check[row][0] = shoot[0];
          check[row][col] = shoot[1];
          temp1 = row;
          temp2 = col;
        }
      }
    }

    if (check[temp1][0] == ships[temp1][0] && check[temp1][temp2] == ships[temp1][temp2])
    {
      System.out.print("You have already entered that location!");
    }

    shoot[0]--;
    shoot[1]--;

  }

最佳答案

我不确定您要做什么,但是,如果shoot[0]shoot[1]确实代表了我所怀疑的拍摄位置的x和y,那么可能就这么简单:

当您检查了位置是否在可靠范围内时,则可以在上述位置将飞船设置为其他状态:

ships[shoot[0]][shoot[1]] = HIT; // or MISSED if there was no ship here

或者您使用一个全新的阵列来记录枪击事件(我想这就是您想要的):

hasAlreadyShot[shoot[0]][shoot[1]] = true;

取决于您的编程风格和选择。

然后,每当玩家选择一个新目标时,您都可以检查它是否不是先前的选择。

10-06 07:04