




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成绩评定表学生姓名班级学号专业课程设计题目基于Java的扫雷游戏软件设计评语组长签字:成绩日期20142014 年月日课程设计任务书学院专业学生姓名班级学号课程设计题目基于Java的扫雷游戏软件设计实践教学要求与任务:米用 java 技术设计扫雷游戏软件,设计要求如下:(1)扫雷游戏风味初级、中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄榜”。(2)选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块便启动计时器。(3)用户要揭开摸个方块,可以单击它。若所揭方块卜后雷,
2、用户便输了这一局,若所揭方块下无雷,则显十个数字,该数字代表方块的周围的 8 个方块中共有多少颗雷。(4)如果用户认为某个方块下埋着雷,单击右键可以在方块上表十个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户是否正确),程序将显示的剩余需数减少一个。(5)扫雷胜利后(用时最少者),程序将弹出保存成绩的对话框。工作计划与进度安 AE:第 19 周:布置课程设计任务,查阅资料,分组设计,程序调试。第 20 周:程序调试,编写课程设计报告,验收,答辩。指导教师:20142014 年月日专业负责人:20142014 年月日学院教学副院长:20142014 年月日1 .设计目
3、的 42 .1 总体设计 42.1 设计需求42.2 程序功能模块图43 .关键技术 74 .程序流程 85 .主要源代码 86 .运行结果及结论 277 .参考文献 29case 1:. .设计目的通过选择扫雷游戏软件设计,这个综合性的题目作为本次的课程设计。可以让我们更加熟悉 Java程序设计这门课程,学会熟练使用 Java 这个软件,加深对 Java 语言的掌握,提高编程水平。同时培养独立思考和同学间团结合作的能力,为毕业设计以及将来的工作打下坚实的基础。case 2:.总体设计设计需求在设计扫雷游戏时,需要编写 7 个源文件:MineGame.java,MineArea.java,Bl
4、ock.java,BlockView.java,LayMines.java,ShowRecord.java,Record.java 除了这七个源文件外,还需要Java 系统提供一些重要的类,如 File,JButton 和 JLabel 等类。程序功能模块图2.2 程序功能模块图MineGame.java(主类):成员变量bar 和 fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜;mineArea 是扫雷区域,提供有关雷的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord 负责显示英雄榜中的数据方法MineGame(
5、)是构造窗口,负责完成窗口的初始化。ActionPerformed(ActionEvent)方法是 MineGame 类实现的 ActionListener 接口中的方法, 该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发 ActionEvent 事件,导致actionPerformed(ActionEvent)方法执行相应的操作。Main(String)方法是程序运行的入口方法。MineArea.java 成员变量block 和 Block 类型的数组,用来确定雷区有多少需进行扫雷的方块;blockView 是 BlockView 类型的数组,负责 block 数组中 Bloc
6、k 对象提供视图;lay 是 LayMines 类型的对象,负责设置 block 数组中的哪些方块不是雷;record 负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框;reStart 是一个按钮对象,用户单击它重新开始游戏;time 是计时器对象,负责计算用户用时。方法initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。actionPerformed(actionEvent)是 MineArea 类实现的 ActionListener 接口中的方法。当用户单击 blockVi
7、ew 中的某个方块时 actionPerformed(actionEvent)执行有关算法。Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用 show 方法进行扫雷。mousePressed(mouseEvent)方法是 MineArea 类实现的 MouseListener 接口中的方法, 当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让 record 对话框可见。Block.java 成员变量name 方块上
8、的名字aroundMineNumber 是方块周围雷的数目mineicon 是方块上雷的图标isMine 用来表示方块是否是雷isMark 用来表示方块是否被标记isOpen 用来表本方块是否被挖开方法setAroundMineNumber(int)方法用来设置 aroundMineNumber 的值;getAroundMineNumber()方法用来获取 aroundMineNumber 的值。BlockView.java成员变量blockNameOricon 用 来 显 示 Block 对 象 的 namenumber 和 mineicon 属 性 ; blockCover 用 来 遮 挡
9、blockNameOricon;card 卡片式布局。方法giveView(Blockblock)方法给参数指定的 Block 对象提供视图;seeBlockNameOricon()方法让用户看见视图中的标签,无法看见按钮;seeBlockCover()方法让用户看见视图中的按钮,无法看见标签。LayMines.java成员变量mineicon 用来存放一个格式为 gif 的图像。方法layMinesForBlock(Block,int)方法对参数指定的 Block 数组进行设置,其中 int 参数指定雷的数目。Record.java成员变量textName 提供用户扫雷优胜者出入姓名;用户单
10、击“确定”按钮,可以保存成绩。方法actionPerformed(ActionEvent)方法是 Record 类实现的 ActionListener 接口中的方法,当用户单击“确定”按钮后,该方法被执行,所执行的操作就是获取用户输入的名字和用时,然后调用writeRecord(String,String)方法将信息写入英雄榜中;writeRecord(String,String)负责将有关信息写入“英雄榜”文件。ShowRecord:成员变量file 存放文件的引用,用户单击“显示成绩”按钮,可以查看各个级别的最好成绩;用户单击“重新计分”按钮,可以将“英雄榜”中的成绩恢复为初始值。方法ac
11、tionPerformed(ActionEvent)方法是 ShowRecord 类实现的 ActionListener 接口中的方法,当用户单击“显示成绩”按钮后,该方法被执行,所执行的操作就是调用 readAndShow()方法;readAndShow()方法负责读取存放在文件中的各个级别的扫雷最好成绩以及扫雷者姓名,并显示这些相关信息。.关键技术实现窗口的初始化:利用 MineGame.java 实现MineGame()是构造窗口,负责完成窗口的初始化。ActionPerformed(ActionEvent)方法是 MineGame 类实现的 ActionListener 接口中的方法,
12、该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发 ActionEvent 事件,导致actionPerformed(ActionEvent)方法执行相应的操作。利用产生随机数的方法完成游戏中随机布雷的要求:利用 MineArea.java 实现initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。actionPerformed(actionEvent)是 MineArea 类实现的 ActionListener 接口中的方法。当用户单击 blockView 中的某个方块时 actionPerformed(a
13、ctionEvent)执行有关算法。Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用 show 方法进行扫雷。mousePressed(mouseEvent)方法是 MineArea 类实现的 MouseListener 接口中的方法, 当用户按下鼠标右键时,mousePressed(mouseEvent)方法负责让方块上显示一个探雷标记。inquireWin()方法用来判断用户扫雷是否成功,如果成功该方法负责让 record 对话框可见。.程序流程4.1 程序流程图打开程序后点重新开始,游戏定义并初始化,用户开始进行游戏,计数器开始统计用
14、户点击次数并记录,判断用户是否中雷,否继续游戏,是结束游戏并处理结果.主要源代码importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;importjavax.swing.border.*;importjava.util.*;importjava.io.*;publicclassMineGameextendsJFrameimplementsActionListenerJMenuBarbar;JMenufileMenu;JMenuItem 初级,中级,高级,扫雷英雄榜;MineAreamineArea=null;File 英雄榜=n
15、ewFile(英雄榜.txt);Hashtablehashtable=null;ShowRecordshowHeroRecord=null;MineGame()mineArea=newMineArea(16,16,40,1);add(mineArea,BorderLayout.CENTER);bar=newJMenuBar();fileMenu=newJMenu(游戏);初级=newJMenuItem(初级);中级=newJMenuItem(中级);高级=newJMenuItem(高级);扫雷英雄榜=newJMenuItem(扫雷英雄榜);fileMenu.add(初级);fileMenu.a
16、dd(中级);fileMenu.add(高级);fileMenu.add(扫雷英雄榜);bar.add(fileMenu);setJMenuBar(bar);初级.addActionListener(this);中级.addActionListener(this);高级.addActionListener(this);扫雷英雄榜.addActionListener(this);hashtable=newHashtable();hashtable.put(初级,初级#+999+#匿名);hashtable.put(中级,中级#+999+#匿名)if(!英雄榜.exists()tryFileOut
17、putStreamout=newFileOutputStream(ObjectOutputStreamobjectOut=newObjectOutputStream(out);objectOut.wr 让 eObject(hashtable);objectOut.close();out.close();catch(IOExceptione)showHeroRecord=newShowRecord(this,hashtable);setBounds(100,100,280,380);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_
18、CLOSE);validate();publicvoidactionPerformed(ActionEvente)if(e.getSource()=初级)mineArea.initMineArea(8,8,10,1);setBounds(100,100,200,280);if(e.getSource()=中级)mineArea.initMineArea(16,16,40,2);setBounds(100,100,280,380);if(e.getSource()=高级)mineArea.initMineArea(22,22,99,3);setBounds(100,100,350,390);if
19、(e.getSource()=扫雷英雄榜)hashtable.put(高级,高级#+999+#匿名);英雄榜);if(showHeroRecord!=null)showHeroRecord.setVisible(true);)validate();)publicstaticvoidmain(Stringargs儿newMineGame();)importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassMineAreaextendsJPanelimplementsActionListener,MouseListen
20、erJButtonreStart;Blockblock;BlockViewblockView;LayMineslay;introw,colum,mineCount,markMount;雷区的行数、列数以及地雷个数和用户给出的标记数ImageIconmark;intgrade;JPanelpCenter,pNorth;JTextFieldshowTime,showMarkedMineCount;/显示用时以及标记数Timertime;/计时器intspendTime=0;Recordrecord;publicMineArea(introw,intcolum,intmineCount,intgra
21、de)reStart=newJButton(重新开始);mark=newImageIcon(mark.gif);/探雷标记time=newTimer(1000,this);showTime=newJTextField(5);showMarkedMineCount=newJTextField(5);showTime.setHorizontalAlignment(JTextField.CENTER);showMarkedMineCount.setHorizontalAlignment(JTextField.CENTER);showMarkedMineCount.setFont(newFont(Ar
22、ial,Font.BOLD,16);showTime.setFont(newFont(Arial,Font.BOLD,16);pCenter=newJPanel();pNorth=newJPanel();lay=newLayMines();initMineArea(row,colum,mineCount,grade);/初始化雷区,见下面的 LayMines()reStart.addActionListener(this);pNorth.add(showMarkedMineCount);pNorth.add(reStart);pNorth.add(showTime);setLayout(new
23、BorderLayout();add(pNorth,BorderLayout.NORTH);add(pCenter,BorderLayout.CENTER);publicvoidinitMineArea(introw,intcolum,intmineCount,intgrade)pCenter.removeAll();spendTime=0;markMount=mineCount;this.row=row;this.colum=colum;this.mineCount=mineCount;this.grade=grade;block=newBlockrowcolum;for(inti=0;ir
24、ow;i+)for(intj=0;jcolum;j+)blockij=newBlock();lay.layMinesForBlock(block,mineCount);blockView=newBlockViewrowcolum;pCenter.setLayout(newGridLayout(row,colum);for(inti=0;irow;i+)for(intj=0;jcolum;j+)blockViewij=newBlockView();blockViewij.giveView(blockij);/给 blockijpCenter.add(blockViewij);blockViewi
25、j.getBlockCover().addActionListener(this);blockViewij.getBlockCover().addMouseListener(this);blockViewij.seeBlockCover();blockViewij.getBlockCover().setEnabled(true);blockViewij.getBlockCover().setIcon(null);showMarkedMineCount.setText(+markMount);validate();publicvoidsetRow(introw)this.row=row;publ
26、icvoidsetColum(intcolum)this.colum=colum;publicvoidsetMineCount(intmineCount)this.mineCount=mineCount;publicvoidsetGrade(intgrade)this.grade=grade;publicvoidactionPerformed(ActionEvente)if(e.getSource()!=reStart&e.getSource()!=time)time.start();intm=-1,n=-1;提供视图for(inti=0;irow;i+)for(intj=0;jcol
27、um;j+)if(e.getSource()=blockViewij.getBlockCover()m=i;n=j;break;if(blockmn.isMine()for(inti=0;irow;i+)for(intj=0;j0&blockmn.getIsOpen(尸 false)blockViewmn.seeBlockNameOrIcon();blockmn.setIsOpen(true);return;elseif(blockmn.getAroundMineNumber()=0&blockmn.getIsOpen()=false)blockViewmn.seeBlockN
28、ameOrIcon();blockmn.setIsOpen(true);for(intk=Math.max(m-1,0);k=Math.min(m+1,row-1);k+)for(intt=Math.max(n-1,0);t=Math.min(n+1,colum-1);t+)show(k,t);publicvoidmousePressed(MouseEvente)JButtonsource=(JButton)e.getSource();for(inti=0;irow;i+)for(intj=0;jcolum;j+)if(e.getModifiers()=InputEvent.BUTTON3_M
29、ASK&source=blockViewij.getBlockCover()if(blockij.getIsMark()source.setIcon(null);blockij.setIsMark(false);markMount=markMount+1;showMarkedMineCount.setText(+markMount);)elsesource.setIcon(mark);blockij.setIsMark(true);markMount=markMount-1;showMarkedMineCount.setText(+markMount);)publicvoidinqui
30、reWin()intnumber=0;for(inti=0;irow;i+)for(intj=0;j=1)blockNameOrIcon.setText(+n);elseblockNameOrIcon.setText();publicvoidseeBlockNameOrIcon()card.show(this,view);validate();publicvoidseeBlockCover()card.show(this,cover);validate();publicJButtongetBlockCover()returnblockCover;importjava.util.*;import
31、javax.swing.*;publicclassLayMinesImageiconmineIcon;LayMines()mineicon=newImageIcon(mine.gif);)publicvoidlayMinesForBlock(Blockblock,intmineCount)introw=block.length;intcolumn=block0.length;LinkedListlist=newLinkedList();for(inti=0;irow;i+)for(intj=0;j0)intsize=list.size();/list 返回节点的个数intrandomIndex
32、=(int)(Math.random()*size);Blockb=list.get(randomIndex);b.setIsMine(true);b.setName(雷)b.setMineIcon(mineIcon);list.remove(randomIndex);/list 删除索弓 I 值为 randomIndex 的节点mineCount-;)for(inti=0;irow;i+)for(intj=0;jcolumn;j+)if(blockij.isMine()blockij.setIsOpen(false);blockij.setIsMark(false);)elseintmineNumber=0;for(intk=Math.max(i-1,0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025【合同范本】环保评估技术服务合同书
- 2025标准版中介合同书
- 2025解除劳动合同通知书(员工)
- 2025莲花山中学代课教师聘用合同书
- 2025工程信息费合同范本
- 2025购销合同(食品添加剂专用)
- 2025年农业土地租赁排水协议
- 高档小区装饰装修施工合同2篇
- 租商铺合同标准版样本3篇
- 滚筒洗衣机门封条更换服务费协议
- 银行卡借用协议
- 二年级道德与法治上册 第四单元 我们生活的地方 16 家乡新变化教学实录 新人教版
- 食堂经理年度工作总结
- 小米生态链企业的协同发展与供应链优化
- 2025年湖南工程职业技术学院单招职业适应性测试题库必考题
- 《资治通鉴》与为将之道知到课后答案智慧树章节测试答案2025年春武警指挥学院
- 劳动合同范本合同模板
- 2025-2030年口红色彩创新设计行业跨境出海战略研究报告
- 2025年个体经营户劳务合同(五篇)
- 2025年公务员遴选结构化面试万能修订稿
- 《母婴店促销方案》课件
评论
0/150
提交评论