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

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值