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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

java课程设计扫雷游戏Word文档格式.docx

1、布置课程设计任务,查阅资料,分组设计,程序调试。 第20周:程序调试,编写课程设计报告,验收,答辩。指导教师: 2014年 月 日专业负责人:学院教学副院长:1设计目的 - 42总体设计 - 42.1 设计需求 - 42.2 程序功能模块图 - 43关键技术 - 74程序流程 - 85主要源代码 - 86运行结果及结论 - 277参考文献 - 291设计目的通过选择扫雷游戏软件设计,这个综合性的题目作为本次的课程设计。可以让我们更加熟悉Java程序设计这门课程,学会熟练使用Java这个软件,加深对Java语言的掌握,提高编程水平。同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作

2、打下坚实的基础。2总体设计2.1 设计需求在设计扫雷游戏时,需要编写7个源文件:MineGame.java,MineArea.java,Block.java,BlockView.java,LayMines.java,ShowRecord.java,Record.java 除了这七个源文件外,还需要Java系统提供一些重要的类,如File,JButton和JLabel等类。2.2 程序功能模块图2.2.1 MineGame.java(主类):成员变量bar和fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜”;mineArea 是扫雷区域,提供有关雷

3、的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord负责显示英雄榜中的数据方法MineGame()是构造窗口,负责完成窗口的初始化。ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。Main(String)方法是程序运行的入口方法。2.2.2 MineArea.java:block和Block类型的数组,用来确定雷区有多少

4、需进行扫雷的方块;blockView是BlockView类型的数组,负责block数组中Block对象提供视图;lay是LayMines类型的对象,负责设置block数组中的哪些方块不是雷;record负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框;reStart是一个按钮对象,用户单击它重新开始游戏;time是计时器对象,负责计算用户用时。initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。actionPerformed(actionEvent)是MineArea类实现的A

5、ctionListener接口中的方法。当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show方法进行扫雷。mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方法,当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让record对话框可见。2.

6、2.3 Block.java:name方块上的名字 aroundMineNumber是方块周围雷的数目 mineIcon是方块上雷的图标 isMine用来表示方块是否是雷 isMark用来表示方块是否被标记 isOpen用来表示方块是否被挖开setAroundMineNumber(int)方法用来设置aroundMineNumber的值;getAroundMineNumber()方法用来获取aroundMineNumber的值。2.2.4 BlockView.javablockNameOrIcon用来显示Block对象的name,number和mineIcon属性;blockCover用来遮挡

7、blockNameOrIcon;card卡片式布局。giveView(Block block)方法给参数指定的Block对象提供视图;seeBlockNameOrIcon()方法让用户看见视图中的标签,无法看见按钮;seeBlockCover()方法让用户看见视图中的按钮,无法看见标签。2.2.5 LayMines.java:mineIcon用来存放一个格式为gif的图像。layMinesForBlock(Block,int)方法对参数指定的Block数组进行设置,其中int参数指定雷的数目。2.2.6 Record.java:textName提供用户扫雷优胜者出入姓名;用户单击“确定”按钮,

8、可以保存成绩。actionPerformed(ActionEvent)方法是Record类实现的ActionListener接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入英雄榜中;writeRecord(String,String)负责将有关信息写入“英雄榜”文件。2.2.7 ShowRecord:file存放文件的引用,用户单击“显示成绩”按钮,可以查看各个级别的最好成绩;用户单击“重新计分”按钮,可以将“英雄榜”中的成绩恢复为初始值。actionPerformed(A

9、ctionEvent)方法是ShowRecord类实现的ActionListener接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用readAndShow()方法;readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些相关信息。3关键技术3.1 实现窗口的初始化:利用MineGame.java实现3.2 利用产生随机数的方法完成游戏中随机布雷的要求:利用MineArea.java实现4程序流程41 程序流程图打开程序后点重新开始,游戏定义并初始化,用户开始进行游戏,计数器开始统计用户点击次数并记录,判断用户是否中雷,否

10、继续游戏,是结束游戏并处理结果5主要源代码import java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;import java.util.*;import java.io.*;public class MineGame extends JFrame implements ActionListener JMenuBar bar; JMenu fileMenu; JMenuItem 初级,中级,高级,扫雷英雄榜; MineArea mineArea=null; File 英雄榜=

