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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

扫雷游戏 课程设计报告.docx

1、扫雷游戏 课程设计报告课程设计报告课程: 面向对象程序设计学号: 姓名: 班级: 嵌入式应用技术 教师: 时间:2013年12月10日计算机科学与技术系设计名称:扫雷游戏日期: 2013年1 1月 30日 设计内容:设计一个简单GUI界面的扫雷游戏。扫雷游戏的规则如下:(1)在不掀开任何不藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果再掀开方块的过程中,不小心翻开藏有地雷的方块,则宣告失败,惟有将所有不含地雷的地方掀开,游戏才算成功法。(2)游戏的操作方面主要以鼠标为主,当鼠标的指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标的指针对准未翻开的方块按下右键时即表示标示地雷。游戏者可

2、以通过地雷区内的数字提示了解以数字为中心的其其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。(3)当按下的方块不是地雷,且周边的八个方块也没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。设计目的与要求:一:基本要求(1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。(2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键选择单击“开始”便启动计时器。(3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的

3、8个方块中共有多少颗雷。(4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。(5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢了”的提示出现。二:实现功能(1)开局:首先选择游戏等级,然后生成不同等级的雷区界面。游戏等级分为三级:各等级方块数为初级:88、中级:1616、高级:2424;各级地雷数=总方块数/6;雷区每个方块下面或埋藏有1个地雷,或者没有地雷;(2)扫雷:将光标移到某个方块,使用鼠标的左右键进行扫雷;如果方块上出现数字,它代表在

4、它周围的8个方块中共有多少颗地雷;(3)标记地雷:把光标光标移到有雷的某个方块上点击右键,标记此块下埋着地雷(实际上可能是误标,如果后面发现是误标再点击鼠标右键恢复标记前)。每标记一个地雷,地雷数减少1;(4)重新开始:在游戏过程中想要重新只需开始,要点击开始即可。(5)显示时间:即显示用户完成移动盘子所花费的时间(6)结果输出:游戏结束时会提示游戏是否成功。三:问题定义本课程设计是用JAVA编写一个扫雷游戏。程序的功能是生成指定数目的地雷,通过鼠标操作玩游戏。点击屏幕上的“开始”按钮重新开始游戏;标出所有地雷后胜出;当鼠标左键击中地雷失败。扫雷游戏是考验智力和眼力的小游戏,在玩扫雷游戏的过程

5、中 也可以很好的培养耐心和细心,同时在无聊得时候可以用以休闲娱乐,如果我们自己也能动手做一个小程序来实现这个功能,自然能乐在其中。设计环境或器材、原理与说明:一、设计环境: 处理器:Intel Core i5内存: 2G硬盘空间:500G显卡:NVIDA显示卡适配器操作系统;window 7 中文旗舰版开发平台:JDK6.0,eclipse2、说明: 总体游戏过程分析:在屏幕中央位置显示一个雷区,雷区范围内预先埋设了一定数量的随机分布的地雷;玩家通过上下左右键控制光标在雷区的各个小方块之间移动并做标记;若能正确标记出雷区中的所有地雷,则游戏胜利;否则踩雷,游戏失败。设计过程(步骤)或程序代码(

6、可以加页):1.需求分析1.1 扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板等组件,菜单主要包括开始,选择级别,按钮的功能是重新开始新的游戏。1.2 雷区的设计1、成员变量(1) block是Block类型的数组,用来确定雷区有多少需进行扫雷的方块。(2)blockView是BlockView类型的数组,负责为block数组中的Block对象提供视图。(3) lay是LayMines类型的对象,负责设置block数组中的哪些方块是雷或不是雷。(4) record负责提供保存成绩的界面,是一个对话框,默认不可见。用户只有扫雷成功后(用时最少),才可以看见

7、对话框。(5) reStart是一个按钮对象,用户单击它重新开始游戏。(6) time是计时器对象,负责计算用户的用时。2、方法(1)initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度、高度以及雷区的级别。(2)actionPerformed(ActionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时,actionPerformed(ActionEvent)方法负责执行有关算法,例如,当用鼠标左键单击方块上的按钮后,若该方块下有雷,actionPerformed(Actio

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

9、in()方法用来判断用户是否扫雷成功,如果成功该方法负责让record对话框可见。所谓扫雷成功是指不仅找到了全部的累而且用时最少。1.3 SWING基本组件(1)标签组件(JLabel)标签组件显示的是静态文本,在通常情况下是不能编辑的,能起到提示的作用JLabel组件有三种构造函数:JLabel(): 创建空的标签JLabel(String):创建一个带初始字符串的标签。JLabel(String,int):创建一个带初始字符串及指定对齐方式的标签。(2)按钮(JButton) 几乎所有的交互式程序中都会有按钮,它是一种交互能力强且交互方便的控件,这个控件提供了“按下并动作”的基本用户界面。

10、按钮的构造方法有:JButton():建立一个没有标示字符串的新按钮类对象。JButton(String JLabel):建立一个标示字符串为JLabel的新按钮类的对象(3)画板组件(JPanel)我们在界面上安排各种组件时,有时会需要将组件成组放置,这时就可以使用面板组件。JPanel是最简单的容器组件,本身是一个矩形区域,可以在其中放入各种组件。但它仅仅是安排各种组件的一种结构,需要最后加入到别的容器中才能实现GUI的功能。面板组件的创建JPanel():用默认的布局管理器创建面板组件。JPanel(LayoutManager layout):用指定的布局管理器创建面板组件。(4)框架窗

11、口组件(JFrame) JFrame是独立于浏览器的可独立运行的主窗口,通常用于进行开发桌面应用程序。JFrame拥有边界和标题栏设置,其大小可以进行设置调整。JFrame里面需要加入组件,也可以加入菜单,或在上面绘图。(5)布局管理器FlowLayout布局管理是一种最简单的布局管理方法,是Panel的默认布局。它以流式的方式,自左向右,自上而下地放置容器中的组件,即组件按每行先后自左向后放置,一行放不下再换行。FlowLayout():创建默认的FlowLayout布局管理器FlowLayout(int):以指定的对齐方式创建FlowLayout布局管理器。其中的参数有FlowLayout

12、.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER1.4 记录时间方法 在程序中使用Timer类,该类在javax.swing包中。当要开始扫雷游戏时就可以使用计数器进行计数。可以使用Timer类的构造方法:Timer(int a,Object b)创建一个计时器,其中的参数a的单位是毫秒,确定计时器每隔a毫秒“震铃”一次,参数b是计时器的监视器。当使用Timer(int a,Object b)创建计时器,对象b就自动地成了计时器的监视器。timer =new Timer(1000,(ActionListener) this);试验中a的值是1000,表示每隔10

13、00毫秒就触发一次动作事件的监听。在本实验中点击扫雷游戏的“开始”选项,游戏就自动开始计时。当游戏结束时计时器自动停止。在游戏过程中再次点击“开始”,计数器就会清零重新开始计时。2 总体设计2.1 总体功能图图2-1 总体功能图2-2 类之间关系图图2-2类之间关系图2.3 功能设计图2.4 雷区设计流程图图2-3 雷区设计流程图设计结果与分析(可以加页):3. 运行效果图 图3-1 运行主界面效果图图3-2游戏失败效果图图3-3 游戏胜利效果图附录:程序代码package Saolei;import java.awt.BorderLayout; /导入边框布局import java.awt.

14、Container; /container 就是一个可以放组件的容器import java.awt.Font;import java.awt.GridLayout; /GridLayout类是一个布局管理器,它以矩形网格形式对容器中的组件进行布局。import java.awt.Insets; /对象描述容器的边界区域。它指定一个容器在它的各个边界上应留出的空白区间。这个空白可以是一个边界,一个不显示区域或一个标题。import java.awt.event.ActionEvent; /动作事件类import java.awt.event.ActionListener;/动作监听器。对组件im

15、port java.awt.event.MouseAdapter; /添加鼠标事件的时候。用适配器mouseAdapter可以不用实现所有的方法。只需要写自己需要的方法即可import java.awt.event.MouseEvent;import javax.swing.JButton; /按钮类import javax.swing.JFrame;import javax.swing.JLabel;/JLabel 对象可以显示文本、图像或同时显示二者import javax.swing.JMenu; /Swing菜单和菜单项是按钮,因为JMenuItem扩展AbstractButton,J

16、Menu扩展JMenuItem。import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.Timer;public class ScanLei1 extends JFrame implements ActionListener /* serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。有两种生成方式: 一个是默认的1L,比如:private static final long serialV

17、ersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL; */ private static final long serialVersionUID = 1L; private Container contentPane; private JButton btn; private JButton btns; private JLabel b1; private JLabel b2; private JLabel b3; private Tim

18、er timer; private int row=9;/行 private int col=9;/列 private int bon=10;/雷 private int a; private int b; private int a1; private JPanel p,p1,p2,p3;/JPanel 为javax.swing包中的,为面板容器,可以加入到JFrame中 , 它自身是个容器 public ScanLei1(String title) super(title); contentPane=getContentPane(); /一个容器 setSize(297,377);/设置尺

19、寸 this.setBounds(400, 100, 400, 500);/设定一个窗体的偏移量(离屏幕左侧多少,顶端多少),高度,宽度。 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); timer =new Timer(1000,(ActionListener) this); a = new introw+2col+2; initGUI(); public void initGUI() p3=new JPanel(); b=bon; JMenuBar menuBar=new JMenuBar(); JMenu menu1=new JMenu(游

20、戏); JMenu menu2=new JMenu(帮助); JMenuItem mi1=new JMenuItem(初级); JMenuItem mi2 = new JMenuItem(中级); JMenuItem mi3 =new JMenuItem(高级); mi1.addActionListener(this); menu1.add(mi1); mi2.addActionListener(this); menu1.add(mi2); mi3.addActionListener(this); menu1.add(mi3); menuBar.add(menu1); menuBar.add(

21、menu2); p3.add(menuBar); b1=new JLabel(bon+); a1=new intbon; btn =new JButton(开始); btn.addActionListener(this); b2=new JLabel(0); b3=new JLabel(); btns=new JButtonrow*col; p=new JPanel(); p.setLayout(new BorderLayout(); contentPane.add(p); p.add(p3,BorderLayout.NORTH); /combo=new JComboBox(new Objec

22、t初级,中级,高级 ); /加监听 /*combo.addItemListener(new ItemListener() );*/ p1=new JPanel(); /在那个位置 /( FlowLayout)p1.getLayout().setAlignment( FlowLayout.RIGHT); p1.add(b1); p1.add(btn); p1.add(b2); p1.add(b3); p.add(p3,BorderLayout.NORTH); p.add(p1,BorderLayout.CENTER); p2=new JPanel(); p2.setLayout(new Grid

23、Layout(row,col,0,0); for(int i=0;irow*col;i+) btnsi=new JButton(); btnsi.setMargin(new Insets(0,0,0,0); btnsi.setFont(new Font(null,Font.BOLD,25); btnsi.addActionListener(this); btnsi.addMouseListener(new NormoreMouseEvent(); p2.add(btnsi); contentPane.add(p,BorderLayout.NORTH); contentPane.add(p2,B

24、orderLayout.CENTER); public void go() setVisible(true); public static void main(String args) new ScanLei1(扫雷).go(); public void out(int a,JButton btns,ActionEvent e,int i,int x,int y) int p=1; if(axy=0) axy=10; btnsi.setEnabled(false); /33 for(int l=y-1;l-1&n-1&mrow) for(int q=0;qrow; if(n+col*q)=(m

25、*col)&(n+col*q)-1&n-1&mcol) for(int q=0;q=(m*col)&(n+col*q)-1&n-1&mcol) for(int q=0;q=(m*col)&(n+col*q)-1&n-1&mcol) for(int q=0;q=(m*col)&(n+col*q)(m+1)*col) if(axy+1!=0&axy+1!=10) btnsn+col*q.setText(axy+1+); axy+1=10; btnsn+col*q.setEnabled(false); else if(axy+1=0) out(a,btns,e,n+col*q,x,y+1); axy+1=10; btnsn+col*q.setEnabled(f

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

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