ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:280.52KB ,
资源ID:8773304      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8773304.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于JAVA的扫雷游戏的设计与实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于JAVA的扫雷游戏的设计与实现.docx

1、基于JAVA的扫雷游戏的设计与实现 JAVA程序设计A课程设计题 目 基于JAVA的扫雷游戏的设计与实现 院 (系) 信息工程学院 专 业 班 级 计算机科学与技术(2)班 学 生 姓 名 学 号 设 计 地 点 教(13)软件实验室 指 导 教 师 起止时间: 2014年 6月9日至2014年 6月13日Java程序设计A课程设计任务分工及成绩院(系):信息工程学院 教研室:软件教研室课程设计题目基于JAVA的扫雷游戏的设计与实现 课 程 设计内容用JAVA实现扫雷游戏,了解扫雷游戏的基本结构,和理解扫雷的算法,并努力对算法进行改进,调试过程中修复程序中的bugg,使该扫雷游戏尽可能完善。设

2、计内容: 1、扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击“开始”便启动计时器。3、用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。小组成员及任务分配姓名学号承担任务成绩算法实现 游戏布局 设置监听器 基于

3、JAVA的扫雷游戏的设计与实现摘 要 随着时代的发展,电脑进入了普通老百姓的生活,越来越多的人使用电脑 办公、娱乐、上网,游戏行业发展一日千里,该行业极大的影响和改变了人们的 生活和娱乐方式, 游戏为消费者提供丰富多彩的虚拟空间,使消费者可以自由自 在的享受虚拟世界的乐趣,实现自己在现实生活着那个可能永远不能实现的梦 想,满足了消费者的心理和精神需求。 扫雷游戏是 Windows 操作系统自带的一款小游戏,本系统要是模仿 WINDOWS 系统的扫雷,对于实现过程中出现的 bug 进行调试解决。我这里用的是 C#编写 了与它功能相似的扫雷游戏。 程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不

4、接受键盘,按任意 键结束程序。 单击屏幕上的笑脸可以重新开始游戏。当鼠标左键单击到地雷时提 示游戏失败。 报告首先介绍了进行该游戏课程设计的目的,然后是任务描述和设 计的相关要求, 最后是最重要的需求分析和设计方案。重点介绍了在游戏过程中 各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要, 鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作。清 除未靠近地雷区的方块较为复杂。关键词:扫雷游戏,算法设计,事件,JAVA1概 述1.1选题的目的及意义本次课程设计的主要目的是为了通过具体的程序来加深对Java语言的掌握,提高自己的编程水平。选择的题目来自Java课

