自定义地雷数的扫雷(控制台运行)
package test1;
//导包
import java.util.Scanner;
import java.util.Random;
public class tst1{
public static void main (String[]args) {
//设置雷的个数
System.out.println("请输入雷的个数:");
char [][] a = new char [16][30]; //char类型的二维数组16行30列,用于存放字符类型
//以Random为模板创建一个Random类对象,调用Random类的函数 对 对象进行初始化
Random rnd = new Random();
Scanner sc = new Scanner(System.in);
int MineNum = sc.nextInt();
System.out.println("雷的个数:"+MineNum);
//随机布雷 需注意处理随机行列为相同值的特殊情况,使用while循环
while(MineNum>0){
//获取随机数
int row = rnd.nextInt(16); //地雷的行列数值随机
int column = rnd.nextInt(30);
//随机行列确定后,布雷,还需布置雷的个数减一
if(a[row][column]!=*){
a[row][column]=*;
MineNum--;
}
}
//扫雷
for(int i=0;i<16;i++){
for(int j=0;j<30;j++){
int LeiNum=0; //一个方格检测到的地雷个数
//若方格本身不是地雷,检测此方格周围八个方格的地雷个数,累加赋值
if(a[i][j]==0){
//使用八个if判断语句检测
if(i-1>=0&&j-1>=0&&a[i-1][j-1]==*){
LeiNum++;
}
if(i-1>=0&&a[i-1][j]==*){
LeiNum++;
}
if(j<29){
if(i-1>0&&a[i-1][j+1]==*){
LeiNum++;
}
if(a[i][j+1]==*){
LeiNum++;
}
}
if(j-1>0&&a[i][j-1]==*){
LeiNum++;
}
if(i<15){
if(j-1>0&&a[i+1][j-1]==*){
LeiNum++;
}
if(a[i+1][j]==*){
LeiNum++;
}
}
if(i<15&&j<29){
if(a[i+1][j+1]==*){
LeiNum++;
}
}
//int类型转char类型 ,再赋值
a[i][j]=(char)(LeiNum+0);//(LeiNum+48)||(LeiNum+0)
}
}
}
//打印检测的结果
for(int i=0;i<16;i++){
for(int j=0;j<30;j++){
System.out.print(a[i][j]);
}
System.out.println();//换行打印
}
}
}
本次项目是使用控制台打印扫雷布雷的结果,需注意细节。调用构造函数创建对象,初始化对象。创建和使用二维数组。不同类型之间的转换。扫雷的时候需要注意二维数组边界的情况,把检测到的地雷个数累加后使用int类转char类的方法赋值给char类型的二维数组,最后再打印出扫雷游戏的布雷情况。
结果展示:
下一篇:
Jackson解析嵌套对象工具类
