`
kylinsoong
  • 浏览: 241801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

经典扫雷游戏-入行一周年纪念

阅读更多

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可以输出日志运行,这样可以明白具体设计思路

0
0
分享到:
评论
2 楼 konnin 2010-09-19  
目前还在实习中,再过几个月也就出来了哦!
1 楼 liubey 2010-09-19  
支持一下,我在想 我入行一年的时候能有什么区纪念一下呢

相关推荐

    基于vue的菜谱网站,前端采用vue,后端采用express,数据库采用mysql。.zip-毕设&课设&实训&大作业&竞赛&项目

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    数据分析全流程指南:从基础知识到实战项目的Python&R生态应用

    内容概要:本文档提供了关于数据分析全面的知识介绍与实战资源链接。首先,在数据分析的基础教程部分讲述了使用Python以及R两种语言来进行实际的数据分析工作所需具备的各项基本技能。其次,进阶教程涵盖从机器学习到深度学习的概念及其Python具体应用场景。接着,在工具有效利用层面介绍了多种热门库与平台的作用特点。在项目实践中,列举了四个实战案例:Titanic幸存者预测、房价预测、社交媒体情感倾向分析以及市场顾客购买模式研究,每个项目都有详细的技术流程指引。另外列出多个外部网站资源供进一步提升学习。 适用人群:本文主要面向有志于从事数据挖掘工作的学生和技术爱好者,同时也可辅助在职人士自我能力进阶。无论是在学术科研还是实际业务需求环境中都值得研读。 使用场景及目标:学习者将能够获取到系统的理论知识体系,熟悉业界主流软件包的功能优势,掌握具体业务问题解决方案路径,提高自身的综合技术素质,从而为个人职业规划增添竞争力。 其他说明:文档里推荐了不少高质量参考资料和实用线上学习社区,能有效补充专业知识空白并促进社交协作交流。

    从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx

    从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx

    复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE

    复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE差分进化算法求最优化问题 对配套文献所提出的改进的L-SHADE差分进化算法求解最优化问题的的复现,提供完整MATLAB源代码和测试函数集,到手可运行,运行效果如图2所示。 代码所用测试函数集与文献相同:对CEC2014最优化测试函数集中的全部30个函数进行了测试验证,运行结果与文献一致。 ,复现; 改进的L-SHADE差分进化算法; 最优化问题求解; MATLAB源代码; 测试函数集; CEC2014最优化测试函数集,复现改进L-SHADE算法:最优化问题的MATLAB求解与验证

    DCDC 电阻分压计算器

    可选择参考电压与输出电压 可选择电阻精度以及输出电压误差值

    西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与

    西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与V14及以上版本技术参考,西门子1200博途三部十层电梯程序案例,加Wincc RT Professional画面三部十层电梯程序,版本V14及以上。 程序仅限于参考资料使用。 ,西门子;1200博途;三部十层电梯程序案例;Wincc RT Professional;V14以上程序版本。,西门子V14+博途三部十层电梯程序案例:Wincc RT Pro专业画面技术解析

    2023政务大数据解决方案.pptx

    2023政务大数据解决方案.pptx

    基于SSM设计的校园二手物品交易网站

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于java的学业跟踪评价系统设计的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了基于Java的学业跟踪评价系统的详细设计与实现,涵盖系统的多维度数据整合与评价、智能化学习建议、数据可视化和实时反馈等方面。系统通过收集课堂表现、作业成绩、考试成绩等多源数据,对学生的学业表现进行全面跟踪和评价,提供可视化反馈以及个性化的学习建议,促进家校互动,助力学生全面素质提升和发展。 适合人群:具备一定Java编程经验的研究者和开发者,特别是从事教育信息化领域的从业人员和技术爱好者。 使用场景及目标:该系统主要用于K12教育阶段、高等教育以及其他涉及教育培训的场景。其目的是提高教育管理效率、推进教育数字化转型和个人化教育实施。 其他说明:该文档详细介绍了系统的设计思路、功能模块和技术细节,并提供了完整的程序代码以及GUI设计说明。对于希望深入了解或实际部署学业跟踪评价系统的机构非常有参考价值。文中强调技术创新与实践经验相结合,突出了实用性和前瞻性特点。

    基于vue实现的WebAPP.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    rabbmit相关安装包

    erlang安装包,rabbmit安装环境

    linux 下的oracle数据库的开机启动脚本

    linux 下的oracle数据库的开机启动脚本,将里面的/home/oracle/app/oracle/product/11.2.0/dbhome_1 都改成你的oracle数据库的路径。在root用户下chmod +x 添加执行权限,然后./oracle_setup.sh 执行即可。

    基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实现与初级应用,基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践:初级拉格朗日算法应用,GAMS代码:基于目标级联分析法的多微网

    基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实现与初级应用,基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践:初级拉格朗日算法应用,GAMS代码:基于目标级联分析法的多微网主动配电系统自治优化经济调度 该代码并非完全复现该文献,而是参照文献 《基于目标级联分析法的多微网主动配电系统自治优化经济调度》 的目标级联分析法(ATC)的算法部分,采用初级的拉格朗日算法,主网与配网部分模型较为简化。 代码结构完整,注释详细,可读性较强,可以在此基础上进行修改或者移植。 适用于初学者学习ATC模型 ,GAMS代码;目标级联分析法(ATC);微网主动配电系统;自治优化经济调度;拉格朗日算法;主网与配网模型简化;代码结构完整;注释详细;可读性强;初学者学习ATC模型。,基于ATC算法的GAMS多微网经济调度优化代码:简化版学习指南

    基于ISODATA改进算法的负荷场景曲线聚类-适用于风光场景生成的高效算法创新,基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成,包含K-means等多种聚类方法与效果评价),基于I

    基于ISODATA改进算法的负荷场景曲线聚类——适用于风光场景生成的高效算法创新,基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成,包含K-means等多种聚类方法与效果评价),基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成) 摘要:代码主要做的是一种基于改进ISODATA算法的负荷场景曲线聚类,代码中,主要做了四种聚类算法,包括基础的K-means算法、ISODATA算法、L-ISODATA算法以及K-L-ISODATA算法,并且包含了对聚类场景以及聚类效果的评价,通过DBI的计算值综合对比评价不同方法的聚类效果,程序实现效果非常好,适合对于算法创新有需求的人,且也包含基础的k-means算法,用来学习也非常棒 另外,此代码同样适用于风光场景生成,自己准备好风光场景数据即可 代码非常精品,有部分注释; ,核心关键词: 1. 基于ISODATA改进算法 2. 负荷场景曲线聚类 3. K-means算法 4. 聚类场景评价 5. 聚类效果评价 6. DBI计算值 7. 算法创新需求 8. 风光场景生成 以上关键词用分号分隔为: 1. 基于ISO

    xpack-qemu-arm-8.2.2-1-win32-x64.zip

    xPack qemu arm 是一款高性能且跨平台的 ARM 架构虚拟机

    莫理莉+AI+为新型能源系统赋能-技术与建筑建筑供配电论坛琶洲.pptx

    莫理莉+AI+为新型能源系统赋能-技术与建筑建筑供配电论坛琶洲.pptx

    学生毕业离校系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    学生毕业离校系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 本系统分为学生、教师、管理员3个角色 (1)学生功能需求 学生进入系统可以查看首页、个人中心、离校流程、网站公告、费用结算管理、论文审核管理、我的收藏管理等操作。 (2)教师功能需求 教师进入系统可以查看首页、学生管理、离校流程管理、费用结算管理、论文审核管理等操作。 (2)管理员功能需求 管理员登陆后,主要功能模块包括首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等功能。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    揭秘 OpenAI 在 2027 年前创建 AGI 的计划.pptx

    揭秘 OpenAI 在 2027 年前创建 AGI 的计划.pptx

    单极双极调制下,线路阻抗不匹配时两台单相逆变器并联的离散仿真模型研究,单极双极调制下,线路阻抗不匹配时单相逆变器Simulink并联仿真模型研究,单相逆变器Simulink并联离散仿真模型,输入电压4

    单极双极调制下,线路阻抗不匹配时两台单相逆变器并联的离散仿真模型研究,单极双极调制下,线路阻抗不匹配时单相逆变器Simulink并联仿真模型研究,单相逆变器Simulink并联离散仿真模型,输入电压400V,单台逆变器功率为2000W,使用下垂控制方案,在线路阻抗不匹配的情况下,实现两台逆变器并联。 可以选调制方案为单极性调制或者双极性调制。 离散模型,功率均分效果,两台逆变器输出电压和电流波形如下图。 ,核心关键词:单相逆变器; Simulink; 并联离散仿真模型; 输入电压400V; 单台功率2000W; 下垂控制方案; 线路阻抗不匹配; 调制方案; 单极性调制; 双极性调制; 功率均分效果。,离散仿真模型下,单相逆变器并联研究——400V输入、2000W功率均分实现

Global site tag (gtag.js) - Google Analytics