import java.util.Scanner;
public class MineSweeper {
public static void main(String[] args) {
int x = 0,y=0;//雷区场地大小
int mineNumber;//自定义雷区个数
int m,n ;//随机赋值产生的行列
int a,b;//用户输入行列进行扫雷
int t=0;//用来判断闯关是否成功
int z=0;
Scanner s=new Scanner(System.in);
do {
System.out.println("请输入雷区的行列");
x=s.nextInt();
y=s.nextInt();
if(x<=0|y<=0)
System.out.println("行数和列数要大于0!");
}while(x<=0|y<=0);
int[][] place=new int[x][y]; //雷区场地
int[] record=new int [x*y];
System.out.println("请输入地雷个数");
mineNumber=s.nextInt();
if(mineNumber>x*y) {
System.out.println("错误,雷数大于雷区场地数!重新输入:");
mineNumber=s.nextInt();
}
for(int i=0;i<mineNumber;i++)
while(true) {
m=(int) (Math.random()*x+1)-1;//产生[m,n]随机数的公式Math.random()*(n+1-m)+m
n=(int) (Math.random()*y+1)-1;//为了不让数组下标越界,随机数最大值要减1,但是我们是从0开始的,当随机数为0时会出现错误,所以要从1开始
if(place[m][n]!=-1) {
place[m][n]=-1;
break;
}
}
for(int i = 0;i<place.length;i++) {
for(int j=0;j<place[i].length;j++)
System.out.print(place[i][j]);
System.out.println();
}
System.out.println("开始扫雷,请输入你认为没有地雷的坐标");
while(true){
a=s.nextInt();
b=s.nextInt();
m=a;
n=b;
a=a-1;
b=b-1;
if(place[a][b]==-1) {
System.out.println("游戏结束!");
return ;
}
else {
System.out.println("无雷");
for(int i=0;i<record.length;i++) {
if(record[i]==m*10+n) {
System.out.println("你已经输入过"+m+" "+n);
t--;
z--;
}
}
for(int i=0;i<record.length;i++) {
if(record[i]!=m*10+n)
record[z]=m*10+n;
}
z++;
t++;
if(t==(x*y-mineNumber)) {
System.out.println("闯关成功!");
return;
}
System.out.println("相邻区域地雷个数为"+sum(place, a, b, x,y));
}
System.out.println("请继续输入");
}
}
//计算非雷区相邻区域的雷数
public static int sum(int[][] place,int a,int b,int x,int y) {
int num=0;
if(a>0&b>0&a<x-1&b<y-1) {
if(place[a-1][b]==-1)
num++;
if(place[a+1][b-1]==-1)
num++;
if(place[a+1][b+1]==-1)
num++;
if(place[a-1][b+1]==-1)
num++;
if(place[a-1][b-1]==-1)
num++;
if(place[a][b-1]==-1)
num++;
if(place[a][b+1]==-1)
num++;
if(place[a+1][b]==-1)
num++;
}
else if(a==0&b<y-1&b!=0) {
if(place[a][b-1]==-1)
num++;
if(place[a][b+1]==-1)
num++;
if(place[a+1][b]==-1)
num++;
if(place[a+1][b-1]==-1)
num++;
if(place[a+1][b+1]==-1)
num++;
}
else if(a==0&b==0) {
if(place[a][b+1]==-1)
num++;
if(place[a+1][b]==-1)
num++;
if(place[a+1][b+1]==-1)
num++;
}
else if(a==0&b==y-1) {
if(place[a][b-1]==-1)
num++;
if(place[a+1][b-1]==-1)
num++;
if(place[a+1][b]==-1)
num++;
}
else if(b==0&a!=0&a<x-1) {
if(place[a-1][b]==-1)
num++;
if(place[a-1][b+1]==-1)
num++;
if(place[a][b+1]==-1)
num++;
if(place[a+1][b]==-1)
num++;
if(place[a+1][b+1]==-1)
num++;
}
else if(a==x-1&b==0) {
if(place[a-1][b]==-1)
num++;
if(place[a-1][b+1]==-1)
num++;
if(place[a][b+1]==-1)
num++;
}
else if(a==x-1&b!=0&b<y-1) {
if(place[a][b-1]==-1)
num++;
if(place[a][b+1]==-1)
num++;
if(place[a-1][b-1]==-1)
num++;
if(place[a-1][b]==-1)
num++;
if(place[a-1][b+1]==-1)
num++;
}
else if(a==x-1&b==y-1) {
if(place[a-1][b-1]==-1)
num++;
if(place[a-1][b]==-1)
num++;
if(place[a][b-1]==-1)
num++;
}
return num;
}
}