11、new File(英雄榜.txt); Hashtable hashtable=null; ShowRecord showHeroRecord=null; MineGame() mineArea=new MineArea(16,16,40,1); add(mineArea,BorderLayout.CENTER); bar=new JMenuBar(); fileMenu=new JMenu(游戏 初级=new JMenuItem(初级 中级=new JMenuItem(中级 高级=new JMenuItem(高级 扫雷英雄榜=new JMenuItem(扫雷英雄榜 fileMenu.add(初

12、级); fileMenu.add(中级); fileMenu.add(高级); fileMenu.add(扫雷英雄榜); bar.add(fileMenu); setJMenuBar(bar); 初级.addActionListener(this); 中级.addActionListener(this); 高级.addActionListener(this); 扫雷英雄榜.addActionListener(this); hashtable=new Hashtable(); hashtable.put(,初级#+999+#匿名中级#高级# if(!英雄榜.exists() try FileOu

13、tputStream out=new FileOutputStream(英雄榜); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(hashtable); objectOut.close(); out.close(); catch(IOException e) showHeroRecord=new ShowRecord(this,hashtable); setBounds(100,100,280,380); setVisible(true); setDefaultCloseOpera

14、tion(JFrame.EXIT_ON_CLOSE); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=初级) mineArea.initMineArea(8,8,10,1); setBounds(100,100,200,280); if(e.getSource()=中级) mineArea.initMineArea(16,16,40,2); if(e.getSource()=高级) mineArea.initMineArea(22,22,99,3); setBounds(100,100,350,3

15、90); if(e.getSource()=扫雷英雄榜) if(showHeroRecord!=null) showHeroRecord.setVisible(true); public static void main(String args) new MineGame();public class MineArea extends JPanel implements ActionListener,MouseListener JButton reStart; Block block; BlockView blockView; LayMines lay; int row,colum,mineC

16、ount,markMount;/雷区的行数、列数以及地雷个数和用户给出的标记数 ImageIcon mark; int grade; JPanel pCenter,pNorth; JTextField showTime,showMarkedMineCount; /显示用时以及标记数 Timer time; /计时器 int spendTime=0; Record record; public MineArea(int row,int colum,int mineCount,int grade) reStart=new JButton(重新开始 mark=new ImageIcon(mark.g

17、if /探雷标记 time=new Timer(1000,this); showTime=new JTextField(5); showMarkedMineCount=new JTextField(5); showTime.setHorizontalAlignment(JTextField.CENTER); showMarkedMineCount.setHorizontalAlignment(JTextField.CENTER); showMarkedMineCount.setFont(new Font(Arial,Font.BOLD,16); showTime.setFont(new Fon

18、t( pCenter=new JPanel(); pNorth=new JPanel(); lay=new LayMines(); initMineArea(row,colum,mineCount,grade); /初始化雷区,见下面的LayMines() reStart.addActionListener(this); pNorth.add(showMarkedMineCount); pNorth.add(reStart); pNorth.add(showTime); setLayout(new BorderLayout(); add(pNorth,BorderLayout.NORTH);

19、add(pCenter,BorderLayout.CENTER); public void initMineArea(int row,int colum,int mineCount,int grade) pCenter.removeAll(); spendTime=0; markMount=mineCount; this.row=row; this.colum=colum; this.mineCount=mineCount; this.grade=grade; block=new Blockrowcolum; for(int i=0;irow;i+) for(int j=0;jcolum;j+

20、) blockij=new Block(); lay.layMinesForBlock(block,mineCount); blockView=new BlockViewrowcolum; pCenter.setLayout(new GridLayout(row,colum);i+) j+) blockViewij=new BlockView(); blockViewij.giveView(blockij); /给blockij提供视图 pCenter.add(blockViewij); blockViewij.getBlockCover().addActionListener(this);

21、blockViewij.getBlockCover().addMouseListener(this); blockViewij.seeBlockCover(); blockViewij.getBlockCover().setEnabled(true); blockViewij.getBlockCover().setIcon(null); showMarkedMineCount.setText(+markMount); public void setRow(int row) public void setColum(int colum) public void setMineCount(int

22、mineCount) public void setGrade(int grade) public void actionPerformed(ActionEvent e) if(e.getSource()!=reStart&e.getSource()!=time) time.start(); int m=-1,n=-1; if(e.getSource()=blockViewij.getBlockCover() m=i; n=j; break; if(blockmn.isMine() blockViewij.getBlockCover().setEnabled(false); if(blockij.isMine() blockViewij.seeBlockNameOrIcon(); time.stop(); else show(m,n); /见本类后面的show方法 if(e.getSource()=reStart)

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

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