图形用户界面(GUI)的实现是用Java自带的两个包awt和swing,

扫雷的实现用了四个类

一. ClearMineMap

用于存储底层的数据 运行他可以在控制台显示布雷的数据

package clearmine;import java.util.Random;public class ClearMineMap {int rows; // 行数int cols; // 列数int level; // 等级int mineCount = 0; // 雷数int [][] mineMap = null; // 扫雷地图/*** 初始化扫雷方法* @param level 等级*/public void init(int level) {switch(level) {case 1:rows = 9;cols = 9;mineCount = 10;break;case 2:rows = 16;cols = 16;mineCount = 40;break;case 3:rows = 16;cols = 30;mineCount = 99;break;}mineMap = new int[rows][cols];burnMine();}/*** 重置扫雷地图的方法*/public void reset() {for (int i = 0; i < rows; ++i) {for (int j = 0; j < rows; ++j) {mineMap[i][j] = 0;}}}/*** 布雷的方法,循环布雷->随机生成两个数,构成一个点的坐标,判断这个坐标位置有无雷,有雷则换个位置* 如果没有雷,则布雷,然后剩余雷数-1,该位置周围8个位置雷数加一* 存方式一个格子有三类信息要存,我们采用二进制的方法存储* int整形有32位我们取后7位即可* 最后一位存储是否有雷 0表示无雷,1表示有雷 val & 0b1 = 1(有雷等于1)* 倒数第二第三存储这个位置的打开状态 00-未打开,01-打开 ,10-插旗,11-问号 val & 0b110(=0b000表示未打开)* 倒数4、5、6、7表示周围雷数 0b1111000 >>>3右移三位表示雷数    0b0000000+0b1000表示周围雷数加一* @param args*/public void burnMine() {Random rd = new Random();int x, y;for(int i = 0; i < mineCount;) {x = rd.nextInt(rows);y = rd.nextInt(cols);if((mineMap[x][y] & 0b1) == 1) {// 说明这个地方已经有雷了continue;}mineMap[x][y] = 0b1; //直接布雷// 周围8个位置雷数加1if(x - 1 >= 0) { // 说明上面还有一行mineMap[x - 1][y] += 0b1000;if (y - 1 >= 0) {mineMap[x - 1][y - 1] += 0b1000;}if(y + 1 < cols) { // 右上方 + 1 mineMap[x - 1][y + 1] += 0b1000;}}if(x + 1 < rows) { // 说明下面还有一行mineMap[x + 1][y] += 0b1000;if (y - 1 >= 0) {mineMap[x + 1][y - 1] += 0b1000;}if(y + 1 < cols) { mineMap[x + 1][y + 1] += 0b1000;}}if (y - 1 >= 0) {mineMap[x][y - 1] += 0b1000;}if(y + 1 < cols) { mineMap[x][y + 1] += 0b1000;}++i;}}/*** 显示地图的方法*/public void showMap() {for(int []arrs : mineMap) {for(int num : arrs) {if((num & 0b1) == 1) {System.out.print("A  ");}else {if((num >> 3) == 0) {System.out.print("   ");}else {System.out.print((num >>> 3) + "  ");}}}System.out.println("\n");}}public static void main(String[] args) {ClearMineMap cmm = new ClearMineMap();cmm.init(1);cmm.showMap();}}

二 ClearMine

显示界面的逻辑层, 和ClearMineMap的关系为关联关系,获取ClearMineMap的数据转化成图形界面

三 MyMouseListener

时刻监听鼠标点击事件,和ClearMine的关系为关联关系,设计逻辑每次点击改变ClearMine.mineMap[][]的值

四 Startgame

程序主入口,用于启动带图形化界面的main

package clearmine;public class StartGame {public static void main(String[] args) {ClearMine cm = new ClearMine();cm.init(1);cm.create();}}

运行效果:

完整代码:Java经典扫雷带界面完整版

【Java学习日志3.31】经典扫雷带界面完整版相关推荐

  1. 题解,java学习日志(3)

    题解 U - 速算24点 D - Bank(标记) E.2xN Grid C.Findand Replace D.Odd Queries 搜索题组 U - 速算24点 思路:map映射将特定字符转化成 ...

  2. Java学习日志(八): 可变参数,debug断点调试,静态导入,集合嵌套

    JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇) Java学习日志(八) 可变参数 debug断点调试 静态导入 集合嵌套 可变参数 JDK1.5之后的新特性 作用 ...

  3. Java学习笔记(五):一张图总结完JVM8基础概念

    Java学习笔记(五):一张图总结完JVM8基础概念 引文 最近在学习JVM的相关内容,好不容易把基础概念全部都学了一遍,却发现知识网络是零零散散的.迫不得已,只好再来一次总的归纳总结.为了更好的理解 ...

  4. java期末课程设计----模拟银行业务(带界面)

    java期末课程设计----模拟银行业务(带界面) 本项目包含存款,取款,查询,转账,修改密码等功能的银行管理系统的功能(不涉及数据库).大致流程图如下: 一.设计思路 本系统采用JAVA语言并在ec ...

  5. 视频教程-大型Java项目视频教程_王勇老师DRP项目教程完整版292集-Java

    大型Java项目视频教程_王勇老师DRP项目教程完整版292集 动力节点王勇老师,CCTV<影响力对话>栏目特约嘉宾,Java培训知名讲师,中国Java培训领军人物,北京动力节点创始人,董 ...

  6. 常用经典SQL语句大全完整版--详解+实例 (存)

    常用经典SQL语句大全完整版--详解+实例 转 傻豆儿的博客 http://blog.sina.com.cn/shadou2012  http://blog.sina.com.cn/s/blog_84 ...

  7. Netty权威指南带目录完整版.pdf

    2019独角兽企业重金招聘Python工程师标准>>> Netty权威指南带目录完整版.pdf 转载于:https://my.oschina.net/xiaojianyu/blog/ ...

  8. java周志第二周_第二周JAVA学习日志

    从这周老师讲的东西中,我了解了许多以前不懂得东西.这周老师布置的作业,对我来说真的有点困难.通过上课的学习和下来翻书,勉强完成了一个登录界面的制作.这周学习的事件处理和swing组建以及swing组建 ...

  9. python接口自动化测试框架实战从设计到开发_【B0753】[java视频教程]Python接口自动化测试框架设计到开发完整版视频教程 it教程...

    Java视频教程名称:Python接口自动化测试框架设计到开发完整版视频教程   java自学网[javazx.com]  Python视频教程   it教程 Java自学网收集整理 java论坛&q ...

