有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用循环正确编写迷宫算法

我正在为课堂作业编写代码,让一个角色通过迷宫。我已经为此工作了几个小时,但我不知道自己做错了什么。角色从左向右移动,从右向左移动。除了我添加代码让角色在块if (maze.moveRight() == false)周围移动外,它会导致角色在每行末尾上下移动一段时间,然后再移动到另一个方向。此外,当角色在行中移动时,它还会打乱我的计数。我觉得我让事情变得比应该的复杂多了。有人能帮忙吗

算法

  1. 学生总是从左上角开始,即第0行和第0列

  2. Java徽标可以在迷宫中的任何地方,迷宫中还包含显示为“错误方向”标志的障碍物

  3. 必须按照以下规则从上到下遍历迷宫中的每一行,直到找到Java徽标

  4. 行和列的编号是从零开始的,因此第一行和列是索引0。第二行和第二列是索引1,依此类推。零是偶数

  5. 在偶数行上,必须使用迷宫从左向右移动。moveRight(),在奇数行上,必须使用迷宫从右向左移动。左移()

  6. 完成每一行后,使用迷宫。moveDown()继续下一行,直到到达最后一行或找到Java徽标

  7. 通过检查迷宫对象中移动方法的返回值,可以检测到遇到了障碍物,true表示没有障碍物,false表示障碍物

  8. 如果从左向右移动时遇到障碍物:向下、向右、向右和向上移动。 调整循环计数器以获得额外的向右移动

  9. 如果从右向左移动时遇到障碍物:向下、向左、向左和向上移动。调整循环计数器以获得额外的向左移动

  10. 每次你向左或向右移动,不包括避开障碍物时,你必须呼叫迷宫。查看是否找到了Java徽标

  11. 找到Java徽标后,必须立即跳出所有循环,并退出程序

  12. 有些迷宫无法用该算法解决,但我们不会用其中任何一个来测试你的程序


public static void main(String[] args) {
    // Create maze
    String fileName = args[1];
    Maze maze = new Maze(fileName);
    System.out.println("Maze name: " + fileName);

    // Get dimensions
    int mazeWidth = maze.getWidth();
    int mazeHeight = maze.getHeight();

    // Print maze size
    System.out.println("Maze width: " + mazeWidth);
    System.out.println("Maze height: " + mazeHeight);

    int r = 0;
    int c = 0;
    // Move commands

    while (c < maze.getWidth() - 1 && r % 2 == 0 && maze.isDone() == false)
    {
        maze.moveRight();
        maze.isDone();
        c++;

        if (maze.moveRight() == false && maze.isDone() == false){
            maze.moveDown();
            maze.moveRight();
            maze.moveRight();
            maze.moveUp();
        }

        if (maze.isDone() == true){
            System.exit(1);
        }
    }

    while (c == maze.getWidth() - 1 && r % 2 == 0 && maze.isDone() == false)
    {
        maze.moveDown();
        maze.isDone();
        r++;
    }

    while (c != 0 && c <= maze.getWidth() -1 && r % 2 != 0 
      && maze.isDone() == false){
        maze.moveLeft();
        maze.isDone();
        c--;

        if (maze.moveLeft() == false && maze.isDone() == false) {
            maze.moveDown();
            maze.moveLeft();
            maze.moveLeft();
            maze.moveUp();
        }

        if (maze.isDone() == true){
            System.exit(1);
        }
    }
}

共 (0) 个答案