自学java第一个小小小项目-迷宫项目

自学java第一个小小小项目-迷宫项目,第1张

自学java第一个小小小项目-迷宫项目

已经过优化,可以调用墙体设置工具来自定义墙体,可以修改迷宫大小,来检验程序运行结果;

// 迷宫游戏
// 用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以来第一个做的小小小项目,放上来庆祝一下

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/795818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存