Java扫雷游戏课程设计实训报告_第1页
Java扫雷游戏课程设计实训报告_第2页
Java扫雷游戏课程设计实训报告_第3页
Java扫雷游戏课程设计实训报告_第4页
Java扫雷游戏课程设计实训报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java应用技术实训报告题 目 起讫日期 所在院系 学生姓名 专 业 班 级 学 号 指导教师 职称 所在单位 年 月 日一总体设计本系统共包括3个java源文件和4个图像文件。1类之间的关系如图1.1所示。2java源文件及其功能如表1所示。表1 源文件及其功能序号文件名主要功能1main.java生成的类负责创建程序窗口,含有main方法,游戏从该类开始执行。2mainbomb.java为主类创建整个挖雷游戏的对象,包括窗口,布雷,判断等等。3bomb.java负责创建游戏所需要的按钮。3.图像文件bomb.gif:地雷方块上的图标。question.gif:疑惑探雷是否正确。bomb_b

2、ig.gif:触雷时方块上的图标。flag.gif:探雷标记。二、详细设计1主类main(1)成员变量(见表2)表2 成员变量描述变量类型备注游戏运行mainbomb临时变量(2)成员变量(见表3)表3 名称功能备注main游戏开始(3)源代码见文件main.javaimport java.awt.*; import java.awt.event.*; import javax.swing.*;/*主类*/public class main public static void main(string args) (new mainbomb().show(); 2挖雷游戏 mainbomb(1

3、)成员变量(见表4)表4成员变量描述变量类型名称雷数设置jtextfieldtext当前方块数intblocknum当前雷数intbombnum开始jbuttonstart踩雷iconicon_bomb踩雷标记iconicon_bomb_big雷标记iconicon_flag疑惑是否有雷iconicon_question目录面板panelmenupamel主面板panelmainpanel雷bombbombbutton该方块是否有雷boolean周围无雷方块周围的雷数int周围的雷数方块上的雷标记int探雷标记显示方块信息jlabellabel方块在雷区的位置pointp布雷randomset

4、set判断标记是否正确determinedetermine是否获得胜利winnerwin雷标数目intcount周围方块的雷数intcount1(2)方法见(表5)表5 方法名功能备注game创建程序窗口barnewgame新开局actionperformed处理actionevent事件接口方法设置方块是否有雷设置雷的值设置是雷时的图标设置label上的图标设置无雷时的图标设置label上的图标设置有雷时的名字设置label上的文字设置周围的雷数设置周围的雷数获取名字返回方块label上的文字获取周围雷数返回周围的雷数设置雷区位置设置属性p获取雷区位置返回属性p获取探雷标记返回探雷标记mou

5、sepressed处理鼠标按下事件接口方法mouseclicked处理鼠标双击事件接口方法mousereleased处理鼠标释放事件接口方法mouseexited处理鼠标退出事件接口方法mouseentered处理鼠标进入事件接口方法minessquare创建雷区gameover游戏失败判断雷标是否正确正确返回true错误返回false布雷随机布雷判断是否成功成功返回true失败返回false(3)源代码见文件mainbomb.javaimport java.awt.*; import java.awt.event.*; import javax.swing.*;/*窗口及算法实现类*/cla

6、ss mainbomb extends jframe implements actionlistener,mouselistener public jtextfield text; public label nowbomb,setbomb; public int blocknum,bombnum; /当前方块数当前雷数 public icon icon_bomb = new imageicon(bomb.gif); /踩雷 public icon icon_bomb_big = new imageicon(bomb_big.gif); /踩雷标记 public icon icon_flag =

7、 new imageicon(flag.gif); /雷标记 public icon icon_question = new imageicon(question.gif); /疑惑是否有雷 public jbutton start = new jbutton( 开始 ); public panel menupamel = new panel(); public panel mainpanel = new panel(); public bomb bombbutton; /*界面设计*/ public mainbomb() super(成型04-2 李超 java课程设计 ); blocknu

8、m = 64; bombnum = 10; container c=getcontentpane(); c.setbackground(color.gray); c.setlayout(new borderlayout(); text=new jtextfield(10 ,3); nowbomb = new label(当前雷数+ +bombnum+); setbomb= new label(设置地雷数); start.addactionlistener(new actionlistener() public void actionperformed(actionevent e) bombnu

9、m = integer.parseint(text.gettext().trim(); if(bombnum = 10 & bombnum 50 ) replay(); else joptionpane msg = new joptionpane(); joptionpane.showmessagedialog(null,您设置的地雷数太多了,请重设!,错误,2); ); menupamel.add(setbomb); menupamel.add(text); menupamel.add(start); menupamel.add(nowbomb); c.add(menupamel,north

10、); mainpanel.setlayout(new gridlayout( (int)math.sqrt(blocknum) , (int)math.sqrt(blocknum) ); bombbutton=new bomb (int)math.sqrt(blocknum) ; for(int i = 0 ; i (int)math.sqrt(blocknum) ; i+) bombbutton i =new bomb (int)math.sqrt(blocknum) ; for(int i = 0 ; i (int)math.sqrt(blocknum) ; i+ ) for(int j

11、= 0 ; j (int)math.sqrt(blocknum) ; j+ ) bombbutton i j =new bomb(i,j); bombbutton i j .setforeground( color.gray); bombbutton i j .addactionlistener(this); bombbutton i j .addmouselistener(this); for(int i = 0 ; i (int)math.sqrt(blocknum) ; i+ ) for(int j = 0 ; j (int)math.sqrt(blocknum) ; j+ ) main

12、panel.add(bombbutton i j ); c.add(mainpanel,center); startbomb(); setsize(400,400); setlocation(350,200); setresizable(false); /*布雷*/ public void startbomb() for(int i=0;ibombnum;i+) int x =(int)(math.random()*(int)(math.sqrt(blocknum)-1); int y =(int)(math.random()*(int)(math.sqrt(blocknum)-1); if(

13、bombbutton x y .isbomb=true) i-; else bombbutton x y .isbomb=true ; /*重新开始*/ public void replay() nowbomb.settext(当前雷数+ +bombnum+); for(int i = 0 ; i (int)math.sqrt(blocknum) ; i+) for(int j = 0 ; j (int)math.sqrt(blocknum) ; j+) bombbutton i j .isbomb=false; bombbutton i j .isclicked=false; bombbut

14、ton i j .setenabled(true); bombbutton i j .settext(); bombbutton i j .seticon(null); startbomb(); /*是否挖完了所有的雷*/ public void iswin() int findbomb=0; /找到的地雷数 for(int i=0;i (int)math.sqrt(blocknum); i+) for(int j=0;j (int)math.sqrt(blocknum ); j+) if(bombbutton i j .isbomb = true & bombbutton i j .isri

15、ght = true) findbomb+; if( findbomb = integer.parseint(text.gettext().trim() ) joptionpane msg = new joptionpane(); joptionpane.showmessagedialog(this,您挖完了所有的雷,您胜利了!,您胜利了,2); /*计算方块周围雷数 */ public void countroundbomb() for (int i=0; i (int)math.sqrt(blocknum); i+) for (int j = 0; j = 0) & (j - 1 = 0)

16、 if (bombbuttoni - 1j - 1.isbomb = true) count += 1; /检测左上方空格是否是地雷 if ( (i - 1 = 0) if (bombbuttoni - 1 j .isbomb = true) count += 1; /检测上方空格是否为地雷 if ( (i - 1 = 0) & (j + 1 = 0) if (bombbutton i j - 1 .isbomb = true) count += 1; /检测左边是否为地雷 if ( (i = 0) & (j + 1 = 0) & (i + 1 = (int)math.sqrt(blocknu

17、m)-1) if (bombbuttoni + 1j - 1.isbomb = true) count += 1; /左下 if ( (i + 1 = (int)math.sqrt(blocknum)-1) if (bombbuttoni + 1 j .isbomb = true) count += 1; /下 if ( (j + 1 = (int)math.sqrt(blocknum)-1) & (i + 1 = 0) & (j - 1 = 0) /检测左上方空格是否是空 if (bombbuttoni - 1j - 1.isbomb = false & bombbuttoni - 1j -

18、 1.isclicked = false & bombbuttoni - 1j - 1.isright = false) bombbuttoni-1j-1.settext(bombbuttoni-1j-1.bombroundcount)+);bombbuttoni - 1j - 1.setenabled(false);bombbuttoni - 1j - 1.isclicked=true; if ( (i - 1 = 0) /检测上方空格是否为空 if (bombbuttoni-1 j.isbomb = false & bombbuttoni - 1 j .isclicked = false

19、& bombbuttoni - 1 j .isright = false) bombbuttoni-1 j.settext(bombbuttoni- 1 j .bombroundcount)+); bombbuttoni - 1 j .setenabled(false); bombbuttoni - 1 j .isclicked=true; if ( (i - 1 = 0) & (j + 1 = 0) /检测左边是否为空 if (bombbutton i j - 1.isbomb = false & bombbutton i j - 1.isclicked = false & bombbutt

20、on i j - 1.isright = false) bombbutton i j - 1.settext(bombbutton i j - 1.bombroundcount)+); bombbutton i j - 1.setenabled(false); bombbutton i j - 1.isclicked=true; if ( (i = 0) & (j + 1 = 0) & (i + 1 = (int)math.sqrt(blocknum)-1) ) /检测左下空格是否是空 if (bombbuttoni + 1j - 1.isbomb = false & bombbuttoni

21、+ 1j - 1.isclicked = false & bombbuttoni + 1j - 1.isright = false) bombbuttoni + 1j - 1.settext(bombbuttoni + 1j - 1.bombroundcount)+); bombbuttoni + 1j - 1.setenabled(false); bombbuttoni + 1j - 1.isclicked=true; if ( (i + 1 = (int)math.sqrt(blocknum)-1) ) /检测下边空格是否是空 if (bombbuttoni + 1 j .isbomb =

22、 false & bombbuttoni + 1 j .isclicked = false & bombbuttoni + 1 j .isright = false) bombbuttoni + 1 j .settext(bombbuttoni + 1 j .bombroundcount)+); bombbuttoni + 1 j .setenabled(false); bombbuttoni + 1 j .isclicked=true; if ( (j + 1 = (int)math.sqrt(blocknum)-1) ) & (i + 1 = 0) & (j - 1 = 0)/检测左上 i

23、snull(bombbutton,bombbuttoni - 1j - 1); if ( (i - 1 = 0) isnull( bombbutton,bombbuttoni - 1 j );/检测上方 if ( (i - 1 = 0) & (j + 1 = 0) isnull(bombbutton,bombbuttonij - 1);/检测左边 if ( (i = 0) & (j + 1 = 0) & (i + 1 = (int)math.sqrt(blocknum)-1) ) isnull(bombbutton,bombbuttoni + 1j - 1); /检测左下 if ( (i +

24、1 = (int)math.sqrt(blocknum)-1) ) /检测下 isnull(bombbutton,bombbuttoni + 1 j ); if ( (j + 1 = (int)math.sqrt(blocknum)-1) & (i + 1 = (int)math.sqrt(blocknum)-1) )/检测右下 isnull(bombbutton,bombbuttoni + 1j + 1); public void actionperformed(actionevent e) countroundbomb();if(bomb)e.getsource().isbomb=fals

25、e&(bomb)e.getsource().isclicked =false) (bomb)e.getsource().settext( (bomb)e.getsource().bombroundcount)+); (bomb)e.getsource().isclicked=true; (bomb)e.getsource().seticon(null); (bomb)e.getsource().setenabled(false); if(bomb)e.getsource().bombroundcount) = 0) isnull(bombbutton,(bomb)e.getsource();

26、iswin(); else if(bomb)e.getsource().isbomb = true) for(int i=0;i(int)math.sqrt(blocknum);i+) for(int j=0;j 0 & bombsource.isright = false ) bombsource.seticon(icon_flag); bombsource.isright = true; bombnum-; iswin(); nowbomb.settext(当前雷数+ +bombnum+); else if(bombsource.bombflag = 2) if( (bombnum!=0

27、) |(bombnum=0 &(bombsource.geticon()=icon_flag) )bombnum+; bombsource.seticon(icon_question); nowbomb.settext(当前雷数+ +bombnum+); else if(bombsource.bombflag = 0) bombsource.seticon(null); bombsource.isright = false; public void mouseentered(mouseevent e) public void mousereleased(mouseevent e) public void mouseexited(mouseevent

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论