




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java语言课程设计报告题 目:扫雷小游戏设 计 者: 专业班级: 学 号: 指导教师: 2011年 12月 12日 计算机学院目录:1设计内容及要求.11.1扫雷小游戏的基本要求.11.2 需求实现的主要功能.12需求分析.12.1 扫雷区域的布局设计.12.2 雷区的设计12.3 音效的设计.13 总体设计.23.1总体功能图.23.2游戏设计流程图24 主要功能设计34.1 雷区设计流程图34.2 音效设计流程图44.3 排行榜设计流程图55 代码实现.65.1 类之间的关系图65.2 各界面图及代码:65.2.1 游戏菜单界面65.2.2 游戏登录界面(初级、中级、高级).85.2.3自定义扫雷界面.156扫雷总结187参考文献181设计内容及要求1.1扫雷小游戏的基本要求 扫雷小游戏主要采用java语言编写,适合windows xp 以下的系统,以eclipse为平台。具体要求如下: 扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。单机游戏菜单选择“初级”、“中级”和“高级”。 游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。 用户选择某个方格,单击它就行。若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。 如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。 用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。 扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。 如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。1.2 需求实现的主要功能(1) 该游戏具有计时功能,即扫完全部地雷所花费的时间。(2) 用户可以选择是否有音效。(3) 用户可以自定义级别,还可以输入任意地雷数。(4) 自动保存扫雷排行榜。2需求分析2.1 扫雷区域的布局设计系统的整体布局为:cardlayout 布局,采用菜单、按钮、面板等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。2.2 雷区的设计minearea类是javax.swing 包中jpanel容器的子类,实现了actionlistener和mouselistener接口,所创建的对象:minearea是minegame类中最重要的成员之一,作为一个容器添加到minegame窗口的中心。2.3 音效的设计 music类是java.awt包中frame的子类,通过构造音效声音方法,在mainframe主类中,通过actionlistener来监视是否已开始游戏,来决定播放计时声,之后又通过actionlistener来监视是否踩到雷和是否完成来决定,播放相应的音乐。2.4 排行榜设计logdialog是javax.swing包中jdialog对话框的子类,并实现了actionglistener接口。logdialog创建的对象dialog是mainframe类(主类)的成员之一,当用户选择查看“英雄榜”菜单项时,该对话框可见,提供了查看扫雷的最好成绩的界面。3 总体设计3.1总体功能图 图1-1 总体功能图3.2游戏设计流程图 图1-2 游戏设计流程图4 主要功能设计4.1 雷区设计流程图图1-3 雷区设计流程图4.2 音效设计流程图图1-4 音效设计流程图4.3 排行榜设计流程图图 1-5 排行榜设计流程图5 代码实现5.1 类之间的关系图图1-6 类之间的关系图5.2 各界面图及代码:5.2.1 游戏菜单界面图1-7 游戏菜单界面其主要代码为:private void setmenubar() /设置菜单项 jmenubar menubar = new jmenubar(); menubar.setborder(borderfactory.createlineborder(color.white, 2); jmenu gamemenu = new jmenu(游戏(g); jmenu helpmenu = new jmenu(帮助(h); gamemenu.setmnemonic(g); helpmenu.setmnemonic(h); 声音=new voice(); startitem = new jmenuitem(开局(n);startitem.setaccelerator(keystroke.getkeystroke(keyevent.vk_f2,0); logitem = new jmenuitem(扫雷英雄榜(t).); markcheckitem = new jcheckboxmenuitem(标记(?)(m); sounditem=new jcheckboxmenuitem(声音(s); exititem = new jmenuitem(退出(x); aboutitem = new jmenuitem(关于扫雷(a).); startitem.setmnemonic(n); exititem.setmnemonic(x); aboutitem.setmnemonic(a);aboutitem.setaccelerator(keystroke.getkeystroke(keyevent.vk_f1,0); logitem.setmnemonic(t); sounditem.setmnemonic(s);sounditem.setselected(sound); markcheckitem.setmnemonic(m); markcheckitem.setselected(markcheck); gamemenu.add(startitem); gamemenu.addseparator(); /radio group levelitem = new jradiobuttonmenuitem4; buttongroup levelgroup = new buttongroup(); levelitem0 = new jradiobuttonmenuitem(初级(b); levelitem1 = new jradiobuttonmenuitem(中级(i); levelitem2 = new jradiobuttonmenuitem(高级(e); levelitem3 = new jradiobuttonmenuitem(自定义(c).); levelitem0.setmnemonic(b); levelitem1.setmnemonic(i); levelitem2.setmnemonic(e); levelitem3.setmnemonic(c); for(int i=0;i4;i+) levelgroup.add(levelitemi); levelitemi.addactionlistener(this);gamemenu.add(levelitemi); levelitemcurrentlevel.setselected(true); gamemenu.addseparator(); gamemenu.add(markcheckitem); gamemenu.addseparator(); gamemenu.add(sounditem); gamemenu.addseparator(); gamemenu.add(logitem); gamemenu.addseparator(); gamemenu.add(exititem); helpmenu.add(aboutitem); startitem.addactionlistener(this); markcheckitem.addactionlistener(this); sounditem.addactionlistener(this); logitem.addactionlistener(this); exititem.addactionlistener(this); aboutitem.addactionlistener(this); menubar.add(gamemenu); menubar.add(helpmenu); setjmenubar(menubar); 5.2.2 游戏登录界面(初级、中级、高级) 图1-8 初级扫雷界面 图1-9 中级扫雷界面图2.0 高级扫雷界面其主要代码为:private levellog levellog;private jtextarea logarea;private jbutton resetbutton;private jbutton confirmbutton;public logdialog(jframe frame, levellog log) super(frame, 扫雷英雄榜, true);getcontentpane().setlayout(null);levellog = log;logarea = new jtextarea();logarea.seteditable(false);logarea.setbackground(uimanager.getcolor(checkbox.background);logarea.setbounds(10,10,160,60);getcontentpane().add(logarea, null); resetbutton = new jbutton(重新计分);resetbutton.setbounds(10,70,90,25);resetbutton.addactionlistener(this);getcontentpane().add(resetbutton, null);settextarea();confirmbutton = new jbutton(确定);confirmbutton.setbounds(105,70,60,25);confirmbutton.addactionlistener(this);getcontentpane().add(confirmbutton, null); setsize(180,140);setlocationrelativeto(frame); setresizable(false); show();private void settextarea() logarea.settext(初级: + levellog0.tostring() + 中级: + levellog1.tostring() + 高级: + levellog2.tostring();public void actionperformed(actionevent e) if(e.getsource()=resetbutton) for(int i=0;i=0;i-) g.drawimage(numberimagedg/divi,(bound-i)*dwidth,0,this); dg %= divi; return image; public void init() segmentpolygon = new polygon7; numberimage = new image10; /setup polygons setnumberpolygon(); setnumberimage(); public void setbackground(color bgc) bgcolor = bgc; public void setfontcolor(color fc) fontcolor = fc; public void setmaskcolor(color mkc) maskcolor = mkc; public void setdigitwidth(int w) dwidth = w; init(); public void setdigitheight(int h) dheight = h; init(); public void setdigitsize(int w, int h) dwidth = w; dheight = h; init(); private void setnumberimage() int i = 0; int j = 0; int k; graphics g; while(i10) numberimagei = new bufferedimage(15,20,bufferedimage.type_int_rgb); g = numberimagei.getgraphics(); g.setcolor(bgcolor); g.fillrect(0,0,15,20); g.setcolor(color.dark_gray); j = 0; while(jnumbersegment8.length) k = numbersegment8j; g.fillpolygon(segmentpolygonk); j+; g.setcolor(fontcolor); j = 0; while(jnumbersegmenti.length) k = numbersegmentij; g.fillpolygon(segmentpolygonk); j+; i+; public void setnumberpolygon() int mid = dheight/2+1; segmentpolygon0 = new polygon(); segmentpolygon0.addpoint(2, 1); segmentpolygon0.addpoint(dwidth-2,1); segmentpolygon0.addpoint(dwidth-5,4); segmentpolygon0.addpoint(4,4); segmentpolygon1 = new polygon(); segmentpolygon1.addpoint(dwidth-1, 1); segmentpolygon1.addpoint(dwidth-1, mid-1); segmentpolygon1.addpoint(dwidth-2, mid-1); segmentpolygon1.addpoint(dwidth-4, mid-3); segmentpolygon1.addpoint(dwidth-4, 4); segmentpolygon2 = new polygon(); segmentpolygon2.addpoint(dwidth-1, mid); segmentpolygon2.addpoint(dwidth-1, dheight-2); segmentpolygon2.addpoint(dwidth-4, dheight-5); segmentpolygon2.addpoint(dwidth-4, mid+1); segmentpolygon2.addpoint(dwidth-3, mid); segmentpolygon3 = new polygon(); segmentpolygon3.addpoint(dwidth-2, dheight-1); segmentpolygon3.addpoint(1, dheight-1); segmentpolygon3.addpoint(4, dheight-4); segmentpolygon3.addpoint(dwidth-4, dheight-4); segmentpolygon4 = new polygon(); segmentpolygon4.addpoint(1, dheight-2); segmentpolygon4.addpoint(1, mid); segmentpolygon4.addpoint(3, mid); segmentpolygon4.addpoint(4, mid+1); segmentpolygon4.addpoint(4, dheight-5); segmentpolygon5 = new polygon(); segmentpolygon5.addpoint(1, mid-1); segmentpolygon5.addpoint(1, 1); segmentpolygon5.addpoint(4, 4); segmentpolygon5.addpoint(4, mid-3); segmentpolygon5.addpoint(2, mid-1); segmentpolygon6 = new polygon(); segmentpolygon6.addpoint(3, mid-1); segmentpolygon6.addpoint(4, mid-2); segmentpolygon6.addpoint(dwidth-4, mid-2); segmentpolygon6.addpoint(dwidth-3, mid-1); segmentpolygon6.addpoint(dwidth-5, mid+1); segmentpolygon6.addpoint(4, mid+1);5.2.3自定义扫雷界面图2-1 自定义扫雷界面其主要代码为:private jtextfield widthfield;private jtextfield heightfield;private jtextfield minefield;private jbutton confirmbutton;private jbutton cancelbutton;private static levelinfo level;public customdialog(frame frame, levelinfo levelinfo) super(frame,自定义雷区,true);getcontentpane().setlayout(null);jlabel templabel = new jlabel(高度:);templabel.setbounds(10,10,30,20);heightfield = new jtextfield(+levelinfo.getxbound();heightfield.setbounds(50,10,40,20);getcontentpane().add(templabel,null);getcontentpane().add(heightfield,null);templabel = new jlabel(宽度:);templabel.setbounds(10,40,30,20);widthfield = new jtextfield(+levelinfo.getybound();widthfield.setbounds(50,40,40,20);getcontentpane().add(templabel,null);getcontentpane().add(widthfield,null);templabel = new jlabel(雷数:);templabel.setbounds(10,70,30,20);minefield = new jtextfield(+levelinfo.getminecount();minefield.setbounds(50,70,40,20);getcontentpane().add(templabel,null);getcontentpane().add(minefield,null);confirmbutton = new jbutton(确定);confirmbutton.addactionlistener(this);confirmbutton.setbounds(100,10,60,25);getcontentpane().add(confirmbutton,null);cancelbutton = new jbutton(取消);cancelbutton.addactionlistener(this);cancelbutton.setbounds(100,45,60,25);getcontentpane().add(cancelbutton,null); setsize(180,137);setlocationrelativeto(frame); setresizable(false); show();public void actionperformed(actionevent e) level = null;if(e.getsource()=confirmbutton) int x = integer.parseint(heightfield.gettext();int y = integer.parseint(widthfield.gettext();int m = integer.parseint(minefield.gettext();level = new levelinfo(x,y,m);dispose();public static levelinfo getuserlevel(jframe frame, levelinfo levelinfo) customdialog dialog = new customdialog(frame, levelinfo);return level;5.2.4扫雷排行榜界面图2-2 扫雷排行榜界面其主要代码为:public logdialog(jframe frame, levellog log) super(frame, 扫雷英雄榜, true);getcontentpane().setlayout(null);levellog = log;logarea = new jtextarea();logarea.seteditable(false);logarea.setbackground(uimanager.getcolor(checkbox.background);logarea.setbounds(10,10,160,60);getcontentpane().add(logarea, null); resetbu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《GB-T 31313-2014萤石 粒度的筛分测定》
- 产品品牌代理合同范本大全6篇
- 2025水产采购合同3篇
- 黑芝麻收购合同范本
- 电梯改造施工合同范本
- 保养合同范本模板
- 私人墙绘合同范本
- 建材供应合同范本简易
- 冷库货物装卸合同范本
- 商业房产托管合同范本
- 《植物细胞》教学课件
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 医学教材 肠内营养相关性腹泻的预防处置课件
- 新人教版七年级上册英语全册课件(2024年新版教材)
- 2024-2030年中国纳米烧结银市场深度调查与发展战略规划分析研究报告
- 2024年安徽省体育彩票管理中心招聘23人(亳州地区招2人)历年(高频重点提升专题训练)共500题附带答案详解
- JT-T-1223-2018落水人员主动报警定位终端技术要求
- 国家质量监测四年级学生数学考试试题
- 2024年河南省成考(专升本)生理学护理学专业考试真题含解析
- 《数字艺术设计概论》课件
- 心脏起搏器学习课件
评论
0/150
提交评论