用java在控制台实现扫雷

最近也是学完了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类用来显示,后来嫌麻烦,有兴趣的朋友后期可以自己实现一下,也只是一些方法的调用
在这里插入图片描述
写了一个工具类,后面嫌麻烦索性就干脆在工具类里面显示

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);
	}
}

遍历一下数组
这是最初版本,当时还没有用数字来表示坐标所在区域
修改后的图片
做完这个游戏我想的就是不要怕。没有什么做不出来的,只要认真去想,刚开始完全没头绪,不知道怎么创建地图,怎么判断地雷,还想用throw抛出异常,但实际上是没必要的。这只是用最基本的语法来写一个小游戏,没有涉及到什么难的知识,toString方法也可以自己写一个遍历方法什么的。
也是因为自己懒少写了很多输出界面,不然可以更加美观,但是因为这只是拿来练手的,所以没有想把输出写的多漂亮。
先就这样吧。我知道这个游戏还有很多写的不好的地方,还望大佬多多指点。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值