1、java课程设计 SWT 扫雷功能图类图类详细说明测试 面向对象程序设计课程设计报告题 目: 扫雷游戏 院 (系): 计算机与电子系 专业班级: 计算机科学与技术0901班 * * 学 号: * * * 20 12 年 6 月 4 日至20 12 年 6 月 15 日华中科技大学武昌分校制 面向对象程序设计 课程设计任务书一、设计(调查报告/论文)题目 扫雷游戏二、设计(调查报告/论文)主要内容内容:扫雷游戏分为初级,中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。游戏菜单可以选择“初级”,“中级”和“高级”或“查看英雄榜”。 基本功能与要求:1.选择级别后
2、将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块启动计时器。2. 用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示数字,该数字代表方块周围的八个方块中共有多少颗雷。3如果用户认为某个方块下埋有地雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户标记是否正确),程序将显示剩余雷数减少一个。4扫雷胜利后(用时最少者),程序弹出保存成绩对话框。三、原始资料1.面向对象程序设计课程设计指导书2. 耿祥义JAVA大学实用教程北京:清华大学出版社,2009四、要求的设计(调查/论文)成果
3、1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料1 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011. 2 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA大学实用教程北京:清华大学出版社,20094 邹林达陈国君 Java2程序设计基础北京:清华大学出版社,20105 邹林达Java2程序设计基础实验指导北京:清华大学,2010指导教师(签名): 20 年 月 日1需求与总体设计11.1需求分析11
4、.2功能图样11.3总体设计21.4类图设计22详细设计42.1总体阐述42.2 ImageSource类42.3 MouseLeftListener类52.4 MouseRightListener类52.5 CountT类62.6 fuzhumianbanComposite类72.7 hero类82.8 mainshell类92.9 MenuShell类102.10 mineborder类113编码实现133.1 minesweeper.action包133.2 minesweeper.images包223.3 minesweeper.swt包224系统测试444.1程序主界面444.2游戏
5、难度测试444.3英雄榜测试464.4游戏失败测试474.4游戏获胜测试47总结501需求与总体设计1.1需求分析1.1.1课程设计目的 本次课程设计的主要目的是为了通过具体的程序加深对java语言的掌握,提高自己的编程水平。选择的题目为扫雷游戏,这是一个综合性的题目,可以对java中的各项功能有更好的理解和使用,同时也为以后的工作打下一定基础。1.1.2应用平台系统平台:Windows XP/VISTA/7 编程语言:JAVA 开发平台:Eclipse 图形化界面:SWT1.1.3 程序描述和功能需求分析扫雷游戏分为初级,中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷
6、且用时最少者。游戏菜单可以选择“初级”,“中级”和“高级”或“查看英雄榜”。基本功能与要求:(1)选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块启动计时器。(2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示数字,该数字代表方块周围的八个方块中共有多少颗雷。(3)如果用户认为某个方块下埋有地雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户标记是否正确),程序将显示剩余雷数减少一个。(4)扫雷胜利后(用时最少者),程序弹出保存成绩对话框。1.2功能图样图1-1功
7、能图样1.3总体设计扫雷游戏由包minesweeper.swt中的主类mainshell创建,它调用该包其他类来完成该游戏的各个模块的创建:调用fuzhumianbanComposite类创建辅助面板,调用MenuShell类来创建菜单栏,调用mineborder来创建扫雷区。被调用的3个类又有自己的监听器,而当用到鼠标监听器时,则调用包minesweeper.action里面的MouseLeftListener和MouseRightListener来创建鼠标左击右击监听器。1.4类图设计图1-2类图设计2详细设计2.1 总体阐述在Java 图形界面中创建扫雷游戏的实现方法,需要SWT中的Wi
8、dgets组件,Events组件,Images组件,Layout组件。SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的。SWT提供了一种高效的创建图像化用户界面的能力,也是 Eclipse 平台的 UI 组件之一。它相比于 Swing,速度相对比较快,而且因为使用了与操作系统相同的渲染方式,界面上与操作模式上比较接近操作系统的风格。对于跨平台性的问题,SWT是通过不同的底层支持库来解决的。2.2 ImageSource类详细类图
9、:ImageSource类是用于初始化各Image,便于图片更改,其详细类图信息如图所示:图2-1 ImageSource详细类图(1)成员变量image是Image9型,用于初始化扫雷个数的0-8的图片。d是Display类型,用于接受传入构造函数的Displaymine,explosion,flag,wrong,digbome,xiaolian,app,background都是Image类型,用于存储对应的应用程序所需的图片(2) 方法 ImageSource(Display display)是该类的构造函数,带入的display是传入自身成员变量2.3 MouseLeftListener
10、类详细类图:MouseLeftListener类是创建鼠标左键点击触发的事件,其详细类图信息如图所示:图2-2 MouseLeftListener详细类图(1)成员变量Button_Game是Button型,用于接收构造函数传入的Button数组Map_Bomb是Int型,用于接收构造函数传入的Int数组Bomb_I和Bomb_J是Int型,Bomb_I为地雷区有多少行,Bome_J为地雷区有多少列。在构造函数初始化。Imagesource是ImageSource类的实例,便于函数调用初始化后的图片(2) 方法 MouseLeftListener(Button, int, int, int)是
11、该类的构造函数,带入的Button是用来初始化成员变量Button_Game的,两个int参数分别先后初始化了Bome_I和Bome_J。sweep(int, int)是用于扫开固定坐标地雷的函数,传入坐标(x,y)值,翻开指定坐标的button的内容。 mouseUp(MouseEvent)是该监听器的重载函数,用于实现点击的事件,即扫雷。2.4 MouseRightListener类详细类图:MouseRightListener类是创建鼠标右键点击触发的事件,其详细类图信息如图所示:图2-3 MouseRightListener详细类图(1) 成员变量Button_Game是Button型
12、,用于接收构造函数传入的Button数组Map_Bomb是Int型,用于接收构造函数传入的Int数组Bomb_I和Bomb_J是Int型,Bomb_I为地雷区有多少行,Bome_J为地雷区有多少列。在构造函数初始化。Imagesource是ImageSource类的实例,便于函数调用初始化后的图片(2) 方法 MouseRightListener(Button, int, int, int)是该类的构造函数,带入的Button是用来初始化成员变量Button_Game的,两个int参数分别先后初始化了Bome_I和Bome_J。mouseUp(MouseEvent)是该监听器的重载函数,用于实
13、现点击的事件。即设立flag和消去flag。2.5 CountT类详细类图:CountT类是创建TimerTask任务,它继承了java.util.TimerTask类,定期更新mineborder.CountTime时间,并且把传入构造函数的CLabel更新显示当前时间,其详细类图信息如图所示:图2-4 CountT详细类图(1) 成员变量cl是CLabel类的实例,用于接受构造函数传入的CLabel。(2) 方法 CountT(CLabel)是该类的构造函数,传入CLabel类型给成员变量cl,并且调用run()方法来异步更新cl显示的内容。2.6 fuzhumianbanComposit
14、e类详细类图:fuzhumianbanComposite类是在主程序上方创建一个辅助的面板,它继承了Composite类,便于用户操作,它创建出一个叫l1的label显示剩余雷数,一个叫l2的label显示已用时间,一个叫startbottom的button用来重新开始,其详细类图信息如图所示:图2-5 fuzhumianbanComposite详细类图(1) 成员变量l1,l2是CLabel类的实例,l1用来显示剩余雷数, l2用来显示已用时间startbottom是Button型,用来给用户点击,从而重新开启一局FirstClickFlag是Boolean类型,默认为True,用来标记是否
15、为鼠标第一次点击(2) 方法 fuzhumianbanComposite(Composite)是该类的构造函数,传入Composite来初始化父类,且父类样式为SWT.BORDER|SWT.TRANSPARENT。new SelectionAdapter() .是该成员变量startbottom的监听器,widgetSelected(SelectionEvent)是该按钮的启动监听器事件,当该按钮被点击,则重新开始新的一轮。2.7 hero类详细类图:hero类是创建英雄榜类,有查看英雄榜和更新最高得分的功能,其详细类图信息如图所示:图2-6 hero详细类图(1) 成员变量lb12,lb22
16、,lb32是Label的实例,用于显示初级,中级,高级难度的历史最高纪录strbegin,strmidd,strhard是String型,用来存储各等级难度的历史最高纪录dg是Shell型,用于接受构造函数时传入该对话框所在的Shellhighscore是int型,用于保存当前难度的最高分数。(2) 方法 hero()是该类的构造函数,读取文件highscore.txt里面的记录来初始化strbegin,strmidd,strhard这3个字符串。 herodiag(Shell)传入父Shell,用于创建英雄榜对话框,该对话框用6个Label,每两个为一对,用于显示提示信息和最高记录;一个Bu
17、tton,用于离开该对话框,该button有监听器new SelectionListener() .,用来监听鼠标点击。 scorecompare()是判断当前获胜分数是否能刷新英雄榜上的历史最高分数。sethighscore()用于设置最高分数,它有一个Label用于显示提示信息,一个Text用于记录玩家姓名。 gethighscore(String)传入String记录,过滤姓名等信息,提取出他的分数2.8 mainshell类详细类图:mainshell类是创建主窗口(调用MenuShell创建Menu,调用mineborder创建扫雷面板,调用fuzhumianbanComposite
18、创建辅助面板),其详细类图信息如图所示:图2-7 mainshell详细类图(1) 成员变量d是Display型,用于存储创建的Display,便于其他类调用。s是Shell型,用于存储创建的Shell,便于其他类调用。fuzu是fuzhumianbanComposite类的实例,用于创建辅助面板。mb是mineborder类的实例,用于创建扫雷区gd是GridData类的实例,用于设置布局(2) 方法 main(String)是整个程序的方法,该方法创建主Shell,并调用其他类。它有3个监听器,用于调正游戏难度。2.9 MenuShell类详细类图:MenuShell类是用于创建菜单栏,拥
19、有游戏和帮组两大主菜单,其详细类图信息如图所示:图2-8 MenuShell详细类图(1) 成员变量s是Shell型,用于接收构造函数传入的父Shell。easyradioItem,middleradioItem,hardradioItem是MenuItem型,并且样式都为SWT.RADIO,一次只能选取一个难度(2) 方法 MenuShell(Shell)是该类的构造函数,构造出菜单栏,他有2个子菜单:游戏和帮助。游戏上有选项:开局,初级,中级,高级,英雄榜,退出。帮助上有选项:使用帮助和关于扫雷。每个选项都有其对应的选择监听器。2.10 mineborder类详细类图:mineborder
20、类是用于扫雷区,其详细类图信息如图所示:图2-9 mineborder详细类图(1) 成员变量Button_Game是Button型,用于创建扫雷区Map_Bomb是Int型,用于创建扫雷区的地雷分布图Bomb_I和Bomb_J是Int型,Bomb_I为地雷区有多少行,Bome_J为地雷区有多少列。mines,Tag_Num,CountTime都是int型,mines用来定义雷数,Tag_Num用来定义flag可用数目,CountTime用来计时timer是Timer类型,用来定义计时器。Success是boolean类型,默认为true,用来辅助判断玩家是否获胜的条件,一旦玩家中途失败,则设
21、置为false(2) 方法 mineborder(Composite, int, int, int, int)是该类的构造函数,带入的Composite是父容器,此处为父Shell,后面的int依次为样式,行数,列数,雷数 reset()用于重新开始游戏。3编码实现3.1 minesweeper.action包(1) ImageSource类 package minesweeper.action;import org.eclipse.swt.graphics.*;import org.eclipse.swt.widgets.*;/该类用于初始化各Image,便于图片更改public class
22、 ImageSource private Display d; public Image image=new Image9; public ImageSource(Display display) /构造函数,用于初始化0-8,这九个图片的image this.d=display; for(int i=0;i=0) sweep(X,Y-1); /如果该雷的左边存在,那么对他调用sweep函数扫雷 if(X+10) sweep(X-1,Y-1); /如果该雷的左上方存在,那么对他调用sweep函数扫雷 if(X-1=0) sweep(X-1,Y); /如果该雷的上方存在,那么对他调用sweep函数扫雷 if(X+1Bomb_I) sweep(X+1,Y);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1