已经过优化,可以调用墙体设置工具来自定义墙体,可以修改迷宫大小,来检验程序运行结果;
// 迷宫游戏
// 用0表示路,用1表示墙体,2表示自动走路的路径,3表示死路,可以设置墙体
public class MiGong{//迷宫
public static void main(String[] args){
// 思路
// 用二维数组表示迷宫大小
// 用0表示可以走,用1表示墙体
int[][] map = new int[10][10];//可以在此修改迷宫大小
// 将迷宫的最上面和最下面一行变成墙体
// 将两侧变成墙体
for (int i = 0;i < map.length ;i++ ) {
for (int j = 0;j < map[i].length ;j++ ) {
if (i == 0 || i == map.length - 1) {// 将迷宫的最上面和最下面一行变成墙体
map[i][j] = 1;
continue;
}
if (j == 0 || j ==map[i].length - 1) {// 将两侧变成墙体
map[i][j] = 1;
continue;
}
}
}
MyTools tools = new MyTools();
// 单独设立一行障碍物(后期可以随意更改)
// map[3][1] = map[3][2] = 1;
//障碍物设置工具,i为要设置的是第几行,f为从第几个开始,l为到第几个
// (map,i,f,l)
map = tools.ObsSet(map,3,1,2);
map = tools.ObsSet(map,4,1,8);
map = tools.ObsSet(map,6,4,6);
map = tools.ObsSet(map,8,1,6);
System.out.println("====当前地图情况====");
tools.print2DArr(map);//引用工具print2DArr
System.out.println("====找路情况如下====");
tools.findWay(map,1,1);//运行找路工具,使人物从坐标(1,1),开始走
tools.print2DArr(map);//输出找路过后的地图;
}
}
class MyTools{//工具包
public void print2DArr(int[][] arr){//输出二维数组
for (int i = 0;i < arr.length ;i++ ) {
for (int j = 0;j < arr[i].length ;j++ ) {
System.out.print(arr[i][j] + " ");
}
System.out.println(" ");
}
}
// findWay是用来找到出口的方法
// 如果找到则return真,反之假
// map为迷宫,i和j表示坐标
// 坐标初始位置为(1,1) ;当坐标位于(map.length - 2,map[i].length - 2)时代表走出迷宫
// 用的是递归法找路,所以提前给出map个个值的含义
// 用0表示路,用1表示墙体,2表示可以走,3表示走过但是是死胡同
// 当(map.length - 2,map[i].length - 2) = 2的时候说明找到通路了
// 确定找路的策略,下->右->上->左
public boolean findWay(int[][] map,int i,int j){
if (map[map.length - 2][map[i].length - 2] == 2) {//说明找到路了
return true;
}
else {
if (map[i][j] == 0) {//表示有路
// 根据已定策略找路(下->右->上->左)
// 先假定这条路是对的,即
map[i][j] = 2;//标识路径
if(findWay(map,i + 1,j)){//表示往下走一格,如果正确就返回一个true;
return true;
}
else if (findWay(map,i,j + 1)) {//表示往右走一格,如果正确就返回一个true;
return true;
}
else if (findWay(map,i - 1,j)) {//表示往上走一格,如果正确就返回一个true;
return true;
}
else if (findWay(map,i,j - 1)) {//表示往左走一格,如果正确就返回一个true;
return true;
}
else{
map[i][j] = 3;
return false;//表示这条路走过是死路
}
}
else {//剩余1, 2, 3; 2在if语句已经测试过了,所以直接返回false
return false;
}
}
}
public int[][] ObsSet(int[][] map,int i,int f,int l){//障碍物设置工具,i为要设置的是第几行,f为从第几个开始,l为到第几个
for (int j = f;j < l ; j++) {
map[i][j] = 1;
}
return map;
}
}
这也是我学java以来第一个做的小小小项目,放上来庆祝一下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)