最新文章

  1. Single Shot Multibox Detection (SSD)实战(上)
  2. 服务器主机防御系统,主机入侵防御系统
  3. python 设置开机自动启动 .py 文件
  4. c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
  5. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
  6. myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)
  7. 既有“基本盘”又有“增长盘”,宝盛集团的营销“生意经”
  8. 在CentOS中安装gcc配置c语言开发环境(转)
  9. Mock 框架 Moq 的使用
  10. 牛客16596 计算系数(排列组合)
  11. 最高的分数(信息学奥赛一本通-T1062)
  12. 汉字转换成拼音的代码(asp版)
  13. DPDK在Linux用户级执行环境中执行EAL
  14. qml 发光_“木头”也能发光,研究人员:或用于家庭照明及显示
  15. Unity 内置渲染管线转URP
  16. 计算机唱歌按键学猫叫6,电脑键盘按键的功能介绍(最全的键盘各键及组合键功能说明)...
  17. 树莓派开发笔记(八):GPIO口的I2C使用(BME280三合一传感器:温度、湿度、气压测量)
  18. 聊一聊固态硬盘的那些事
  19. 爱思唯尔(ELSEVIER)期刊LaTeX通用模板下载及使用技巧
  20. java 整型数组定义_JAVA数组的定义及用法

热门文章

  1. 2021年新高考八省联考江苏成绩查询,2021年新高考八省联考模拟录取分数线公布-在线输入分数选大学...
  2. gprMax3.0安装教程
  3. 目标检测:FasterRCNN,RFCN和Light-RCNN的对比分析
  4. 【UP】锤子剪刀布(优化 AC)
  5. arduino 基础设备使用-数码管
  6. 7-zip 7z压缩文件的时候排除指定的目录文件夹
  7. 网络安全真的没法入行吗?
  8. 【论文笔记之 RNNoise】A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement
  9. MAX30102血氧传感器的实际标定公式
  10. 沙 棘 叶 中 多 糖 的 初 步 研 究