我有一个项目,我创建了一个游戏,其中由“/”和“\”表示的镜子放置在 5x5 网格内。玩家可以选择他们想要找到多少镜子。他们必须通过从网格上的任何字母“发射”激光来找到镜子。激光将穿过网格,在镜子上反弹,然后退出。玩家可以从那里根据所走的路径猜测镜子的位置。地图看起来像这样:
ABCDE
T.....F
S.....G
R.....H
Q.....I
P.....J
ONMLK
有人给了我一个算法来帮助我:
“SHOOT 的算法可能看起来像这样:
您需要按位置和方向跟踪镜头:
想象一下来自“R”的镜头从 [2][0] 开始并向右移动。
循环通过“步骤”,直到镜头退出迷宫。
在每一步:
根据当前方向更新坐标。 (左 = -1 列,依此类推)
如果新坐标在迷宫外(你将如何检查?行< 0 OR row > 4 ???)
停止循环并显示退出点
ELSE 如果新坐标是镜像
改变方向(取决于当前方向和镜子的方向——右+‘/’变为上)
结束循环
CONSTANTS 也很有用(LEFT、UP 等)”
我编写的代码不符合我的要求。这是我到目前为止所拥有的:
//
public class LazerMaze4 {
// Initialiaze variables used for the game
static Scanner input = new Scanner(System.in); // Scanner object
static String[][] maze = new String[5][5]; // Array created for maze
static int numOfMirrors;
static String userMenu; // Menu choice
static int numOfShots = 0;
static int numOfCorrectGuesses = 0;
static int numOfIncorrectGuesses = 0;
static boolean[][] guessedMirrors = new boolean[5][5]; // Array created for guessed mirrors
// Will be skipping down to shootLaser()
public static void shootLaser(){
// FIX ME: ONLY DIRECT SHOTS ARE BEING REGISTERED
System.out.print("Enter a letter (A-T) to shoot the laser: ");
String letter = input.next().toUpperCase();
if (letter.charAt(0) < 'A' || letter.charAt(0) > 'T') {
System.out.println("Invalid letter entered. Please enter a letter from A to T.");
return;
}
int row = 'T' - letter.charAt(0);
int col = 0;
boolean foundMirror = false;
int mirrorX = row;
int mirrorY = col;
final int UP;
final int LEFT;
final int RIGHT;
final int DOWN;
while (mirrorX >= 0 && mirrorX < 5 && mirrorY >= 0 && mirrorY < 5) {
if (maze[mirrorX][mirrorY].equals("/") || maze[mirrorX][mirrorY].equals("\\")) {
foundMirror = true;
break;
}
if (mirrorX == 0) {
mirrorY++;
} else if (mirrorY == 4) {
mirrorX--;
} else if (maze[mirrorX - 1][mirrorY + 1].equals("/") ||
maze[mirrorX - 1][mirrorY + 1].equals("\\")) {
mirrorX--;
mirrorY++;
} else {
mirrorX++;
mirrorY++;
}
}
if (foundMirror) {
System.out.println("Laser hit a mirror at " + letter + col + "!");
numOfCorrectGuesses++;
} else {
System.out.println("Laser missed all mirrors.");
numOfIncorrectGuesses++;
}
numOfShots++;
if (numOfCorrectGuesses == numOfMirrors) {
System.out.println("\nCongratulations! You found all the mirrors!");
endGame();
}
}
激光不是绕着网格移动,而是直接射击。我确实为方向添加了一些常量,也就是上、下、左、右。