0
点赞
收藏
分享

微信扫一扫

java利用递归实现扫雷

九点韶留学 2022-11-28 阅读 159

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");












}





































}
















}




}








}

举报

相关推荐

0 条评论