我最近开始学习数组,我需要专家帮助解决这些问题。 我正在制作一个简单的采矿程序,用户在3x3网格上从正方形跳到正方形,直到只剩下正方形:与矿井一个。
int choice;
String action;
String square[]={"1A","1B","1C","2D","3E","3F","1G","2H"};
int counter = 0;
Random random = new Random();
int mine = random.nextInt(square.length);
System.out.println(square[mine]);
由于方形数组是一个字符串,我这样做是为了使得生成的随机矿山来自方块,并且它只是为了测试而显示矿井。 但是当用户选择他们想要移动的方块时,有很多可能性,例如,如果用户选择square [1],则可以选择square [0],square [2],... 。,square [7]等。所以,我需要帮助,通过使用数组使这些代码更简单(记住,我是Arrays的新手)。
其次,我如何将一个String数组解析为一个Int数组,所以当玩家跳过一个正方形时,让我们说square [0],然后必须检查它是否“等于”我的。 我的代码不起作用:
System.out.println("You will start in the middle of a 5 x 5 square.");
System.out.println("[" + square[0] + "]\t[" + square[1] + "]\t[" + square[2] + "]");
System.out.println("[" + square[7] + "]\t[" + character + "]\t[" + square[3] + "]");
System.out.println("[" + square[6] + "]\t[" + square[5] + "]\t[" + square[4] + "]");
System.out.print("Hey. Character " + character + ", make your move. ");
action = (input.readLine());
if (action.equalsIgnoreCase("1A"))
{
if (square[0].equals(mine))
{
System.out.println("Sorry. You stepped on a mine!");
break;
}
else
{
System.out.println("[" + character + "]\t[" + square[1] + "]\t[" + square[2] + "]");
System.out.println("[" + square[7] + "]\t[" + "O" + "]\t[" + square[3] + "]");
System.out.println("[" + square[6] + "]\t[" + square[5] + "]\t[" + square[4] + "]");
counter++;
System.out.print("Make your next move: ");
action = input.readLine();
if (action.equalsIgnoreCase("1B"))
{
if (square[1].equals(mine))
{
System.out.println("Sorry. You stepped on a mine!");
break;
}
else
{
System.out.println("[" + "O" + "]\t[" + character + "]\t[" + square[2] + "]");
System.out.println("[" + square[7] + "]\t[" + "O" + "]\t[" + square[3] + "]");
System.out.println("[" + square[6] + "]\t[" + square[5] + "]\t[" + square[4] + "]");
counter++;
System.out.print("Make your next move: ");
action = input.readLine();
}
}
显然,“if(square [x] .equals(mine))”不起作用,我不知道如何将String与Int数组进行比较,另一个问题是,如前所述,我的代码太长了这只是因为我正在计算选择每个方块(8个)和用户将选择的方块(8-1之外)的可能性,依此类推,即8个!阶乘(因为用户从中间的方块开始,留下八个方格)。但我不希望所有编码的40320可能性,我相信你们可以告诉我更简单的方法。谢谢!
旁注我如何为5x5广场做这件事?使用String数组?还是Int数组?或合并?
答案 0 :(得分:1)
是的,有一种更简单的方法。你需要做的是能够回答“坐标X,Y处有矿井吗?”的问题。这是通过二维数组完成的,你唯一需要的是每个点都有一个是/否布尔值。
boolean[][] minePos = new boolean[5][5];
你设置这样的地雷(两个参数都是数字):
minePos[1][1] = true; //this is 1A
minePos[1][2] = true; //this is 1B
等等。你一直在使用A,B,C作为Y坐标,你需要使用1表示A,2表示B,等等。设置为true的地方将是地雷的地方。其余的都是假的,表明没有我的。当用户想要移动到位置xpos,ypos时,你可以测试那里是否有一个地雷:
if (minePos[xpos,ypos]) {
//tell them they were blown up
}
else {
//you are OK, not blown up
}
如果它们在xpos,ypos上是安全的,并且你想限制它们周围的方块移动,那么很容易枚举八种可能的跳跃:
(xpos-1,ypos-1)
(xpos, ypos-1)
(xpos+1, ypos-1)
(xpos-1,ypos)
(xpos+1, ypos)
(xpos-1,ypos+1)
(xpos, ypos+1)
(xpos+1, ypos+1)
等等。他们选择八个方向中的一个,并在此基础上找出他们将要降落的位置。然后测试着陆位置是否有矿井。
目前尚不清楚如何提示用户移动。他们是否表示“我想移动一个方块”?你应该已经知道它们在哪里(在一些变量中),所以给定一个方向,很容易计算它们落在哪里。或者你打算让他们输入一个坐标,比如“A1”?然后,您需要确保他们输入的坐标位于您知道的坐标旁边。或者您可以显示他们可能移动到的所有可能坐标,并让他们选择一个。无论如何,你要弄清楚目的地数字坐标是什么,然后检查那里是否有矿井。
从一个固定位置的地雷开始,但稍后会很容易编写一个小型循环,将地雷放置在随机的X和Y位置。像这样:
Random rand = new Random();
for (int count:=1; count<8; count++) {
int randx = rand.nextInt(5);
int randy = rand.nextInt(5);
minePos[randx, randy] = true;
}
这将在随机x值(0到4)和随机y位置(0到4)放置8个地雷。您可以更改电路板的尺寸以及要放置的地雷数量。