最近也是学完了Java基础部分,想找点项目练练,结果发现什么都不会,什么都做不出来,和朋友聊天聊到这方面,听他的建议可以写个扫雷,虽然只是在控制台实现,但是好歹也是能运行出来的。
首先编写一个地图类:Junior

class Junior{
	int i, j, x;//i,j皆为数组坐标,x为地雷计数器
	//生成初级地图(8*8,10)
	public void junior(String[][] mines,int[][] site) {
		//在地图中随机生成 10个地雷
		for (x = 0; x < 10; x++) {
			i = (int) (Math.random() * 8 + 1);
			j = (int) (Math.random() * 8 + 1);
			//避免重复,在未赋值的区域放置地雷
			if (mines[i][j] == null){
				//原本是检验地雷是否正确生成,检验后即可注释
//				mines[i][j] = "+";
				//将地雷坐标存入另一个数组,放边后面判断
				site[x][0] = i;
				site[x][1] = j;
			}else {
				x--;
			}
		}
		for (int k = 0; k < mines.length; k++) {
			//将所有区域用 * 覆盖
			for (int l = 0; l < mines.length; l++) {
				mines[k][l] = "*";
			}
			//留两条边作为坐标指示器
			mines[0][k] = String.valueOf(k);
			mines[k][0] = String.valueOf(k);
		}
		//输出地雷数组,检验用
		for (int[] date : site){
			System.out.println(Arrays.toString(date));
		}
	}
}

本来写了一个view类用来显示,后来嫌麻烦,有兴趣的朋友后期可以自己实现一下,也只是一些方法的调用

java扫雷设计报告 java编写扫雷程序_java扫雷设计报告


写了一个工具类,后面嫌麻烦索性就干脆在工具类里面显示

public class Util {
	@Test
	public void test1(){
		Util.input();
	}
	
	//创建地雷图
	//初级难度
	//交互
	public static void input(){
		Scanner sc = new Scanner(System.in);
		Junior junior = new Junior();
		String[][] mines = new String[9][9];//生成地雷地图
		int[][] site = new int[10][2];//存放地雷位置
		int conut = 0;//计数器
		
		//调用Junior类初始化地图
		junior.junior(mines,site);
		
		boolean a = false;
		 do {
			int num = 0;//记当前所探区域周围的地雷的个数
			//因为地图设置为8*8,10个雷,所以当conut = 8*8-10时即为通过
			if (conut == 54){
				System.out.println("恭喜,你通关了!");
				break;
			}
			 //输出地图
			 for (String[] date : mines){
				System.out.println(Arrays.toString(date));
			}
			System.out.println("请依次输入x,y坐标:");
			int x_axis = sc.nextInt();
			//给输入的数字进行判断,防止空指针异常或指针越界
			while (true){
				if (x_axis >= mines.length || x_axis < 1){
					System.out.println("请输入1~8以内的数");
					x_axis = sc.nextInt();
				}else break;
			}
			int y_axis = sc.nextInt();
			while (true){
				if (y_axis >= mines.length || y_axis < 1){
					System.out.println("请输入1~8以内的数");
					y_axis = sc.nextInt();
				}else break;
			}
			
			for (int[] ints : site) {
				//将输入的x,y坐标与之前存储的地雷坐标相比较
				if (x_axis == ints[0] && y_axis == ints[1]) {
					a = true;
					break;
				}
				//通过8轮比较判断当前区域的旁边8个格子地雷的个数
				if (ints[0] == x_axis && ints[1] == y_axis - 1) num++;
				if (ints[0] == x_axis && ints[1] == y_axis + 1) num++;
				if (ints[0] == x_axis - 1 && ints[1] == y_axis) num++;
				if (ints[0] == x_axis + 1 && ints[1] == y_axis) num++;
				if (ints[0] == x_axis - 1 && ints[1] == y_axis - 1) num++;
				if (ints[0] == x_axis - 1 && ints[1] == y_axis + 1) num++;
				if (ints[0] == x_axis + 1 && ints[1] == y_axis - 1) num++;
				if (ints[0] == x_axis + 1 && ints[1] == y_axis + 1) num++;
			}
			if (a) System.out.println("你踩到雷了,游戏结束!");
			//踩中雷游戏结束,否则将num的值给输入坐标所在区域
			else {
				mines[x_axis][y_axis] = String.valueOf(num);
				conut++;
				System.out.println("请继续: ");
			}
		} while (!a);
	}
}

java扫雷设计报告 java编写扫雷程序_数组_02


java扫雷设计报告 java编写扫雷程序_Math_03


java扫雷设计报告 java编写扫雷程序_java扫雷设计报告_04


做完这个游戏我想的就是不要怕。没有什么做不出来的,只要认真去想,刚开始完全没头绪,不知道怎么创建地图,怎么判断地雷,还想用throw抛出异常,但实际上是没必要的。这只是用最基本的语法来写一个小游戏,没有涉及到什么难的知识,toString方法也可以自己写一个遍历方法什么的。

也是因为自己懒少写了很多输出界面,不然可以更加美观,但是因为这只是拿来练手的,所以没有想把输出写的多漂亮。

先就这样吧。我知道这个游戏还有很多写的不好的地方,还望大佬多多指点。