Java实现简单的扫雷图

用Java实现简单的扫雷图,供大家参考,具体内容如下

扫雷图的思想是:

1、地图可以是一个二维数组,并对数组进行初始化

2、随机生成雷的位置,可以用Random函数进行随机生成也可以用Math.random()进行随机生成

(PS:我就是简单随机下标生成了雷的位置)

3、对每一个非雷的位置一周的格子进行判断是否有雷,进行数字的累加

4、遍历数组进行输出

private static void mineClearance() {
  // 声明一个二维数组表示扫雷地图
  String[][] mineClearanceMap = new String[9][9];
  //初始化数组
  for (int i = 0; i < mineClearanceMap.length; i++) {
   for (int j = 0; j < mineClearanceMap.length; j++) {
    mineClearanceMap[i][j] = "0";
   }
  }
  Random random = new Random();
  //随机生成地雷
  for (int i = 0; i < 25; i++) {
   mineClearanceMap[random.nextInt(mineClearanceMap.length)][random.nextInt(mineClearanceMap.length)] = "*";// *表示雷
  }

  //mineClearanceMap[i][j]的一周的坐标,用i+x,j+y得到周围的坐标
  int x[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
  int y[] = { -1, 0, 1, -1, 1, -1, 0, 1 };

  for (int i = 0; i < mineClearanceMap.length - 1; i++) {
   for (int j = 0; j < mineClearanceMap.length - 1; j++) {
    int count = 0;
    if (!"*".equals(mineClearanceMap[i][j])) {
     for (int k = 0; k < 8; k++) {
      int xx = i + x[k];
      int yy = j + y[k];
      if (xx >= 0 && yy >= 0) {// 坐标不能出界,数组从(0,0)开始
       if (mineClearanceMap[xx][yy] == "*") {
        count = count + 1;// 累计这八个方位的雷总数
       }
      }
     }
     mineClearanceMap[i][j] = count + "";// 输出每个位置周围的雷数
    }

   }

  }

  System.out.println("得到的扫雷图,*为雷");
  for (int j = 0; j < mineClearanceMap.length; j++) {
   for (int j2 = 0; j2 < mineClearanceMap.length; j2++) {
    System.out.print(mineClearanceMap[j][j2]);
   }
   System.out.println();
  }

 }

运行截图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现Linux(centos) 中docker容器下命令交互的代码(配置向导)

    开发需求: 因系统程序部署时,经常是拆分部署(多台机器) ,手工部署费时费力,且每次都要手工配置系统参数(系统提供配置向导). 如下图所示: 1)进行main容器 -> 2)执行系统配置向导 -> 3)选择服务器模式 -> 4) 选择web控制台....然后进行具体的服务器IP设置. 为了解放双手,用java实现了Linux(centos) 下docker 应用程序的命令交互. 具体代码如下: import java.io.*; /** * @author by dujiajun * @

  • java实现表单必填参数验证的方法

    一. 概述 在开发后端接口, 通常都会涉及检验参数必填校验, 一般我们的处理都是很粗暴的写个if()判断, 然后抛异常. 本文将介绍通过代理的思想, 用注解优雅的处理非空判断 二. 实现过程 最终想要的效果->在方法的参数加个注解或者参数的属性里加个注解, 注解可以自定义报错信息, 就可以实现自动非空校验 2.1 编写注解 @Target({ElementType.FIELD}) //作用的位置 @Retention(RetentionPolicy.RUNTIME) //作用域 @Documen

  • java实现树形菜单对象

    本文实例为大家分享了java实现树形菜单对象的具体代码,供大家参考,具体内容如下 1.SysMenu package com.zy.shiro.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.f

  • 教你用Java实现RSA非对称加密算法

    一.非对称加密 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥).公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密.因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法. 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方:甲方再用自己私钥对加密

  • 图文详解JAVA实现快速排序

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 9 3 4 5 10 8"这个10个数进行排序.首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了).为了方便,就让第一个数6作为基准数吧.接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列: 3 1 2 5

  • 教你怎么用java实现客户端与服务器一问一答

    运行效果 开启多个客户端 服务端效果: 客户端效果: 当一个客户端断开连接: 代码 因为代码中有注释,我就直接贴上来了 服务端: package com.dayrain.server; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.*; import j

  • Java实现雪花算法的原理

    SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法.其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id.在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解. 这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号. 给大家举个例子吧,比如下面那个 64 bit 的 long 型数字: 第一个部分

  • Java实现哈希表的基本功能

    一.哈希表头插法放入元素 /** * user:ypc: * date:2021-05-20; * time: 11:05; */ public class HashBuck { class Node { public int key; int value; Node next; Node(int key, int value) { this.key = key; this.value = value; } } public int usedSize; public Node[] array;

  • Java实现多线程中的静态代理模式

    前言 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式. 静态代理属于设计模式中的代理模式.反之则有动态代理,本篇文章不展开讲,有兴趣的可自行谷歌研究研究. 其实继承Thread也属于静态代理的一种,所以在这里学习静态代理有助于我们学习多线程. 静态代理 优点:可以在不修改目标对象的前提下扩

  • Java实现学生成绩管理系统

    本文实例为大家分享了Java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 新手练手小项目,主要练习面向对象.循环.数组.排序等等. 本人也是自学练手,代码有不正确的或不完善的也请多多包涵,留言指导. 感谢! 一.创建学生类 储存学生的基本信息 public class Student { private int no; private String name; Result result; public Student() { super(); } public Student(in

  • Java实现NIO聊天室的示例代码(群聊+私聊)

    功能介绍 功能:群聊+私发+上线提醒+下线提醒+查询在线用户 文件 Utils 需要用maven导入下面两个包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> </dependency> <dependency> <group

  • Java数据结构之实现跳表

    1.跳表的定义 跳跃表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好. SkipList(跳表)是一种可以代替平衡树的数据结构,默认是按照Key值升序的.SkipList让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过"空间来换取时间"的一个算法,在每个节点中增加了向前的指针,在插入.删除.查找时可以忽略一些不可能涉及到的结点,从而提高了效率. 在Java的API中已经有了实

  • Java实现学生信息管理系统IO版本

    学生信息管理系统IO版本代码实现(java),供大家参考,具体内容如下 之前写过的一个学生信息管理系统是用集合类来写的,但是不能实现代码在文档中的存储功能,每次运行过后都得重新输入数据,无法做到保存的功能. 而用IO流进行学生信息管理系统的编写以后将数据存储在文本文件中,以后每次访问都可以访问到之前已经存到的数据,类似于数据库的一个存储功能(这里并没有用到Mysql数据库,仅仅是用文本文档来进行数据的一系列存储) 以下是代码的实现过程: 主类 package zjh; import java.i

  • 用Java实现24点游戏

    一.常见游戏规则 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题. 1.程序风格良好(使用自定义注释模板) 2.列出表达式无重复. 提高要求:用户初始生命值为一给定值(比如3),初始分数为0.随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这

  • 教你怎么用Java实现给图片打上水印

    一.原图片 二.打水印(文字) import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; public class ImageUtils { // 水印字体 private static final Font FONT = new Font("微软雅黑", Font.

  • Java实现FTP文件上传

    一.配置FTP文件服务器 以Ubuntu为例 FTP两种模式简介 PORT(主动模式) 第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务器的21号端口建立TCP连接,在FTP中这个连接叫做控制连接,连接成功建立后,FTP客户端会发送port命令,紧接着FTP客户端会监视自己的p1+1端口,FTP服务器接收到port命令会从自己的20号端口向FTP客户端的p1+1端口发起请求建立TCP连接,这个连接叫做数据连接,用来发送数据,数据传输完毕后数据连接随即

  • 教你怎么使用Java实现WebSocket

    一.WebSocket简介 WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能. 在WebSocket应用程序中,服务器发布WebSocket端点,客户端使用url连接到服务器.建立连接后,服务器和客户端就可以互相发送消息.客户端通常连接到一台服务器,服务器接受多个客户端的连接. 1.1 WebSocket协议 WebSocket协议有两个部分:握手和传输.客户端通过向服务端URL发送握手请求来建立连接.握手与现有的基于HTTP的基础结构相兼容.Web服务

  • 我用java实现了王者荣耀的皮肤和英雄技能

    一.前期准备 提示:如果友友你没有看过系列一的文章点击这个链接:王者荣耀中一个英雄是怎么被产生的?(一) 我们现在功能比较多,所有为了让程序运行起来比较直观,我们需要创建一个Menu包,来定义一些操作的界面: Menulogin是游戏选择英雄皮肤,铭文和进入游戏的界面:代码简单易懂,我就不解释了 package Menu; import java.util.Scanner; public class Menulogin { public static int Menulogin(){ Syste

随机推荐