java如何使用循环正确编写迷宫算法
我正在为课堂作业编写代码,让一个角色通过迷宫。我已经为此工作了几个小时,但我不知道自己做错了什么。角色从左向右移动,从右向左移动。除了我添加代码让角色在块if (maze.moveRight() == false)
周围移动外,它会导致角色在每行末尾上下移动一段时间,然后再移动到另一个方向。此外,当角色在行中移动时,它还会打乱我的计数。我觉得我让事情变得比应该的复杂多了。有人能帮忙吗
算法
学生总是从左上角开始,即第0行和第0列
Java徽标可以在迷宫中的任何地方,迷宫中还包含显示为“错误方向”标志的障碍物
必须按照以下规则从上到下遍历迷宫中的每一行,直到找到Java徽标
行和列的编号是从零开始的,因此第一行和列是索引0。第二行和第二列是索引1,依此类推。零是偶数
在偶数行上,必须使用迷宫从左向右移动。moveRight(),在奇数行上,必须使用迷宫从右向左移动。左移()
完成每一行后,使用迷宫。moveDown()继续下一行,直到到达最后一行或找到Java徽标
通过检查迷宫对象中移动方法的返回值,可以检测到遇到了障碍物,true表示没有障碍物,false表示障碍物
如果从左向右移动时遇到障碍物:向下、向右、向右和向上移动。 调整循环计数器以获得额外的向右移动
如果从右向左移动时遇到障碍物:向下、向左、向左和向上移动。调整循环计数器以获得额外的向左移动
每次你向左或向右移动,不包括避开障碍物时,你必须呼叫迷宫。查看是否找到了Java徽标
找到Java徽标后,必须立即跳出所有循环,并退出程序
有些迷宫无法用该算法解决,但我们不会用其中任何一个来测试你的程序
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) 个答案