首页 > 编程语言 >java利用递归实现扫雷

java利用递归实现扫雷

时间:2022-11-28 10:07:54浏览次数:37  
标签:map bomb 递归 int 999 ++ 扫雷 cr java

package 扫雷;




import java.math.*;




import java.util.Scanner;




public class 扫雷 {




//记录翻开次数




static int k=0;




//两个数组










static int [][] map=new int[22][22];










static int [][] bomb=new int[22][22];




//传染,递归,即遇见空白向周围扩散




public static void cr(int x,int y){




if(x-1>=0&y-1>=0){




if(map[x-1][y-1]==999){




if(bomb[x-1][y-1]==0){




map[x-1][y-1]=bomb[x-1][y-1];




k++;




cr(x-1,y-1);




}




else{




map[x-1][y-1]=bomb[x-1][y-1];




k++;




}




}




if(map[x-1][y]==999){




if(bomb[x-1][y]==0){




map[x-1][y]=bomb[x-1][y];




k++;




cr(x-1,y);




}




else{




map[x-1][y]=bomb[x-1][y];




k++;




}




}




if(map[x-1][y+1]==999){




if(bomb[x-1][y+1]==0){




map[x-1][y+1]=bomb[x-1][y+1];




k++;




cr(x-1,y+1);




}




else{




map[x-1][y+1]=bomb[x-1][y+1];




k++;




}




}




if(map[x][y-1]==999){




if(bomb[x][y-1]==0){




map[x][y-1]=bomb[x][y-1];




k++;




cr(x,y-1);




}




else{




map[x][y-1]=bomb[x][y-1];




k++;




}




}




if(map[x][y+1]==999){




if(bomb[x][y+1]==0){




map[x][y+1]=bomb[x][y+1];




k++;




cr(x,y+1);




}




else{




map[x][y+1]=bomb[x][y+1];




k++;




}




}




if(map[x+1][y-1]==999){




if(bomb[x+1][y-1]==0){




map[x+1][y-1]=bomb[x+1][y-1];




k++;




cr(x+1,y-1);




}




else{




map[x+1][y-1]=bomb[x+1][y-1];




k++;




}




}




if(map[x+1][y]==999){




if(bomb[x+1][y]==0){




map[x+1][y]=bomb[x+1][y];




k++;




cr(x+1,y);




}




else{




map[x+1][y]=bomb[x+1][y];




k++;




}




}




if(map[x+1][y+1]==999){




if(bomb[x+1][y+1]==0){




map[x+1][y+1]=bomb[x+1][y+1];




k++;




cr(x+1,y+1);




}




else{




map[x+1][y+1]=bomb[x+1][y+1];




k++;




}




}




}




}








public static void main(String[] args) {




//将map中间部分设为999




for(int i=0;i<22;i++){




for(int j=0;j<22;j++){




map[i][j]=999;




}




}




//随机产生40个雷,并对周围数加一




for(int i=0;i<41;i++){




int m=(int)Math.round((Math.random()*(20-1)+1));




int n=(int)Math.round((Math.random()*(20-1)+1));




if(bomb[m][n]==9){




i--;




continue;




}




bomb[m][n]=9;




if(bomb[m-1][n-1]!=9){




bomb[m-1][n-1]=bomb[m-1][n-1]+1;




}




if(bomb[m-1][n]!=9){




bomb[m-1][n]=bomb[m-1][n]+1;




}




if(bomb[m-1][n+1]!=9){




bomb[m-1][n+1]=bomb[m-1][n+1]+1;




}




if(bomb[m][n-1]!=9){




bomb[m][n-1]=bomb[m][n-1]+1;




}




if(bomb[m][n+1]!=9){




bomb[m][n+1]=bomb[m][n+1]+1;




}




if(bomb[m+1][n-1]!=9){




bomb[m+1][n-1]=bomb[m+1][n-1]+1;




}




if(bomb[m+1][n]!=9){




bomb[m+1][n]=bomb[m+1][n]+1;




}




if(bomb[m+1][n+1]!=9){




bomb[m+1][n+1]=bomb[m+1][n+1]+1;




}




}




//将map,bomb周围设为10




for(int i=0;i<22;i++){




if(i==0){




for(int j=0;j<22;j++){




map[i][j]=10;




bomb[i][j]=10;




}




}




if(i==21)




{




for(int j=0;j<22;j++){




map[i][j]=10;




bomb[i][j]=10;




}




}




map[i][0]=10;




map[i][21]=10;




bomb[i][0]=10;




bomb[i][21]=10;




}




//把bomb输出,这便于程序员试验程序,真正游戏没有这一步




for(int i=0;i<22;i++){












System.out.print(bomb[i][j]+"
");






























System.out.print("\n");





















//游戏开始








for(;;){













































































































































}































int x=input.nextInt();










System.out.println("Please key in the x:");










int y=input.nextInt();










//如果是雷










if(bomb[x][y]==9){

































































































































































































































































































































}










else{




































k++;









//调用递归,传递参数为x,y,即为用户所输入

































































map[x][y]=bomb[x][y];



















}










//如果翻开了360个格子










if(k==360){


































































































































































System.out.print("\n");












}





































}
















}




}








}

标签:map,bomb,递归,int,999,++,扫雷,cr,java
From: https://blog.51cto.com/u_9368800/5890562

相关文章

  • 论Java的重要性
    最近,最新的世界编程语言排名最近出炉了,Java位居世界第一。    不仅如此,Java以17.856%超过第二名C语言的8.726%两倍以上,其实,这一现象是十分反常的,因为,在前几年,Java......
  • 大趋智能打印机java api
    对接飞鹅和易联云后,网上几乎没资料对大趋智能打印机javaapi分享,故此分享一波。官方文档地址SnParam.javapackagecom.shanheyongmu.openapi.param;importlombok......
  • 简单记录JAVA浮点类型判断BUG
    //0.3*1==0.3结果:trueSystem.out.println("0.3*1==0.3结果:"+(0.3*1==0.3));//0.1*3==0.3结果:falseSystem.out.println("0.......
  • java技术架构图
    架构图有哪几种  业务架构:需求初期业务的结果和过程描述一般比较模糊,可能来自于某个老板、运营或用户的反馈。客户说海尔洗衣机洗土豆会堵,海尔立马设计专门的土豆洗......
  • Java基础语法
          ......
  • java中String.intern()方法具有什么功能呢?
    下文笔者讲述java中String.intern()方法的功能简介说明,如下所示:String.intern原理String.intern():此方法是一个Native方法底层调用C++的StringTable::in......
  • Difference Between Method Overloading and Method Overriding in Java
    ThedifferencesbetweenMethodOverloadingandMethodOverridinginJavaareasfollows:MethodOverloading MethodOverridingMethodoverloadingis......
  • Java基础
    java基础java的基本程序设计结构第一个程序Main.javapublicclassMain{publicstaticvoidmain(String[]args){System.out.println("hello,world")......
  • 01.java设计模式之单例模式
    参考:https://blog.csdn.net/liu_da_da/article/details/125425561一、什么是单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。二、单例的几种实现方式1......
  • Java: How To Count Words
    publicclassMain{publicstaticvoidmain(String[]args){Stringwords="OneTwoThreeFour";intcountWords=words.split("\\s").length;Sy......