扫雷游戏简单写法---> 随机产生地雷数

    科技2023-09-27  107

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

     

    Processed: 0.017, SQL: 8