《基于Java扫雷游戏的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Java扫雷游戏的设计与实现.docx(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、毕业设计(论文)题目:基于Java扫雷游戏的设计与实现 2014 年 11 月 1日任务书学院(直属系): 计算机科学与技术系 时间:2014年 5 月20日学生姓名指导教师设计(论文)题目基于Java扫雷游戏的设计与实现主要研究内容1、完成扫雷游戏图形用户界面的设计。2、完成扫雷游戏内的功能模块,如难度级别模块、开局、退出模块等。3、完成扫雷游戏的具体玩法功能研究方法鉴于此项目比较简单,只编写了四个JAVA源程序ArrayPane.java,JavaMineSweeping.java,JavaMineSweepingFrame.java,RandomNumber.java。还用到了一些JAV
2、A系统提供的重要的类,如File、JButton和JLabel等类。主要技术指标(或研究目标)主要实现:图形界面的出现、游戏功能正常执行、三个难度系数选择、过关后数据录入扫雷英雄榜。主要参考文献1 朱福喜,尹为民,余振坤.Java语言与面向对象程序设计.武汉:武汉大学出版社,2008.2 陈国君,陈磊.Java 2从入门到精通.北京:清华大学出版社,2008.3 王梅,Java并发编程设计原则与模式.北京:中国电力出版社,2009.4 尹伟民,Java程序设计之网络编程.北京:清华大学出版社,2008.5 印昊.Java与面向对象程序设计.北京:高等教育出版社,2008.6 耿祥义.Java课
3、程设计.北京:清华大学出版社,2009.7 赵生慧.Java面向对象程序设计.北京:高等教育出版社,2009.基于Java扫雷游戏的设计与实现摘要Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科
4、学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。关键词:Java,扫雷,游戏IDesign and Implementation of Java Minesweeper GameAbstractJava is a cross-platform application software can write object-oriented programming language, the general term of the Java programming language by Sun Micros
5、ystems, Inc. in May 1995 and the Java platform. Hardware or operating system platform to install a Java platform, Java applications can run. Java is a simple, object-oriented, distributed, interpreted, robust security, the structure-neutral, portable, high-performance, multithreaded dynamic language
6、. Has excellent versatility, efficiency, platform portability, and security of Java technology, widely used in personal PC, the data center, game consoles, scientific supercomputers, mobile phones and the Internet, while the worlds largest developer of professional community . Global cloud computing
7、 and mobile Internet industry environment, Java has significant advantages and broad prospectsKeywords:Java ,Minesweeping ,EclipseII目录摘要I关键词IAbstractIIKey wordsII第一章系统概述- 1 -1.1 绪论- 1 -1.2 开发工具- 1 -1.3 应用环境- 2 -1.4 编写意义- 2 -1.5 任务设计内容- 3 -第二章可行性分析和需求分析- 4 -2.1 可行性分析- 4 -2.2 需求分析- 4 -2.2.1 理解需求- 5 -2
8、.2.2 功能需求- 5 -第三章详细设计- 6 -3.1 JavaMineSweepingFrame类- 7 -3.2 ArrayPane类- 7 -3.3 javaMineSweeping类- 7 -3.4 RandomNumber类- 7 -3.5 具体内容- 8 -3.5.1 菜单栏内容的生成- 8 -3.5.2 雷的生成- 8 -3.5.3 单机非雷块后数字显示- 9 -第四章系统测试- 10 -结束语- 13 -参考文献- 14 -致谢- 15 -附录- 16 -程序源代码- 16 -JavaMineSweeping.java- 16 -JavaMineSweepingFrame.
9、java- 16 -ArrayPane.java- 19 -RandomNumber.java- 27 -第一章 系统概述1.1 绪论扫雷一词有多个意思。扫雷游戏是微软于1992年附带在其操作系统中的小游戏,它通过点击格子并以出现的数字来判断附近地雷的数量,将全部地雷做上标记即可胜利;军事上的扫雷(mine clearing)是指搜索和清除地雷、陆军水雷及其他爆炸物的行动;扫雷又被引作网络用语。扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏,不久之后,“方块”被改写成了游戏“Rlogic”,在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路
10、线,如果路全被地雷堵死就算输。两年后,汤姆安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。 1981年,微软公司的罗伯特杜尔和卡特约翰逊两位工程师在Windows 3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。 扫雷游戏的目标是尽快找到雷区中的所有不是地雷的方块,而不许踩到地雷。游戏区包括雷
11、区、地雷计数器和计时器,在“游戏”菜单上,单击“开局”,计时器就会启动,此时请单击游戏区中的任何方块,点开的数字是几,则说明该数字旁边的8个位置中有几个雷,如果挖开的是地雷,则会输掉游戏,用右键标记您认为可能有地雷的方块。1.2 开发工具Sun Microsystems公司在推出Java语言的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK: Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。 Java源程序编写借助于记事本,Editpuls,UltraEdi
12、t等三方编辑工具编写。 所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心JavaAPI是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。JDK 是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。 JDK里面是Java类库和Java的语言规范,它提供的是无论你用何种开发软件写Java程序都
13、必须用到的类库和Java语言规范.没有JDK,你的Java程序根本就不能用。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比SunJDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。1.3 应用环境(1) 操作系统:Windows XP及以上版本(2) 应用软件:JDK
14、 Eclipse1.4 编写意义随着计算机得普及,人们越来越多得接触到计算机,人们得生活工作中无处不有计算机得身影,人们面对长时间的难免会有倦怠的情绪,而人们大多得缓解情绪得网络活动其实并不能起到放松心情得作用,现代人得生活节奏越来越快,有没有一种快速缓解疲倦得游戏呢?我们提出设计一款益智得小游戏,这种游戏不会花太多时间,同时把玩家得思维带动起来,达到一举多得得效果。随着现在生活节奏的加快,人们在工作之余需要一个轻松娱乐的放松环境。因此我们小组编写此软件的目的,一方面作为初学者来了解扫雷的开发,另一方面开发此软件使用户能在娱乐休闲的同时拓展思维能力。同时进一步拓展研究,做到将扫雷层次升级,能够
15、在多人连机的情况下,一起分工来进行对战 。如 一方放雷,另一方排雷。1.5 任务设计内容本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待以后完善。Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:(1) 扫雷游戏分为初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。(2) 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。(3) 用户要揭开某个方块,可单
16、击它。若所揭方块下有泪,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。(5) 扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。第二章 可行性分析和需求分析2.1 可行性分析适用于各种群体,学生、老师、白领,简单却有效地舒缓压力,消磨闲暇时光,一局所需的时间很短,低级的只需十多秒,此软件是以娱乐为主的休闲游戏,开发基于安卓手机操作系统。具有操作方便、便于保
17、存等优点投资可行性:主要根据市场调查及预测的结果,以及有关的产业政策等因素,论证项目投资建设的必要性。(1) 财务可行性:主要从项目及投资者的角度,设计合理财务方案,从企业理财的角度进行资本预算,评价项目的财务盈利能力,进行投资决策。 (2) 组织可行性:制定合理的项目实施进度计划、设计合理的组织机构、选择经验丰富的管理人员、建立良好的协作关系与、制定合适的培训计划等,保证项目顺利执行。(3) 经济可行性:主要从资源配置的角度衡量项目的价值,评价项目在实现区域经济发展目标、有效配置经济资源、增加供应、创造就业、改善环境、提高人民生活等方面的效益。(4) 法律可行性:在开发一个软件之前一定要确定
18、它是否触犯某项法律或与国家的相关规定是否抵触。扫雷游戏系统并不任何法律或国家相关规定相抵触,所以在法律可行性上是通过的,在进行设计时没有违法任何法律法规,也不对任何企业的系统进行侵权等。系统的研制和开发都选用正版软件,将不会侵犯他人、集体和国家的利益,不会违反相关的国家政策和法律。(5) 技术可行性评价:在限制条件下,功能目标基本能够实现和达到,利用现有技术,功能目标基本能够达到,开发人员足够 能够满足条件要求,在规定时间内能够完成该项目开发。2.2 需求分析随着社会的不断进步,人们所承受的压力不断上升,在游戏层出不穷的时刻,扫雷游戏仍受到不少人的青睐,其本身的性质,决定了人们对它的喜爱程度,
19、不需要特殊的技巧,不需要不断地升级,不需要太多的时间进行初步的熟悉,简简单单却乐趣无穷。2.2.1 理解需求扫雷游戏系统的建立,需要进行用户需求调查与分析,以确定系统目标,提高解决问题的详细方案,这是系统建设的重要环节。(1) 系统可以根据需求来设计功能模块,如“开局”、“初级”、“中级”、“高级”“自定义”、“扫雷英雄榜”和“退出”等。(2) 系统运行在Eclipse平台下,系统应该有一个较好的图形用户界面。2.2.2功能需求需求分析的任务是通过详细调查现实世界要处理的对象,充分了解原系统(手工系统或计算机系统)工作概况,明确各种需求,然后在此基础上确定新系统的功能。根据用户的需求,确定本扫
20、雷游戏应具有以下功能:(1) 用户可以自行选择难度界别;(2) 自动保存扫雷英雄榜;(3) 用户可以设计“初级”、“中级”、“高级”三个级别。第三章 详细设计在设计扫雷游戏时,需要编写4个Java源程序:ArrayPane.java,JavaMineSweeping.java,JavaMineSweepingFrame.java,RandomNumber.java。扫雷游戏除了需要编写上述4个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如File、JButton和JLabel等类。扫雷系统流程图如图3-1所示:图3-1 流程图3.1 JavaMineSweepingFra
21、me类JavaMineSweepingFrame类是javax.swing包中JFrame的一个子类,并实现了ActionListener接口。主要控制“选择”菜单栏里的选项和状态栏的名称。如图3-2所示:图3-2 菜单栏3.2ArrayPane类ArrayPane类是javax.swing包中JPanel容器的子类,实现了ActionListener和MouseListener接口,所创建的对象:ArrayPane是ArrayPane类中最重要的成员之一,作为一个容器添加到窗口的中心。3.3javaMineSweeping类javaMineSweeping类负责创建扫雷游戏机主窗口,该文件含
22、有main方法,扫雷游戏从该类开始执行。3.4RandomNumber类RandomNumber类是雷区中“方块”的类封装,含有关于“方块”的属性以及操作,即负责为雷区创建代表“方块”的对象。3.5 具体内容3.5.1 菜单栏内容的生成通过创建多个对象实现菜单栏里项目的生成JMenuBarmenuBar = new JMenuBar();JMenumenuFile = new JMenu(选择);JMenuItemmenuLevelOne = new JMenuItem(初级);JMenuItemmenuLevelTwo = new JMenuItem(中级);JMenuItemmenuLev
23、elThree = new JMenuItem(高级);JMenuItemmenuFileExit = new JMenuItem(退出);JButtonbutReset = new JButton(重来);3.5.2 雷的生成通过在不同难度下的固定格数指定雷数然后通过随机数生成雷的位置,每次生成雷的位置不同publicArrayPane(introw,int col)this.row = row;/接受定制的行this.col = col;/接受定制的列if(row=9 & col=9)totleNumber=10;else if(row=16 & col=16)totleNumber=40
24、;else if(row=16 & col=30)totleNumber=99;3.5.3 单机非雷块后数字显示首先,在单击每块方块后会记录此次单击的位置坐标。private static intclickRow;/当点击后,记住行坐标private static intclickCol;/当点击后,记住列坐标 然后会调用一个递归的循环来处理雷块周围有多少雷显示数字的问题。b = new JButtonrowcol; /设置按钮for(i=0;irow;i+)/初始化按钮组for(j=0;jcol;j+)bij = new JButton();bij.addActionListener(thi
25、s);bij.addMouseListener(this);p2.add(bij);this.setBorder(BorderFactory.createTitledBorder(row*col+格);this.setLayout(new BorderLayout();this.add(p1,BorderLayout.NORTH);this.add(p2,BorderLayout.CENTER);第四章 系统测试(1) 程序运行后,界面上有一个菜单和一个按钮,分别是“选择”和“重来”;当玩家踩雷时候可以点击“重新开始来”。如图4-1所示:图4-1 程序运行图(2) 当玩家点击“游戏”菜单时会出
26、现4个子菜单,分别是“初级”、“中级”、“高级”和“退出”。,玩家可以通过选择“初级”、“中级”和“高级”按钮来选择游戏级别;游戏结束后玩家可以通过“退出”退出游戏框。图4-2 难度级别选择图4-3 中级难度界面图4-4 高级难度界面图4-5 扫雷失败界面结束语通过这一阶段的毕业设计,我设计的教务系统终于基本完成。系统基本实现了老师的要求。期间出现过很多的问题,比如对数据库认识不够、功能优越性没得到充分发挥、对软件和一些类库的操作不足等,但在老师和同学的帮助下这些问题都得到了基本解决。在该系统制作的全过程中,我学会了如何去获取知识,如何去认真的做事情。由于时间和能力等各方面的限制,系统的设计和
27、功能方面还存在着很多不足,没有达到预期想象,还需要不断改进和完善。毕业设计的结束大学也就结束了,但我会努力的提高自己,用在大学学到的技术和本领在社会上做出自己的贡献。参考文献1 朱福喜,尹为民,余振坤.Java语言与面向对象程序设计.武汉:武汉大学出版社,2008.2 陈国君,陈磊.Java 2从入门到精通.北京:清华大学出版社,2008.3 王梅,Java并发编程设计原则与模式.北京:中国电力出版社,2009.4 尹伟民,Java程序设计之网络编程.北京:清华大学出版社,2008.5 印昊.Java与面向对象程序设计.北京:高等教育出版社,2008.6 耿祥义.Java课程设计.北京:清华大
28、学出版社,2009.7 赵生慧.Java面向对象程序设计.北京:高等教育出版社,2009.致谢毕业设计即将结束,大学的生活也就要要随之结束了。在毕业设计期间,我得到了老师很多的帮助和支持。,在程序制作方面,我吸收到许多有价值的技术知识,并且学会了如何自己学习,自己钻研,在我编写论文期间,老师给了我很多建设性意见,尤其是在数据流图、数据字典,程序流程图方面,并督促我多查阅资料。一遍一遍的帮我检查,指导我修改,使得我能最终顺利的完成了毕业设计。再次向一直支持鼓励我、关心我的老师、父母、同学和朋友们致以最诚挚的谢意!附录程序源代码JavaMineSweeping.java/* * Swing扫雷游戏
29、 * * author liu * version 1.00 2005/12/5 */importjavax.swing.*;public class JavaMineSweeping public static void main(String args) /try /这是获取当前系统所运行的平台的程序外观。/UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();/catch(Exception e)/e.printStackTrace();/打印异常的堆栈信息/JavaMineSweepingFrame fra
30、me = new JavaMineSweepingFrame(9,9);frame.setVisible(true); JavaMineSweepingFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/* * Sample application using Frame. * * author XieFei * version 1.00 04/11/28 */public class JavaMineSweepingFrame extends JFrame implements ActionListen
31、erJMenuBarmenuBar = new JMenuBar();JMenumenuFile = new JMenu(选择);JMenuItemmenuLevelOne = new JMenuItem(初级);JMenuItemmenuLevelTwo = new JMenuItem(中级);JMenuItemmenuLevelThree = new JMenuItem(高级);JMenuItemmenuFileExit = new JMenuItem(退出);JButtonbutReset = new JButton(重来);JToolBartoolBar = new JToolBar(
32、); Container con = this.getContentPane();JPanel p1 = new JPanel(); Dimension d = new Dimension(400,350);int row;/行int col;/列ArrayPaneap;publicJavaMineSweepingFrame(introw,int col) super(扫雷谢非);menuLevelOne.addActionListener(this);menuLevelTwo.addActionListener(this);menuLevelThree.addActionListener(t
33、his);this.row=row;this.col=col;ap = new ArrayPane(row,col); /加载菜单this.setJMenuBar(menuBar);menuBar.add(menuFile);menuFile.add(menuLevelOne);menuFile.add(menuLevelTwo);menuFile.add(menuLevelThree); menuFile.add(menuFileExit);butReset.addActionListener(this);toolBar.add(butReset);con.setLayout(new Bor
34、derLayout();con.add(toolBar,BorderLayout.NORTH); /北面menuLevelOne.addActionListener(this);menuLevelTwo.addActionListener(this);menuLevelThree.addActionListener(this);menuFileExit.addActionListener(this);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);con.add(p1,BorderLayout.CENTER);/中间p1.setLayou
35、t(new GridLayout(1,1);p1.add(ap);this.setSize(400, 400);this.setLocation(200,100); public void actionPerformed(ActionEvent e) if(e.getSource().equals(menuLevelOne)this.row=9;this.col=9;d = new Dimension(400,350);this.reSet(d);else if(e.getSource().equals(menuLevelTwo)this.row=16;this.col=16;d= new D
36、imension(500,450);this.reSet(d);else if(e.getSource().equals(menuLevelThree)this.row=16;this.col=30;d = new Dimension(750,550);this.reSet(d);else if(e.getSource().equals(this.menuFileExit)System.exit(0);else if(e.getSource().equals(butReset)this.reSet(this.d);public void reSet(Dimension d)/?this.p1.
37、removeAll();ArrayPaneap = new ArrayPane(this.row,this.col);p1.add(ap);this.setVisible(false);/this.repaint();this.setSize(d);this.setVisible(true); ArrayPane.java/* * *产生规定大小的带有按钮的面板 * * */importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;public class ArrayPane extends JPanel implements Ac
38、tionListener, MouseListenerprivate introw,col;/参数,接受窗体类传进来的行和列数private inti,k,j;/计数器private static intclickRow;/当点击后,记住行坐标private static intclickCol;/当点击后,记住列坐标private JButton b;/雷按钮privateImageIconimageIcon = new ImageIcon(.icona.jpg);/选种雷的图片private static inttotleNumber;private JLabel title = new
39、JLabel();/显示结果的标签private intarrayNumber;/接受随即数privateJPanel p1 = new JPanel();privateJPanel p2 = new JPanel();/* * * 构造函数 * */publicArrayPane(introw,int col)this.row = row;/接受定制的行this.col = col;/接受定制的列if(row=9 & col=9)totleNumber=10;else if(row=16 & col=16)totleNumber=40;else if(row=16 & col=30)totl
40、eNumber=99;title.setText(还剩 +String.valueOf(totleNumber)+ 个雷);arrayNumber = new RandomNumber().getNumberArray(row,col);/产生随即数数组p1.add(title);p2.setLayout(new GridLayout(row,col);b = new JButtonrowcol; /设置按钮for(i=0;irow;i+)/初始化按钮组for(j=0;jcol;j+)bij = new JButton();bij.addActionListener(this);bij.add
41、MouseListener(this);p2.add(bij);this.setBorder(BorderFactory.createTitledBorder(row*col+格);this.setLayout(new BorderLayout();this.add(p1,BorderLayout.NORTH);this.add(p2,BorderLayout.CENTER);/* * Method actionPerformed * * * 事件监听 * */public void actionPerformed(ActionEvent e) System.out.println (点击事件
42、);breakPoint:/设置循环跳出的点for(i=0;irow;i+)for(j=0;jcol;j+)if(e.getSource().equals(bij)this.clickRow=i;this.clickCol=j;breakbreakPoint;/* 鼠标事件 */public void mouseClicked(MouseEvent e) System.out.println (鼠标事件);if(SwingUtilities.isLeftMouseButton(e)/如果是左键if(arrayNumberthis.clickRowthis.clickCol = 0)/如果没有点中雷intunitNumber = this.arithmetic(this.clickRow,this.clickCol);/返回这个点周围的雷总数bthis.clickRowthis.clickCol.setText(String.valueOf(unitNum