Java:激光镜迷宫 - 使用 2D 数组、常量、循环重写激光发射方法

问题描述 投票:0回答:0

我有一个项目,我创建了一个游戏,其中由“/”和“\”表示的镜子放置在 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();
        }
    }

激光不是绕着网格移动,而是直接射击。我确实为方向添加了一些常量,也就是上、下、左、右。

java loops multidimensional-array methods constants
© www.soinside.com 2019 - 2024. All rights reserved.