最近也是学完了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方法也可以自己写一个遍历方法什么的。
也是因为自己懒少写了很多输出界面,不然可以更加美观,但是因为这只是拿来练手的,所以没有想把输出写的多漂亮。
先就这样吧。我知道这个游戏还有很多写的不好的地方,还望大佬多多指点。