1. 从去年实习开始算起,到现在正式工作两月正好是入行一周年,在这一周年之时写个东西总要纪念一下,所以这个扫雷游戏就诞生了,虽然没有什么创新,但我还是尝试加了点我的东西在里面,开发全过程花了我两个周末的时间,今天晚上将他公布出来……
2. 用了经典的MVC软件构加,如下图:
如上图所示显示主要类:
视图层:用Swing实现,非常简单,一个Frame里两个Panel
控制层:所以逻辑的核心,用了两个线程完成,一个主线程,一个协助线程,控制所有逻辑
模型层:负责控制Resource如图片,声音,持久化等操作
3 用Spring AOP的思路实现向Console输出日志记录
没有错我是用动态代理的原理写了一个Commandline,如果以CLiRunner的方式启动可以输出日志,核心代码:
ConsoleHanlder hanlder = new ConsoleHanlder(gamePanel);
Object obj = Proxy.newProxyInstance(MineFrame.class.getClassLoader(), new Class[]{GameListener.class}, hanlder);
proxy = (GameListener) obj;
4 模型层核心类用单例设计模式和工厂设计模式来完成
单例和工厂的妙处这里就不多说,贴出核心代码:
private static ResourceManager instance;
public static ResourceManager getInstance() {
if(instance == null) {
instance = new ResourceManager();
}
return instance;
}
private ResourceManager() {
}
5 DNS算法找出要显示的大片空白
代码:
private Set<Point> searchWhiteArea(int i, int j) {
Set<Point> whiteSet = new HashSet<Point>();
whiteSet.add(new Point(i,j));
blankArea(i, j, whiteSet);
blankAreaEdge(whiteSet);
return whiteSet;
}
private void blankArea(int i, int j, Set<Point> whiteSet) {
if (mines[i][j] != 0) {
return;
}
addWhitePoint(i, j - 1, whiteSet);
addWhitePoint(i + 1, j, whiteSet);
addWhitePoint(i, j + 1, whiteSet);
addWhitePoint(i - 1, j, whiteSet);
}
private void addWhitePoint(int i, int j, Set<Point> whiteSet) {
if(i > paramMap.get(Constants.GRID_X) - 1 || i < 0 || j > paramMap.get(Constants.GRID_Y) - 1 || j < 0) {
return;
}
if(mines[i][j] == 0 ) {
Point p = new Point(i,j);
if(!whiteSet.contains(p)) {
whiteSet.add(p);
blankArea(i,j, whiteSet);
}
}
}
private void blankAreaEdge(Set<Point> whiteSet) {
Set<Point> edgePoints = new HashSet<Point>();
for (Point p : whiteSet) {
addEdgePoint(p.x, p.y - 1, edgePoints);
addEdgePoint(p.x + 1, p.y - 1, edgePoints);
addEdgePoint(p.x + 1, p.y, edgePoints);
addEdgePoint(p.x + 1, p.y + 1, edgePoints);
addEdgePoint(p.x, p.y + 1, edgePoints);
addEdgePoint(p.x - 1, p.y + 1, edgePoints);
addEdgePoint(p.x - 1, p.y, edgePoints);
addEdgePoint(p.x - 1, p.y - 1, edgePoints);
}
whiteSet.addAll(edgePoints);
}
private void addEdgePoint(int i, int j, Set<Point> edgePoints) {
if(i > paramMap.get(Constants.GRID_X) - 1 || i < 0 || j > paramMap.get(Constants.GRID_Y) - 1 || j < 0) {
return;
}
if(mines[i][j] >= 1 || mines[i][j] <= 8) {
Point p = new Point(i,j);
if(!edgePoints.contains(p)) {
edgePoints.add(p);
}
}
}
6. Java代码播放声音
游戏过程会有各种声音发出,这里调用JavaAPI来完成,如下
private static final String[] sounds = {
"continue.wav",
"scoring.wav",
"over.wav",
"winning.wav"
};
private static AudioClip[] pool = new AudioClip[sounds.length];
public static void play(int type) {
if(pool[type] == null) {
try {
URL url = ResourceManager.class.getResource(
"/com/kylin/mine/resource/" + sounds[type]);
if(url != null) {
pool[type] = Applet.newAudioClip(url);
}
} catch(Exception e) {
e.printStackTrace();
}
}
if(pool[type] != null) {
pool[type].play();
}
}
7.贴几个截图
模仿Window扫雷,可以玩三种不同的级别
显示游戏失败画面
显示游戏过程
8. 两个地方不完善:显示动画和统计信息
9.附件文件中有源代码,如有人提出指导我不胜感激。
10. 下载mine.rar解压开文件夹,在该文件夹下点击mine.bat可以正常启动,点击mineCli.bat可以输出日志运行,这样可以明白具体设计思路
分享到:
相关推荐
基于java的贝儿米幼儿教育管理系统答辩PPT.pptx
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
基于java的消防物资存储系统答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
TA_lib库(whl轮子),直接pip install安装即可,下载即用,非常方便,各个python版本对应的都有。 使用方法: 1、下载下来解压; 2、确保有python环境,命令行进入终端,cd到whl存放的目录,直接输入pip install TA_lib-xxxx.whl就可以安装,等待安装成功,即可使用! 优点:无需C++环境编译,下载即用,方便
使用软件自带的basic脚本编辑制作的脚本 低版本软件无法输出Excel报告,可以通过脚本方式实现这一功能
基于java的就业信息管理系统答辩PPT.pptx
25法理学背诵逻辑.apk.1g
基于java的大学生校园兼职系统答辩PPT.pptx
做到代码,和分析的源数据
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
适用于ensp已经入门人群的学习,有一定难度
基于java的数码论坛系统设计与实现答辩PPT.pptx
tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl
基于java的医院信管系统答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
tornado-4.2.tar.gz
链表 合并两个链表,链表基础操作