5、程设计(第二版)中的扫雷游戏,这是一个综合性的题目,可以对Java中的各项功能有更好的理解和使用,同时也为以后的工作打下一定的基础。1.2程序设计任务与要求扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:(1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。(2) 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。(3) 用户要揭开某个方块,可单击它。若所揭方块下有泪,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少

6、颗雷。(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记雷。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。(5) 扫雷胜利后,游戏中的标签会显示“你赢了!”(6)如果在扫雷过程中一不小心碰到了雷,游戏会显示“你输了,这个游戏不适合你!”。2需求分析2.1 扫雷游戏的需求分析随着社会的不断进步,人们的压力也不断的提高,在游戏层出不穷的时刻,扫雷游戏任然受到不少人的青睐,其本身的性质,决定了人们对它的喜爱的程度,不需要特殊的技巧,不需要不断的升级,还不需要太多的时间进行熟悉,简简单单却趣味无穷。2.2 扫雷游

7、戏的基本功能操作本程序需实现的主要功能有:(1) 用户可以自定义级别,并确定雷的个数。(2) 具有计时功能,即显示用户完成扫雷所花费的时间。(3) 点击开始进行扫雷。(4)用户识别雷右击可标记“雷”。2.3 功能要求(1)程序的总体功能如图2.1所示。 图2.1 总体功能图(2)程序总体流程如图2.2所示。图2.2 总体流程图3 详细设计3.1 系统总体设计3.1.1 算法思想(1)计算按钮周围雷数。(2)随机分布。扫雷游戏要求在M行N列的网格游戏区随即的不上bon个雷,且bon的取值应小于M和N的乘积。这可以在一张M*N的网格上通过均匀分布的随即算法视线。其中bon的网格是雷区,剩下的网格是

8、非雷区。游戏的目标是尽可能快地找到所有的雷区,而不踩到地雷。Java提供了视线随即算法的类Math,通过Math类的random()方法这可以很方便的实现随即布雷的功能。3.1.2 设计思想(1)扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板等组件,菜单主要包括开始,选择级别,标记, 按钮的功能是重新开始新的游戏。(2)雷区的设计ScanLei1类是继承了JFrame实现了ActionListener接口,该类里声明了组键,并进行布局,go方法通过设置是否显示窗体,主方法main()实例化窗体对象,out()方法是ScanLei1类中的重要方法之一,也就

9、是扫雷的算法。 actionPerformed(ActionEvent e)就是单击按钮触发的事件,如果是初级按钮触发,分配初级雷区按钮布局。如果是中级按钮触发,分配中级雷区按钮布局。如果是高级按钮触发,分配高级雷区按扭布局。如果是开始按钮触发,开始计数,并随机分配雷,并计算没有雷的按钮周围有雷的数目。如果按钮按键触发,调用ScanLei1类中的out()方法进行扫雷。NormoreMouseEvent()继承了鼠标适配器,当右击按钮后,根据该按钮上的图标来判断该按钮是否被右击过,如果有图标,将图标删除,并雷的个数加一。如果该按钮没有被右击过,在该按钮中添加图标,并将雷的个数减一。雷区设计流程

10、图如图3.3所示。图3.3 雷区设计流程图3.1.3 功能分析用户可以玩扫雷游戏并能自定义级别(初等,中等,高等);具有计时功能,即显示用户完成扫雷任务所花费的时间。3.2系统详细设计3.2.1类的设计(1)initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度、高度以及雷区的级别。(2)actionPerformed(ActionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时,actionPerformed(ActionEvent)方法负责执行有关算法,例如,当用鼠标左键单击

11、方块上的按钮后,若该方块下有雷,actionPerformed(ActionEvent)方法将使用户输掉本局,若该方块下无雷,actionPerformed(ActionEvent)方法将显示blockView对象中的标签,该标签上是一个数字,该数字代表当前方块的周围的8个方块中共有多少颗雷。(3)show()方法是一个递归方法。actionPerformed(ActionEvent)方法执行时将调用show方法进行扫雷。(4)mousePressed(MouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标有件事mousePressed(Mo

12、useEvent)方法负责让方块上显示一个探雷标记。(5)inquireWin()方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。所谓扫雷成功是指不仅找到了全部的累而且用时最少。3.2.2 模块的划分及调用关系图3.4 关系图4系统测试与实现4.1 程序测试结果4.1.1 游戏玩家通过右击鼠标来进行扫雷,并显示“雷”图4.1扫雷图4.1.2 游戏玩家因触到雷而导致游戏结束图4.2 扫雷失败图4.1.3 游戏玩家扫雷成功图4.3扫雷成功图4.1.4 游戏玩家可选择游戏难度图4.4游戏帮助图总 结这个扫雷游戏是完全模拟微软系统自带的扫雷游戏,所以难度是很大,必然在编程过程

13、中也遇到很多问题,有些问题比较简单但就不知道错在哪里,有些大问题之道在哪就是不知道怎么办才好,后来经过自己的不断调试,这个扫雷游戏终于大功告成。经过编写这个扫雷游戏,我认识到应该注意细节问题,虽然是很小的问题,但可以提高自己编程的能力,而且还可以培养自己编程的严谨性,同时还可以为以后的编程积累经验。编写完这个扫雷游戏,我发现自己有很多的不足,我想如果让我来单独来编写这个游戏,我感觉能编出来的可能性很小,因为这个游戏涉及到好多算法。感触最深的就是我们真的要扎扎实实的打基础!并且我感觉到只要我们自己肯下功夫学习,我们也可以做出很好的东西,不需要每次都抄袭别人的,只有自己的才是最珍贵的!参考文献1

14、耿祥义Java大学实用教程北京:清华大学出版社,20092 耿祥义Java课程设计北京:清华大学出版社,20083 王鹏Java Swing图形界面开发与案例详解北京:清华大学出版社,20084 丁振凡Java语言实验教程北京:北京邮电大学出版社,20055 郑莉Java语言程序设计北京:清华大学出版社,20066.孙全党 王吴迪 赵枫朝,Java程序设计应用教程,电子工业出版社,2006.2 7.雷之宇,Java项目开发实践网络篇,中国铁道出版社,2005.5 8.赵玉阳,Java从入门到精通,清华大学出版社,2006.8 9.李茏怡,Java编程实例讲解,高等教育出版社,2005.11 1

15、0.张利国,Java实用教程案例,北京:清华大学出版社,2003.10 附 录import java.awt.BorderLayout; /导入边框布局import java.awt.Container; /导入一个容器,也是一个组件,在这个容器里你可以添加其他awt的组件import java.awt.Font; /导入字形,字体import java.awt.GridLayout; /导入网格式布局import java.awt.Insets; / Insets 对象描述容器的边界区域。它指定一个容器在它的各个边界上应留出的空白区间。这个空白可以是一个边界,一个不显示区域或一个标题。imp

16、ort java.awt.event.ActionEvent; / ActionEvent是一个类,指示发生了组件定义的动作的语义事件。 import java.awt.event.ActionListener; / ActionListener用于接收操作事件的侦听器接口。继承自EventListener。import java.awt.event.MouseAdapter; /导入鼠标监听适配器,负责对鼠标事件进行监听import java.awt.event.MouseEvent; /接口import javax.swing.JButton;/导入按钮类import javax.swin

17、g.JFrame;/导入面板类import javax.swing.JLabel;/导入标签类import javax.swing.JMenu; /菜单import javax.swing.JMenuBar; /用来创建水平菜单栏import javax.swing.JMenuItem; /创建带有设置文本或图标的 JMenuItem 菜单项import javax.swing.JPanel; /面板import javax.swing.Timer; / 定时器,功能是在指定的时间间隔内反复触发指定窗口的定时器事件。 public class ScanLei1 extends JFrame i

18、mplements ActionListener /扫雷类继承了JFrame实现了ActionListener接口 private static final long serialVersionUID = 1L; / serialVersionUID 用来表明类的不同版本间的兼容性 private Container contentPane; /内容面板,每一个JFrame对应一个内容面板,所有的组件应该置于内容面板之上 private JButton btn; /声明一个按钮对象,开始按钮,对象名为btn,private的意思是把变量或方法声明成私有的,只有在本类中或本类实例可以访问,其他类

19、不可以 private JButton btns;/声明一个按钮数组 雷区的每一个雷都是一个按钮,所有按钮放置到该数组中 private JLabel b1;/声明一个标签对象,该标签用于放置剩余的雷的个数 private JLabel b2; /声明一个标签对象,该标签用于放置已经游戏的时间 private JLabel b3; /声明一个标签对象,该标签用于放置游戏的结果 private Timer timer;/声明一个定时器对象 private int row=9; /行,用于指定雷区的行 private int col=9; /列 用于指定雷区的列 private int bon=1

20、0; /布雷的个数 private int a;/声明一个int型的二维数组,二维数组的中元素,有以下含义,值为0说明该元素所对应的坐标所在的按钮既不是雷又不是周围有雷的按钮,如果是100,则说明 private int b;/声明int型的变量b 剩余雷的个数 private int a1;/声明int型数组a1,放置随机数,用于确定雷应该布到雷区的位置 private JPanel p,p1,p2,p3;/声明面板 public ScanLei1(String title)/定义扫雷的构造方法,该构造方法有个String类型的参数,参数名为title super(title);/调用JFr

21、ame的构造方法,将title字符串传入该构造方法,这样的话窗体显示时,标题栏会显示传入的title值 contentPane=getContentPane();/获取当前JFrame对象的内容面板,注意因为ScanLei1类继承了JFrame对象,所以ScanLei1的对象也是JFrame对象 setSize(300,400);/设置扫雷窗体的大小事300*400像素 this.setBounds(400, 100, 400, 500); / setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height

22、:组件的高度 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /设置当点击窗体右上角的X按钮时的窗体的行为,这里设置的是当点击这个按钮时关闭并退出程序,没有设置的话, timer =new Timer(1000,(ActionListener) this);/每隔1000毫秒触发一次动作事件的监听 a = new introw+2col+2;/创建数组a,a是一个二维数组,数组时11列,11行 initGUI(); /调用初始化图形界面方法 public void initGUI()/声明初始化图形界面方法 p3=new JPanel();/创建

23、一个面板 b=bon;/将bon的值赋值给变量b JMenuBar menuBar=new JMenuBar();/创建一个菜单栏对象 JMenu menu1=new JMenu(游戏);/创建游戏菜单 JMenu menu2=new JMenu(帮助);/创建帮助菜单 JMenuItem mi1=new JMenuItem(初级);/创建初级菜单项 JMenuItem mi2 = new JMenuItem(中级);/创建中级菜单项 JMenuItem mi3 =new JMenuItem(高级);/创建高级菜单项 mi1.addActionListener(this);/为初级菜单项加入动

24、作事件监听器,当你单击鼠标左键点初级菜单项时会执行actionPerformed(ActionEvent e)方法 menu1.add(mi1); mi2.addActionListener(this); menu1.add(mi2); mi3.addActionListener(this); menu1.add(mi3);/以上几个操作类似 menuBar.add(menu1);/将游戏菜单加入到菜单栏 menuBar.add(menu2);/将帮助菜单加入到菜单栏 p3.add(menuBar); /将菜单栏加入到p3面板上去 b1=new JLabel(bon+);/创建一个标签,标签的

25、内容是bon的值10 a1=new intbon;/创建a1数组,数组的长度为10 btn =new JButton(开始);/创建开始按钮 btn.addActionListener(this);/为开始按钮加入动作事件监听器 b2=new JLabel(0);/创建标签b2,b2的内容是0 b3=new JLabel();/创建标签b3,b3暂时内容为空 btns=new JButtonrow*col;/创建一个按钮数组,数组的个数为row*col,这个程序中就是9*9个,每一个雷的位置就是一个按钮 p=new JPanel();/创建一个面板 p.setLayout(new Border

26、Layout(); /设置容器的边框布局,边框布局的样式大致是这样 contentPane.add(p); / 将panl放置到内容面板上去,为什么将一个面板放到内容面板,而不是将组件放到内容面板上去呢,你可以看到panl上最多可以直接放置五个 p.add(p3,BorderLayout.NORTH);/p3添加到面板的北边,也就是在北边放上了菜单栏,结果就如图了/combo=new JComboBox(new Object初级,中级,高级 ); /加监听 /*combo.addItemListener(new ItemListener() );*/ p1=new JPanel();/创建一个

27、面板 /在那个位置 /(FlowLayout)p1.getLayout().setAlignment(FlowLayout.RIGHT); /Alignment列队 p1.add(b1);/将标签b1添加到面板上 p1.add(btn);/将开始按钮添加到面板上 p1.add(b2);/将标签b2添加到面板上 p1.add(b3);/将标签b3添加到面板上 p.add(p3,BorderLayout.NORTH);/这行代码重复 还是将菜单栏加入到窗体的北边 p.add(p1,BorderLayout.CENTER);/将带有一个开始按钮,三个标签的按钮加入到窗体的中间位置 p2=new JP

28、anel();/创建面板p2 p2.setLayout(new GridLayout(row,col,0,0); / GridLayout网格布局,p2设置为网格布局,该布局的最多可以9行9列,正好可以放置81个雷按钮,按钮和按钮之间的水 for(int i=0;irow*col;i+)/为按钮数组赋值,此处的作用是创建81个雷按钮对象 btnsi=new JButton();/创建雷按钮 btnsi.setMargin(new Insets(0,0,0,0);/设置雷按钮与其他组件的间距 btnsi.setFont(new Font(null,Font.BOLD,25); /设置字体字形。黑

29、体25px btnsi.addActionListener(this);/为雷按钮添加监听器,监听动作事件 btnsi.addMouseListener(new NormoreMouseEvent();/添加鼠标监听器,监听普通鼠标事件 p2.add(btnsi);/将雷按钮添加到面板p2上 contentPane.add(p,BorderLayout.NORTH); contentPane.add(p2,BorderLayout.CENTER);/将p2添加到窗体的中间 public void go() /创建go方法 setVisible(true);/设置是否显示窗体,设置为true就是

30、显示当前窗体 public static void main(String args)/主方法,作用是实例化窗体对象,调用go方法将窗体显示到屏幕上来 new ScanLei1(11计科2班扫雷软件).go(); /实例化窗体对象,调用go方法将窗体显示到屏幕上来 public void out(int a,JButton btns,ActionEvent e,int i,int x,int y) int p=1; if(axy=0)/如果一个按钮既不是雷周围又没有雷 axy=10;/将该按钮对应的值设置为10 btnsi.setEnabled(false); /且这个按钮不可用状态 for(int l=y-1;l=y+1;l+)/排除按钮左右的位置 int m=x-1-1;/上两行 int n=l-1;/左两列 p=1; Sy

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1