毕业设计java版扫雷游戏Word格式.docx
- 文档编号:21312696
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:24
- 大小:200.43KB
毕业设计java版扫雷游戏Word格式.docx
《毕业设计java版扫雷游戏Word格式.docx》由会员分享,可在线阅读,更多相关《毕业设计java版扫雷游戏Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
连续四个1两边的1有雷。
口诀:
一夹二,一有雷;
二夹一,心有雷;
二夹三,全有雷;
二二边,都有雷;
三连一,中有雷;
四连一,边有雷。
先扫四个角,紧接扫中间
这里的2和1并不是只有2、1的格子才能适用,有的时候比如是3或4,
但附近已经标了一个雷,剩下1或2颗还不能确定,当然也可以使用这个原则。
同时也可也用此法:
围绕数字一圈8个格子中就有数字所是雷的个数,之后可以推理了。
秘诀:
按住键盘中z下方的Alt左边的一个键,再按一下D,这样扫雷界面会最小化,然后用鼠标点一下下边的扫雷页面,时间就会停住,而且打开扫雷界面,输入XYZZY,按一下右下角的shift键。
这时,鼠标放在雷区,在方格区活动,你会看到屏幕左上角有个小光点在一闪一闪。
(很小很小的,不容易看。
最好桌面是深色的,要不看不清)
小光点出现,说明鼠标停在的格子不是雷。
相反,就是雷区。
扫雷游戏进入后左上角会有两个选项,1是游戏,2是帮助,游戏按钮可以调节游戏的难易度和设置扫雷
还可以开始和退出,帮助按钮有扫雷的介绍。
1.5国内外扫雷记录
现在扫雷高级的官方纪录是37.775秒,纪录的保持者是迪昂.提乌(DionTiu),在2006年5月9日创造的。
扫雷中级最高的官方纪录是10.015秒,由波兰玩家KamilMuranski保持。
初级纪录是1秒,世界上很多人达到了这一点.在1秒的时间里完成初级的扫雷,据测算概率在0.00058%至0.00119%之间,点四个角的可能性最高。
国内高级记录由中国扫雷第一人张砷镓(世界排名第五位)保持,打破记录用时38.82秒。
几个原则很简单。
首先,如果一个格附近的所有雷都已被标记,同时按下左右键就会自动扫开它附近剩余的格,省的你一个个的按了。
两个2夹一个1,1底下必有雷;
两个2夹n个3,所有的2和3底下都有雷;
连续四个1两边的1有雷————这里的2和1并不是只有2、1的格子才能适用,有的时候比如是3或4,但附近已经标了一个雷,剩下1或2颗还不能确定,当然也可以使用这个原则。
这些原则熟练掌握,能做到一眼看出,并迅速点右键标雷、双击开格,就可以达到100秒以内的水平。
点脑是XP,随便一点开始扫雷,按下键盘"
Windows徽标键+M"
(最小化所有窗口),再用鼠标还原窗口,倒计时会停止.(要用鼠标还原,若用键盘"
Windows徽标键+Shift+M"
还原最小化的窗口倒计时不会停止。
表1-1最新扫雷记录
级别
用时
记录保持者
时间
初级
1.1
莫文雄
2009-9-4
中级
11.07
林锦帆
2012-3-31
高级
38.82
张砷镓
2008-1-26
1.6扫雷与数学界
大多数的电脑都装有扫雷游戏。
扫雷游戏是微软Windows操作系统下的一个游戏。
游戏者要试着从已标明数字的方格周围的正方形内找出所有的地雷,从标明的数字,可以告诉你周围的正方形内隐藏着几个地雷。
不过,你想到过吗?
这看似简单的游戏却能帮助数学家们破解数学领域的一些有趣的难题。
数学家们又希望通过这个电脑游戏解决令人困惑已久的数学难题。
英国伯明翰大学的数学教授里查·
凯耶对与数学有关的游戏十分感兴趣,他认为数学与游戏是一对完美的结合。
玩游戏时,他会想是不是有什么有趣的数学问题隐藏其中,所以他一直在思考能否通过玩电脑游戏来解决数学难题。
凯耶教授在玩了几个星期扫雷游戏后,逐渐悟出了其中的奥秘。
目前的扫雷游戏共分为3个级别:
初级、中级和高级。
级别越高,雷区就越大。
如果继续将级别提高,雷区扩大,就会碰到像不能破解的数学难题一样的困惑。
凯耶教授认为扫雷游戏能帮助解决数学界中困惑数学家们长达30年的一道排列组合难题———“P与NP的问题”。
通过解决这个问题,就可以得出一个结论,一些在某一段时间内看似悬而未决的问题就可能用一种相对简单的方法来破解,如可以通过计算机来解决。
凯耶教授认为,如果能找出最高级扫雷游戏中所有地雷排列组合的规律,他就能解决“P与NP问题”。
剑桥的克雷数学研究院已经提供了100万美元的奖金来奖励能解决这个难题的人。
这样简单的一个电脑游戏竟能把我们带到数学界的一个新突破。
数学问题其实离我们的日常电脑应用并不遥远。
2开发环境及相关技术的介绍
2.1开发环境
表2-1开发环境
操作系统
MicrosoftWindows7
程序语言
java
集成开发环境
MyElipse
2.2Java的由来
Java是由SunMicrosystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。
用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:
跨平台、动感的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常见的浏览器现在均支持Javaapplet。
另一方面,Java技术也不断更新。
Java平台由Java虚拟机(JavaVirtualMachine)和Java应用编程接口(ApplicationProgrammingInterface、简称API)构成。
Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java应用编程接口已经从1.1X版发展到1.2版。
目前常用的Java平台基于Java1.6,最近版本为Java1.7。
Java分为三个体系JavaSE、JavaEE、JavaME。
2.3技术难点
(1)具有计时功能,即能够统计完成游戏所用的时间
(2)空白区域的递归算法
(3)布雷的生成算法
(4)左右键的功能设计
2.4关键技术
1.什么是递归函数
递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。
2.函数调用机制的说明
任何函数之间不能嵌套定义,调用函数与被调用函数之间相互独立(彼此可以调用)。
发生函数调用时,被调函数中保护了调用函数的运行环境和返回地址,使得调用函数的状态可以在被调函数运行返回后完全恢复,而且该状态与被调函数无关。
被调函数运行的代码虽是同一个函数的代码体,但由于调用点,调用时状态,返回点的不同,可以看作是函数的一个副本,与调用函数的代码无关,所以函数的代码是独立的。
被调函数运行的栈空间独立于调用函数的栈空间,所以与调用函数之间的数据也是无关的。
函数之间靠参数传递和返回值来联系,函数看作为黑盒。
3.递归调用的形式
递归调用有直接递归调用和间接递归调用两种形式:
(1)直接递归即在函数中出现调用函数本身。
(2)间接递归调用是指函数中调用了其他函数,而该其他函数却又调用了本函数。
4.递归的条件
(1)须有完成函数任务的语句。
(2)—个确定是否能避免递归调用的测试
(3)一个递归调用语句。
该递归调用语句的参数应该逐渐逼近不满足条件,以至最后断绝递归。
(4)先测试,后递归调用。
在递归函数定义中,必须先测试,后递归调用。
也就是说,递归调用是有条件的,满足了条件后,才可以递归。
5.消除递归
大多数递归函数都能用非递归函数来代替。
6.递归的评价
递归的目的是简化程序设计,使程序易读。
2.5设计软件
程序使用Java语言,开发平台是MyEclipse。
MyEclipse的优点:
1、从编写、差错、编译、帮助等各方面为Java语言量身定做;
2、可无限扩展的强大插件功能;
3、众多公司,厂商,组织的鼎立支持;
4、开放、自由、免费。
Eclipse的缺点:
1、在外观设计功能方面非常欠缺,还没有比较好的插件支持;
2、仍然处于发展阶段,不算特别成熟,还是还会产生BUG;
3、版本更新速度快,导致插件跟新速度跟不上,新版本不兼容旧的插件。
对于页面的布局,页面元素的处理,运用了Dreamweaver。
2.6技术选择
根据所需要实现的功能,利用Java中的事件处理机制,实现各个功能模块中的逻辑设计。
Java独特的语法混合了C、PHP、Perl以及Java自创的语法。
它可以比CGI或者Perl更快速地执行动态网页。
用Java做出的动态页面与其他的编程语言相比,Java是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;
Java还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
Java拥有非常强大的功能,所有的CGI的功能Java都能实现,而且支持几乎所有流行的数据库以及操作系统。
在clickNum()中运用了递归算法,也就是直接或间接的调用了本函数的语句,在打开一个格子后(不是雷),采用了递归的思想打开周围八个不是雷的格子。
3需求分析
3.1可行性分析
可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。
也就是说可行性研究的目的不是解决问题,而是确定问题是否值得去解决,可行性分析研究的是在当前的具体条件下,是否具备必要的资源和其它条件。
本课题中,从经济可行性、技术可行性方面进行研究。
3.1.1经济可行性
当前游戏市场,各种类型的游戏软件层出不穷。
由于游戏的开发成本巨大,游戏的开发往往具有一定的风险性,但是一些小游戏的开发具有成本小,编写简单的优势,所以这些小游戏在游戏开发中也占有一席之地。
在这类小游戏中包括益智类游戏,它以画面精美、游戏方法简单等特点得到大家的认可,成为人们在工作之余不可或缺的好伙伴。
我的研究课题是扫雷游戏,这款小游戏具有投入成本小,开发风险性小等特点。
从经济可行性角度考虑是可行的。
3.1.2技术可行性
这款游戏使用java语言进行编写,java是一种高效的编程语言,可以快速开发出用户需求的产品。
其MyElipse平台为开发者提供了庞大的类库,开发人员只需要通过相应的接口调用需求的方法就可以实现应用程序的快速开发。
这款游戏的定位是单机模式,使用java技术进行开发即可。
游戏中的主要功能均可由java中提供的方法来实现。
经上所述,技术可行性可以实现。
3.2界面分析
3.2.1主界面分析
该游戏的主窗体根据用户显示器分辨率的大小进行动态的调整,确保游戏的界面大小不由显示器分辨率大小的改变而改变。
游戏窗体居中设置,以占屏幕40%为宜。
主窗体中以游戏界面居中,时间计时器以及剩余地雷个数计时器显示在主窗体顶部,而各种游戏设定选项设置在菜单中即可。
游戏可以进行难度的设置,分为初、中、高,共三个难度等级,每个等级都对应着不同的地雷个数,玩家选择不同的难度等级因此对应不同的地雷个数。
难度等级越高,地雷个数越多。
3.2.2界面美化分析
游戏应该充分考虑到美观性,可以通过游戏窗体界面的改变以及合适的游戏素材的添加来实现。
对于窗体界面的改变,这里可以尝试对java中自带的控件进行重定义,在继承了原控件的基础属性之上进行更为美观的修改,如对按钮控件进行重定义,设置为长宽相等的正方形。
游戏中需要用到很多图片素材以及声音素材,图片素材如地雷、计时用的时钟、各种窗体图标等,声音素材如开始声音、地雷爆炸声音、点击雷块声音等,这些素材可以考虑从素材网站进行下载。
3.3运行过程分析
游戏开始时,程序将会在雷区中布上相应难度的雷数,雷数将在左上角的剩余地雷个数框中显示。
布雷完毕后,玩家可以开始进行游戏,在点击按钮时,雷区的按钮上可能会出现数字,也有可能出现空白区,其中数字代表以该按钮为中心,周围八个按钮的雷数,空白区代表其周围八个按钮中没有地雷。
玩家可以根据周围的信息,来判断哪个按钮可能是雷,并在其上面打上标识。
当玩家将所有的地雷都找出来的时候,而且非雷的按钮都打开了,此时游戏获胜。
玩家在点击按钮的时候,其不同的鼠标点击对应相应的功能,有鼠标左键点击事件,鼠标右键点击事件以及鼠标滚轮键点击事件,其中鼠标滚轮键点击事件也可用左右键同时按下来执行。
4概要设计
4.1功能性设计
游戏应该提供的功能大致有:
难度选择功能、计时功能、记录游戏信息功能、更换界面功能等。
此游戏仿照微软公司Windows操作系统中的扫雷游戏,提供三种标准游戏难度,其中:
初级:
100个方块、12个地雷。
中级:
100个方块、24个地雷。
高级:
100个方块、36个地雷。
布雷方式为随机布雷,但出于游戏的友好性考虑,要保证玩家点击的第一个方块不能是地雷。
当玩家点击到有地雷的方块后,游戏结束,并且显示当前游戏中的地雷位置。
若开始进行下局游戏,则需要对地雷进行重新布置。
若玩家探测到了所有地雷,则游戏胜利,弹出游戏胜利对话框。
游戏胜利后,玩家的当局游戏信息将被记录,玩家可以查看自己的游戏信息,如游戏场数,胜率,最佳战绩等。
当然,玩家不单可以查看自己的战绩,更可以查看该游戏的战绩总排行,这将在另一个窗口中进行显示。
游戏信息的记录以及各种数据的统计,会大大增加游戏的耐玩性。
由于本游戏采用的数据读写处理采用文件读取方式,有必要对游戏数据进行充分的加密处理,在程序打开时,将读取被加密的数据文件并对该文件进行解密操作,将解密的数据按照固定的算法读入内存,当游戏结束后,要将内存中的数据进行加密然后保存到文件中。
本设计的功能模块如下:
图4-1扫雷功能图
4.2流程设计
本设计的主要流程是:
游戏开始后用户可以通过点击鼠标的左键、右键、中键或者左右键同时按下进行游戏,当所有的地雷被探索,则游戏胜利;
若用户点击了雷块,则游戏结束;
若用户退出游戏,则游戏结束。
图4-2扫雷程序流程图
4.3扫雷游戏实现
1.设计实现:
在程序中,使用PHP代码完成所有底层的游戏逻辑功能。
2.扫雷的底层表现形式:
使用二维数组存储当前游戏状态。
扫雷游戏,抽象的说来,游戏的实质即是在二维空间,不同的点之间所具有的不同状态,例如该格子是雷,可以用数字100表示,该格子周围一个雷也没有,可以用0表示,。
使用二维数组能够完全表示所有地雷地图的数据。
并且,再利用另一个二维数组,用以表示当前点是否已被用户点击。
3.游戏基本属性:
地雷数组宽度,高度,地雷数量,游戏难度。
4.游戏状态:
游戏失败,游戏成功
4.4扫雷游戏状态分类
当玩家扫雷时,即用鼠标左键点击一个格子时,有以下几种状态:
1.踩到雷:
游戏失败,结束游戏并且在界面中显示所有的雷。
2.点到的是数字:
显示数字,游戏继续。
3.若玩家点到的格子周围一颗雷也没有时:
就采用递归算法,继续向周围扩展。
4.当玩家点开所有的非雷的格子:
提示游戏通过,并且结束游戏。
5详细设计
5.1主窗体的构建
5.1.1主窗体的界面设计
本课题采用微软公司为java平台开发量身定造的集成开发环境:
Myelipse进行游戏的开发。
开发游戏的第一部和开发其他WinForm应用一样,要建立一个java窗体应用程序,作为游戏的主窗体程序。
软件界面如下:
图5-1主窗体的主界面
5.1.2主窗体的界面核心代码
privateImageIcon[]mineNumIcon={newImageIcon("
0.gif"
),
newImageIcon("
1.gif"
),newImageIcon("
2.gif"
3.gif"
4.gif"
5.gif"
6.gif"
7.gif"
8.gif"
9.gif"
),};
privateImageIcon[]mineStatus={newImageIcon("
flag.gif"
question.gif"
)};
privateImageIcon[]mineBombStatus={newImageIcon("
mine.gif"
wrongmine.gif"
bomb.gif"
privateImageIcon[]faceIcon={newImageIcon("
smile.gif"
Ooo.gif"
ImageIcon("
),
newImageIcon("
privateImageIcon[]faceIcon={
)};
publicJMine(){
super("
JMineGame"
);
setSize(250,350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Insetsspace=newInsets(0,0,0,0);
//Gamevars
gameStarted=false;
numMine=12;
numFlaged=0;
ImageIconmyIcon=newImageIcon("
gridbag=newGridBagLayout();
constraints=newGridBagConstraints();
pane=newJPanel();
pane.setLayout(gridbag);
constraints.fill=GridBagConstraints.BOTH;
constraints.anchor=GridBagConstraints.CENTER;
//BeginMenuSet
mb=newJMenuBar();
mGame=newJMenu("
Game"
miEasy=newJMenuItem("
Easy"
miEasy.addActionListener(this);
miMiddle=newJMenuItem("
Middle"
miMiddle.addActionListener(this);
miHard=newJMenuItem("
Hard"
miHard.addActionListener(this);
miExit=newJMenuItem("
Exit"
miExit.addActionListener(this);
mGame.add(miEasy);
mGame.add(miMiddle);
mGame.add(miHard);
mGame.addSeparator();
mGame.add(miExit);
mb.add(mGame);
mHelp=newJMenu("
Help"
miAbout=newJMenuItem("
About..."
mHelp.add(miAbout);
miAbout.addActionListener(this);
mb.add(mHelp);
this.setJMenuBar(mb);
//endofMenuSet
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 java 扫雷 游戏