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++){

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

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

     

       

       

        }

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

        }

        

           //游戏开始

           for(;;){

          //输出界面

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

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

             

              if(map[i][j]>=10&map[i][j]<999){

              System.out.print("+ ");

              }

              if(map[i][j]==999){System.out.print("? ");}

              if(map[i][j]<9){

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

              }

             

             

              }

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

               }

          //请用户输入坐标

          Scanner input=new Scanner(System.in);

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

               int x=input.nextInt();

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

               int y=input.nextInt();

               //如果是雷

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

              //把所有雷的位置传给map

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

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

              if(bomb[i][j]==9){

              map[i][j]=bomb[i][j];

              }

              }

             

              }

              //显示map

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

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

          if(map[i][j]>=10&map[i][j]<999){

                  System.out.print("+ ");

                  }

                  if(map[i][j]==999){System.out.print("? ");}

                  if(map[i][j]==9){

                  System.out.print("* ");

                  }

                  if(map[i][j]<9){

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

                  }

                 

                 

          }

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

          }

              System.out.println("You die!");

              System.out.println("Game over!");

              //退出程序

              System.exit(0);

              

              

               }

               else{

              //如果是空格

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

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

             k++;

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

              cr(x,y);

              

              }

              //不是空格

              else{

              k++;

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

              }

               }

               //如果翻开了360个格子

               if(k==360){

              //输出map

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

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

                 

                  if(map[i][j]>=10&map[i][j]<999){

                  System.out.print("+ ");

                  }

                  if(map[i][j]==999){System.out.print("? ");}

                  if(map[i][j]<9){

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

                  }

                 

                 

                  }

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

                   }

              System.out.println("You win!");

              //end

              break;

               }

          

           }

}

}

Java利用递归实现扫雷的更多相关文章

  1. java利用递归实现汉诺塔算法

    package 汉诺塔; //引入Scanner包,用于用户输入 import java.util.Scanner; public class 汉诺塔算法 { public static void m ...

  2. Java 利用递归删除文件以及文件夹

    直接上代码: /** * 递归删除 文件/文件夹 * * @param file */ public static void deleteFile(File file) { System.out.pr ...

  3. JAVA利用递归的方法删除一个文件夹以及文件夹下所有的子文件

    public static boolean deleteFolder(String url) { File file = new File(url); if (!file.exists()) { re ...

  4. java作业利用递归解决问题

    第一题 利用递归求组合数 设计思想 (1)首先根据公式求,利用递归完成阶乘函数的初始化,并且通过调用阶乘,实现公式计算 (2)递推方法,根据杨辉三角的特点,设置二维数组,从上到下依次保存杨辉三角所得数 ...

  5. java 中递归的实现 以及利用递归方法实现汉诺塔

    今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...

  6. 利用递归,反射,注解等,手写Spring Ioc和Di 底层(分分钟喷倒面试官)了解一下

    再我们现在项目中Spring框架是目前各大公司必不可少的技术,而大家都知道去怎么使用Spring ,但是有很多人都不知道SpringIoc底层是如何工作的,而一个开发人员知道他的源码,底层工作原理,对 ...

  7. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  8. java利用JDK调用并执行js源码

    前言: 不同开发语言之间具有通用性,更具有协作调用的可能.有时候对于一些场景会有调用js的需求,因此下面展示了一个java利用自身JDK调用js函数的demo,供感兴趣的朋友参考. js函数文件 ex ...

  9. Java利用Preferences设置个人偏好

    Java利用Preferences设置个人偏好 Preferences的中文意思即偏好或喜好的意思,也就是说同一个程序在每次运行完后,可以通过Preferences来记录用户的偏好,下次启动时,程序会 ...

随机推荐

  1. HDU4522 湫湫系列故事——过年回家

    传送门:点我 中文题面. 思路:拿spfa对卧铺和硬铺分别跑spfa,然后找两个的最短路.体感堆优化的dij也可以,不过spfa跑跑就过去了.有个细节是最后得用long long 存数据,其他的没啥. ...

  2. WLC5520无法通过无线客户端进行网管故障解决

    客户反馈其办公环境中的WLC5520网管需要通过内部有线网络进行管理,通过无线客户端无法进行管理,远程协助其开启WLC5520的无线管理功能后故障解决.

  3. PHP20-challenge12

      看下eval+var_dump的妙用.   eval会执行括号中的内容:var_dump中内容是字符串时输出的模式是 string(x) "xxxx".如果他俩结合,是可以很好 ...

  4. IE浏览器调试工具不能使用

    Mac 使用VMware Fusion虚拟机,安装Windows 7 Service Pack 1 (SP1). 移除自带的IE8,下载并安装IE11(64位). IE 11 调试工具不能使用,并且调 ...

  5. SQL Server 2008 R2如何生成带数据的数据库脚本

    1.对想要复制的数据库右键,“任务”,“生成脚本” 2.下面需要注意的是,默认情况下,只会生成仅架构的脚本,也就是说仅仅有表结构,而没有数据的空壳.所以需要额外的设置. 在设置脚本编写选项,选择“高级 ...

  6. swift - 本地通知

    1. AppDelegate  注册 class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? fun ...

  7. swift - 自定义tabbar按钮的操作

    1.自定义tabbar按钮 只能 present出来VC 或者 nav. 因为它本身 没有导航控制器, 只有在tabbar 的根导航控制器的 VC 才能push

  8. day 08 函数

    函数初始: 什么是函数? 函数:是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段 一个函数封装一个功能. 1,减少重复代码. 2,增加代码的可读性. 函数的结构 def my_len(): ...

  9. 在Eclipse中安装python插件的方法

    一个博士给了我一堆代码,原本以为是C++或者java写的,结果是python,我压根没学过呀,不过本着语言都是相通的原则,我硬着头皮开始学习Python,当然先学习安装IDE(以前学习一门新语言,我会 ...

  10. 在ALV界面添加下拉框

    1.在alv界面表单属性中设置 if wa_fieldcat-fieldname = 'YC_MARK'.              wa_fieldcat-edit = 'X'.           ...