版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、java应用技术实训报告题 目 起讫日期 所在院系 学生姓名 专 业 班 级 学 号 指导教师 职称 所在单位 年 月 日一总体设计本系统共包括14个java源文件和6个图象文件。1类之间的关系如图1所示。2java源文件及其功能如表1所示。3.图象文件地雷.gif:地雷方块上的图标。无雷.gif:无雷方块上的图标。触雷.gif:触雷时方块上的图标。探雷错误.gif:游戏结束时,指出标雷错误的图标。微笑脸.gif:按钮上的通常图标。哭脸.gif:触雷时按钮上图标。二、详细设计1主类game(1)成员变量(见表2.11)(2)方法(见表2.12)(3)源代码见文件game.java2方块bloc
2、k(1)成员变量(见表2.21)(2)方法(见表2.22)(3)源代码见文件block.java3雷区 minesquare(1)成员变量(见表2.31)(2)方法(见表2.32)(3)源代码见文件minesquare.java4雷标数目 findaroundminemarknumber.java(1)方法(见表2.41)(2)源代码见文件findaroundminemarknumber.java5雷标判断 determineminemarkisrightorwrong(1)成员变量(见表2.51)(2)方法(见表2.52)(3)源代码见文件determineminemarkisrightor
3、wrong.java6成片挖开区域 determinedigarea(1)成员变量(见表2.61)(2)方法(见表2.62)(3)源代码见文件determinedigarea.java7无雷连通区 findsafearea(1)方法(见表2.71)(2)源代码见文件findsafearea.java8随机布雷 randomsetmine(1)成员变量(见表2.81)(2)方法(见表2.82)(3)源代码见文件randomsetmine.java9周围地雷个数 findaroundminenumber(1)方法见表(见表2.91) (2)源代码见文件findaroundminenumber.ja
4、va10显示剩余雷数 countmine(1)成员变量(见表2.101)(2)方法(见表2.102)(3)源代码见文件countmine.java11计时器 timecount(1)成员变量(见表2.111)(2)方法(见表2.112)(3)源代码见文件timecount.java12英雄榜录入对话框 record(1)成员变量(见表2.121)(2)方法(见表2.122)(3)源代码见文件record.java13显示英雄榜对话框 showrecord(1)成员变量(见表2.131)(2)方法(见表2.132)(3)源代码见文件showrecord.java14挖雷成功 decidewinn
5、er(1)方法见表(见表2.141)(2)源代码见文件decidewinner.java源代码game.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;import java.util.*;import java.io.*;public class game extends jframe implements actionlistener jmenubar bar; jmenu filemenu; jmenuitem 初级,中级,高级,扫雷英雄榜; in
6、t grade=2; minesquare 雷阵; jbutton buttonperson; container con; jpanel box; file 英雄榜=new file(英雄榜.txt); hashtable hashtable=null; record 记录对话框=null; showrecord 显示英雄榜对话框=null; game() buttonperson=new jbutton(new imageicon(微笑脸.gif); 雷阵=new minesquare(中级,40,16,16,buttonperson,记录对话框); buttonperson.addact
7、ionlistener(this); con=getcontentpane(); con.add(雷阵,borderlayout.center); box=new jpanel(); box.setlayout(new gridlayout(1,3); box.add(雷阵.count.textshowmine); box.add(buttonperson); box.add(雷阵.time.textshowtime); con.add(box,borderlayout.north); setvisible(true); addwindowlistener(new windowadapter(
8、) public void windowclosing(windowevent e) system.exit(0); ); setbounds(100,50,360,380); bar=new jmenubar(); filemenu=new jmenu(游戏); 初级=new jmenuitem(初级); 中级=new jmenuitem(中级); 高级=new jmenuitem(高级); filemenu.setmnemonic(g); 初级.setmnemonic(b); 中级.setmnemonic(i); 高级.setmnemonic(e); 扫雷英雄榜=new jmenuitem
9、(扫雷英雄榜); 初级.setmnemonic(t); filemenu.add(初级); filemenu.add(中级); filemenu.add(高级); filemenu.add(扫雷英雄榜); bar.add(filemenu); setjmenubar(bar); 初级.addactionlistener(this); 中级.addactionlistener(this); 高级.addactionlistener(this); 扫雷英雄榜.addactionlistener(this); hashtable=new hashtable(); hashtable.put(初级,初
10、级#+999+#匿名); hashtable.put(中级,中级#+999+#匿名); hashtable.put(高级,高级#+999+#匿名); 记录对话框=new record(this,hashtable); 记录对话框.setgrade(高级); if(!英雄榜.exists() try fileoutputstream out=new fileoutputstream(英雄榜); objectoutputstream object_out=new objectoutputstream(out); object_out.writeobject(hashtable); object_o
11、ut.close(); out.close(); catch(ioexception e) 显示英雄榜对话框=new showrecord(this,hashtable); validate(); public void newgame(string grade,int number,int rows,int cols,int w,int h) buttonperson.seticon(new imageicon(微笑脸.gif); 记录对话框.setgrade(grade); 雷阵=new minesquare(grade,number,rows,cols,buttonperson,记录对话
12、框); con.removeall(); box.removeall(); box.add(雷阵.count.textshowmine); box.add(buttonperson); box.add(雷阵.time.textshowtime); con.add(box,borderlayout.north); con.add(雷阵,borderlayout.center); setbounds(10,10,w,h); validate(); public void actionperformed(actionevent e) if(e.getsource()=初级) grade=1; new
13、game(初级,10,8,8,180,220); if(e.getsource()=中级) grade=2; newgame(中级,40,16,16,360,380); if(e.getsource()=高级) grade=3; newgame(高级,99,22,22,500,520); if(e.getsource()=扫雷英雄榜) 显示英雄榜对话框.显示记录(); 显示英雄榜对话框.setvisible(true); if(e.getsource()=buttonperson) if(grade=1) newgame(初级,10,8,8,180,220); if(grade=2) newg
14、ame(中级,40,16,16,360,380); if(grade=3) newgame(高级,99,22,22,500,520); public static void main(string args) new game(); block.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;public class block extends jbutton implements mouselistener boolean 雷=false, 周围无雷=
15、true; int 周围的雷数=0; int 探雷标记=-1; jlabel label; point p; public block() label=new jlabel(); setborder(borderfactory.creatematteborder(1, 1, 0, 0, color.lightgray); label.setborder(borderfactory.creatematteborder(1, 1, 0, 0, color.lightgray); label.sethorizontalalignment(jlabel.center); label.setlayout
16、(new borderlayout(); label.add(this,borderlayout.center); p=new point(0,0);addmouselistener(this); public void 设置是否是雷(boolean b) 雷=b; public boolean 判断是否是雷() return 雷; public void 设置是雷时的图标(icon icon) label.seticon(icon); public void 设置周围无雷时的图标(icon icon) label.seticon(icon); public void 设置周围有雷时的名字(s
17、tring name) label.settext(name); public string 获取名字() return label.gettext(); public void 设置周围的雷数(int n) 周围的雷数=n; public int 获取周围的雷数() return 周围的雷数; public void 设置在雷区中的位置(int i,int j) p=new point(i,j); public point 获取在雷区中的位置() return p; public int 获取探雷标记() return 探雷标记; public void mousepressed(mouse
18、event e) boolean right=swingutilities.isrightmousebutton(e); if(right=true)&(this.isopaque()=true) 探雷标记=(探雷标记+1)%3; repaint(); public void paintcomponent(graphics g) super.paintcomponent(g); if(探雷标记=0) g.setcolor(color.red); g.fillrect(6,4,8,6); g.drawline(13,10,14,18); if(探雷标记=1) g.setcolor(color.b
19、lue); g.drawstring(?,6,15); public void mouseentered(mouseevent e) public void mousereleased(mouseevent e) public void mouseexited(mouseevent e) public void mouseclicked(mouseevent e) minesquare.javaimport java.awt.event.*;import java.awt.*;import javax.swing.*;import java.util.*;import java.io.*;pu
20、blic class minesquare extends jpanel implements mouselistener int rows=10,cols=10,雷数=10; jbutton buttonface=null; block block; timecount time; countmine count; string grade=null; randomsetmine 随机布雷者; findaroundminenumber 确定周围雷数者; findsafearea 找出无雷连通区者; determinedigarea 成片挖开者; determineminemarkisrigh
21、torwrong 确定雷标记是否正确者; findaroundminemarknumber 确定周围雷标数目者; decidewinner 判断是否胜利者; record 记录对话框=null; public minesquare(string grade,int minenumber,int rows, int cols,jbutton b,jdialog dialog) this.grade=grade; this.rows=rows; this.cols=cols; 雷数=minenumber; 判断是否胜利者=new decidewinner(); 记录对话框=(record)dial
22、og; block=new blockrows+1cols+1; buttonface=b; time=new timecount(); count=new countmine(雷数); count.textshowmine.settext(+雷数); setlayout(new gridlayout(rows,cols); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) blockij=new block(); blockij.设置在雷区中的位置(i,j); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+)
23、 add(blockij.label); blockij.addmouselistener(this); 随机布雷者=new randomsetmine(); 随机布雷者.随机布雷(雷数,block,rows,cols); 确定周围雷数者=new findaroundminenumber(); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) 确定周围雷数者.设置周围的雷数(i,j,block,rows,cols); public void gameover() errupt(); buttonface.seticon(new imag
24、eicon(哭脸.gif); for(int i=1;i=rows;i+) for(int j=1;j=cols;j+) blockij.removemouselistener(this); if(blockij.判断是否是雷()&blockij.isopaque()&blockij.探雷标记!=0) blockij.requestfocus(); blockij.setopaque(false); if(blockij.探雷标记=0&!blockij.判断是否是雷() blockij.requestfocus(); blockij.探雷标记=-1; blockij.repaint(); bl
25、ockij.seticon(new imageicon(探雷错误.gif); public void mousepressed(mouseevent e) boolean left=swingutilities.isleftmousebutton(e); boolean right=swingutilities.isrightmousebutton(e); block blocksource=(block)e.getsource(); boolean 雷=blocksource.判断是否是雷(); if(left=true&blocksource.isopaque()=true&blockso
26、urce.获取探雷标记()!=0) trytime.start(); catch(exception ee) if(雷=true) blocksource.requestfocus(); blocksource.setopaque(false); blocksource.探雷标记=-1; blocksource.repaint(); blocksource.seticon(new imageicon(触雷.gif); gameover(); else buttonface.seticon(new imageicon(微笑脸.gif); if(blocksource.周围无雷=false&blo
27、cksource.获取探雷标记()!=0) blocksource.setopaque(false); blocksource.探雷标记=-1; blocksource.repaint(); if(blocksource.周围无雷=true&blocksource.isopaque() blocksource.setopaque(false); point blockpoint=(point)blocksource.获取在雷区中的位置(); int i=blockpoint.x; int j=blockpoint.y; 找出无雷连通区者=new findsafearea(); vector t
28、ree=找出无雷连通区者.确定无雷连通区(i,j,block,rows,cols); for(int index=0;indextree.size();index+) point p=(point)tree.elementat(index); int m=p.x,n=p.y; for(int k=math.max(m-1,1);k=math.min(m+1,rows);k+) for(int t=math.max(n-1,1);t=math.min(n+1,cols);t+) if(blockkt.探雷标记=0) gameover(); else blockkt.requestfocus();
29、 blockkt.setopaque(false); blockkt.探雷标记=-1; blockkt.repaint(); tree.removeallelements(); if(right) if(blocksource.探雷标记=0&blocksource.isopaque() count.countminesub(); if(blocksource.探雷标记=1&blocksource.isopaque() count.countmineadd(); public void mouseentered(mouseevent e) public void mousereleased(mo
30、useevent e) boolean success=判断是否胜利者.判断是否成功(雷数,block,rows,cols); if(success=true) errupt(); 记录对话框.setgrade(grade); int spendtime=integer.parseint(time.textshowtime.gettext(); 记录对话框.settime(spendtime); file f=new file(英雄榜.txt); tryfileinputstream in=new fileinputstream(f); objectinputstream ob
31、ject_in=new objectinputstream(in); hashtable hashtable=(hashtable)object_in.readobject(); object_in.close(); in.close(); string temp=(string)hashtable.get(grade); stringtokenizer fenxi=new stringtokenizer(temp,#); fenxi.nexttoken(); int recordtime=integer.parseint(fenxi.nexttoken(); if(spendtime0&co
32、rrect) 成片挖开者=new determinedigarea(); vector tree=成片挖开者.确定成片挖开区域(i,j,block,rows,cols); for(int index=0;indextree.size();index+) point p=(point)tree.elementat(index); int m=p.x,n=p.y; for(int k=math.max(m-1,1);k=math.min(m+1,rows);k+) for(int t=math.max(n-1,1);t=math.min(n+1,cols);t+) if(blockkt.isopa
33、que()&!blockkt.判断是否是雷()& blockkt.探雷标记!=0) blockkt.requestfocus(); blockkt.setopaque(false); blockkt.探雷标记=-1; blockkt.repaint(); repaint(); tree.removeallelements(); if(blocksource.isopaque()=false&周围雷标数=周围雷数&!correct) gameover(); if(blocksource.isopaque()=false&(周围雷标数!=周围雷数) findaroundminenumber.jav
34、aimport java.awt.color;import javax.swing.icon;import javax.swing.imageicon;public class findaroundminenumbericon 周围无雷的图标; public findaroundminenumber() 周围无雷的图标=new imageicon(无雷.gif); public void 设置周围的雷数(int i,int j,block block,int 行数, int 列数) int 雷数=0; if(blockij.判断是否是雷()=false) for(int k=math.max(
35、i-1,1);k=math.min(i+1,行数);k+) for(int t=math.max(j-1,1);t0) blockij.周围无雷=false; blockij.设置周围有雷时的名字(+雷数); blockij.设置周围的雷数(雷数); if(雷数=1) blockij.label.setforeground(color.blue); if(雷数=2) blockij.label.setforeground(new color(0,100,0); if(雷数=3) blockij.label.setforeground(color.red); if(雷数=4) blockij.l
36、abel.setforeground(new color(0,0,100); else blockij.周围无雷=true; blockij.设置周围有雷时的名字(); blockij.设置周围的雷数(0); blockij.设置周围无雷时的图标(周围无雷的图标); determineminemarkisrightorwrong.javapublic class determineminemarkisrightorwrongfindaroundminemarknumber 确定周围雷标数目者=new findaroundminemarknumber(); int 周围雷标数=0; int 周围
37、雷数=0; public determineminemarkisrightorwrong() public boolean 判断雷标记是否正确(int i,int j,block block,int 行数, int 列数) int 错误=0; boolean correct=false; 周围雷标数=确定周围雷标数目者.获取周围雷标记的数目(i,j,block,行数,列数); 周围雷数=blockij.获取周围的雷数(); for(int k=math.max(i-1,1);k=math.min(i+1,行数);k+) for(int t=math.max(j-1,1);t0) correct=false; else if(错误=0&周围雷标数=周围雷数) correct=true; return correct; determinedigarea.javaimport java.awt.point;import java.util.vector;public class determin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 污水课程设计书模板
- 怪雨伞读后感
- 常用学生期末综合素质评语30句
- 2024年挖机驾驶员职业规划与培训服务合同范本3篇
- 现浇楼盖课程设计结论
- 2024年度跨境电商平台招商引资合作协议范本3篇
- 2024年度新型农业种植技术承包合同范本3篇
- 慈善献爱心号召倡议书
- 2025年山东淄博市市张店区事业单位招聘历年管理单位笔试遴选500模拟题附带答案详解
- 2025年山东济宁高新区事业单位“优才”41人历年管理单位笔试遴选500模拟题附带答案详解
- 提高检验标本合格率的品管圈课件
- 日拱一卒行稳致远
- 幼儿园教育的德育培养
- 顺丰SHL在线测评题库
- 贵州省黔东南州2022-2023学年八年级上学期期末文化水平测试数学试卷(含答案)
- 快消品招商方案
- 河南省洛阳市2022-2023学年高一上学期期末语文试卷(含答案)
- 切割机安全培训
- 充电桩采购安装售后服务方案
- 资产评估学教程(第八版)习题及答案 乔志敏
- 体质健康成绩测试全自动化计算模板
评论
0/150
提交评论