我正在创建一个战舰游戏,我遇到了在同一地点拍摄的问题。我有一个用于拍摄方法的数组,在行shoot[0]
和列shoot[1]
。我正在尝试创建一个二维数组来存储行shoot[0]
的位置和列的shoot[1]
;然后使用那个双数组我可以检查已经命中的位置。问题是,我不确定你是否可以将信号数组存储在双数组[row] [col]中的位置。
在处理了这段代码一段时间之后,我得到了2D数组来存储Shoot [0]的值并拍摄[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]--;
}
答案 0 :(得分:0)
我不确定你究竟在问什么,但我会尽力回答。因为你已经有了坐标,所以不需要for循环来检查每个拍摄位置。我不确定您的船只阵列的尺寸,但您可以使用用户输入的坐标直接访问该变量。你可以这样做:
int beenShot = 1; //keep in mind these are arbitrary values
int notShot = 0; //I don't know how you are tracking if a shot has been fired there or not
if (ships[shoot[0]][shoot[1]] == beenShot)
{
System.out.println("You have already entered that location!")
}
另外,作为旁注,
(shoot[0] == 0 && shoot[1] == 0)
第一个条件的一部分是不需要的,因为第一个条件已经考虑为零(因为你在检查时检查是否为0):
(shoot[0] <= 0 || shoot[1] <= 0)
无论如何,希望这会有所帮助。