java课程设计 SWT 扫雷功能图类图类详细说明测试.docx

上传人:b****6 文档编号:8893648 上传时间:2023-02-02 格式:DOCX 页数:53 大小:935.04KB
下载 相关 举报
java课程设计 SWT 扫雷功能图类图类详细说明测试.docx_第1页
第1页 / 共53页
java课程设计 SWT 扫雷功能图类图类详细说明测试.docx_第2页
第2页 / 共53页
java课程设计 SWT 扫雷功能图类图类详细说明测试.docx_第3页
第3页 / 共53页
java课程设计 SWT 扫雷功能图类图类详细说明测试.docx_第4页
第4页 / 共53页
java课程设计 SWT 扫雷功能图类图类详细说明测试.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

java课程设计 SWT 扫雷功能图类图类详细说明测试.docx

《java课程设计 SWT 扫雷功能图类图类详细说明测试.docx》由会员分享,可在线阅读,更多相关《java课程设计 SWT 扫雷功能图类图类详细说明测试.docx(53页珍藏版)》请在冰豆网上搜索。

java课程设计 SWT 扫雷功能图类图类详细说明测试.docx

java课程设计SWT扫雷功能图类图类详细说明测试

《面向对象程序设计》

课程设计报告

 

题目:

扫雷游戏

院(系):

计算机与电子系

专业班级:

计算机科学与技术0901班

*******

学号:

***********

******

 

2012年6月4日至2012年6月15日

 

华中科技大学武昌分校制

面向对象程序设计课程设计任务书

一、设计(调查报告/论文)题目

扫雷游戏

二、设计(调查报告/论文)主要内容

内容:

扫雷游戏分为初级,中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。

游戏菜单可以选择“初级”,“中级”和“高级”或“查看英雄榜”。

基本功能与要求:

1.选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块启动计时器。

2.用户要揭开某个方块,可单击它。

若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示数字,该数字代表方块周围的八个方块中共有多少颗雷。

3.如果用户认为某个方块下埋有地雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。

用户每标记出一个扫雷标记(无论用户标记是否正确),程序将显示剩余雷数减少一个。

4.扫雷胜利后(用时最少者),程序弹出保存成绩对话框。

三、原始资料

1.《面向对象程序设计课程设计》指导书

2.耿祥义.JAVA大学实用教程.北京:

清华大学出版社,2009.

四、要求的设计(调查/论文)成果

1.课程设计报告

2.课程设计软件

五、进程安排

布置任务,查找资料、需求分析1天

总体设计1天

详细设计1.5天

编制源程序实现3.5天

测试与修改1天

撰写课设报告2天

六、主要参考资料

[1]张广彬.Java课程设计案例精编(第二版).北京:

清华大学出版社,2011.

[2]耿祥义.Java课程设计(第二版).北京:

清华大学出版社,2008.

[3]耿祥义.JAVA大学实用教程.北京:

清华大学出版社,2009.

[4]邹林达.陈国君Java2程序设计基础.北京:

清华大学出版社,2010.

[5]邹林达.Java2程序设计基础实验指导.北京:

清华大学,2010.

 

指导教师(签名):

 

20年月日

 

1需求与总体设计……………………………………………………………………………1

1.1需求分析…………………………………………………………………………1

1.2功能图样…………………………………………………………………………1

1.3总体设计…………………………………………………………………………2

1.4类图设计…………………………………………………………………………2

2详细设计……………………………………………………………………4

2.1总体阐述…………………………………………………………………………………4

2.2ImageSource类………………………………………………………………………4

2.3MouseLeftListener类…………………………………………………………………5

2.4MouseRightListener类……………………………………………………………………5

2.5CountT类…………………………………………………………………………………6

2.6fuzhumianbanComposite类…………………………………………………………………7

2.7hero类………………………………………………………………………………………8

2.8mainshell类……………………………………………………………………………9

2.9MenuShell类…………………………………………………………………………10

2.10mineborder类……………………………………………………………………………11

3编码实现…………………………………………………………………………………13

3.1minesweeper.action包…………………………………………………………………13

3.2minesweeper.images包……………………………………………………………………22

3.3minesweeper.swt包……………………………………………………………………22

4系统测试………………………………………………………………………………………44

4.1程序主界面…………………………………………………………………………………44

4.2游戏难度测试………………………………………………………………………………44

4.3英雄榜测试…………………………………………………………………………………46

4.4游戏失败测试………………………………………………………………………………47

4.4游戏获胜测试………………………………………………………………………………47

总结……………………………………………………………………………………50

1需求与总体设计

1.1需求分析

1.1.1课程设计目的

本次课程设计的主要目的是为了通过具体的程序加深对java语言的掌握,提高自己的编程水平。

选择的题目为扫雷游戏,这是一个综合性的题目,可以对java中的各项功能有更好的理解和使用,同时也为以后的工作打下一定基础。

1.1.2应用平台

系统平台:

WindowsXP/VISTA/7

编程语言:

JAVA

开发平台:

Eclipse

图形化界面:

SWT

1.1.3程序描述和功能需求分析

扫雷游戏分为初级,中级和高级三个级别,扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。

游戏菜单可以选择“初级”,“中级”和“高级”或“查看英雄榜”。

基本功能与要求:

(1)选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中的任何一个方块启动计时器。

(2)用户要揭开某个方块,可单击它。

若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示数字,该数字代表方块周围的八个方块中共有多少颗雷。

(3)如果用户认为某个方块下埋有地雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。

用户每标记出一个扫雷标记(无论用户标记是否正确),程序将显示剩余雷数减少一个。

(4)扫雷胜利后(用时最少者),程序弹出保存成绩对话框。

 

1.2功能图样

图1-1功能图样

1.3总体设计

扫雷游戏由包minesweeper.swt中的主类mainshell创建,它调用该包其他类来完成该游戏的各个模块的创建:

调用fuzhumianbanComposite类创建辅助面板,调用MenuShell类来创建菜单栏,调用mineborder来创建扫雷区。

被调用的3个类又有自己的监听器,而当用到鼠标监听器时,则调用包minesweeper.action里面的MouseLeftListener和MouseRightListener来创建鼠标左击右击监听器。

 

1.4类图设计

图1-2类图设计

 

2详细设计

2.1总体阐述

在Java图形界面中创建扫雷游戏的实现方法,需要SWT中的Widgets组件,Events组件,Images组件,Layout组件。

SWT(StandardWidgetToolkit)StandardWidgetToolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的。

SWT提供了一种高效的创建图像化用户界面的能力,也是Eclipse平台的UI组件之一。

它相比于Swing,速度相对比较快,而且因为使用了与操作系统相同的渲染方式,界面上与操作模式上比较接近操作系统的风格。

对于跨平台性的问题,SWT是通过不同的底层支持库来解决的。

2.2ImageSource类

详细类图:

ImageSource类是用于初始化各Image,便于图片更改,其详细类图信息如图所示:

图2-1ImageSource详细类图

(1)成员变量

image是Image[9]型,用于初始化扫雷个数的0-8的图片。

d是Display类型,用于接受传入构造函数的Display

mine,explosion,flag,wrong,digbome,xiaolian,app,background都是Image类型,用于存储对应的应用程序所需的图片

(2)方法

ImageSource(Displaydisplay)是该类的构造函数,带入的display是传入自身成员变量

2.3MouseLeftListener类

详细类图:

MouseLeftListener类是创建鼠标左键点击触发的事件,其详细类图信息如图所示:

图2-2MouseLeftListener详细类图

(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)是该类的构造函数,带入的Button[][]是用来初始化成员变量Button_Game的,两个int参数分别先后初始化了Bome_I和Bome_J。

sweep(int,int)是用于扫开固定坐标地雷的函数,传入坐标(x,y)值,翻开指定坐标的button的内容。

mouseUp(MouseEvent)是该监听器的重载函数,用于实现点击的事件,即扫雷。

2.4MouseRightListener类

详细类图:

MouseRightListener类是创建鼠标右键点击触发的事件,其详细类图信息如图所示:

图2-3MouseRightListener详细类图

(1)成员变量

Button_Game是Button[][]型,用于接收构造函数传入的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)是该监听器的重载函数,用于实现点击的事件。

即设立flag和消去flag。

2.5CountT类

详细类图:

CountT类是创建TimerTask任务,它继承了java.util.TimerTask类,定期更新mineborder.CountTime时间,并且把传入构造函数的CLabel更新显示当前时间,其详细类图信息如图所示:

图2-4CountT详细类图

(1)成员变量

cl是CLabel类的实例,用于接受构造函数传入的CLabel。

(2)方法

CountT(CLabel)是该类的构造函数,传入CLabel类型给成员变量cl,并且调用run()方法来异步更新cl显示的内容。

2.6fuzhumianbanComposite类

详细类图:

fuzhumianbanComposite类是在主程序上方创建一个辅助的面板,它继承了Composite类,便于用户操作,它创建出一个叫l1的label显示剩余雷数,一个叫l2的label显示已用时间,一个叫startbottom的button用来重新开始,其详细类图信息如图所示:

图2-5fuzhumianbanComposite详细类图

(1)成员变量

l1,l2是CLabel类的实例,l1用来显示剩余雷数,l2用来显示已用时间

startbottom是Button型,用来给用户点击,从而重新开启一局

FirstClickFlag是Boolean类型,默认为True,用来标记是否为鼠标第一次点击

(2)方法

fuzhumianbanComposite(Composite)是该类的构造函数,传入Composite来初始化父类,且父类样式为SWT.BORDER|SWT.TRANSPARENT。

newSelectionAdapter(){...}是该成员变量startbottom的监听器,widgetSelected(SelectionEvent)是该按钮的启动监听器事件,当该按钮被点击,则重新开始新的一轮。

2.7hero类

详细类图:

hero类是创建英雄榜类,有查看英雄榜和更新最高得分的功能,其详细类图信息如图所示:

图2-6hero详细类图

(1)成员变量

lb12,lb22,lb32是Label的实例,用于显示初级,中级,高级难度的历史最高纪录

strbegin,strmidd,strhard是String型,用来存储各等级难度的历史最高纪录

dg是Shell型,用于接受构造函数时传入该对话框所在的Shell

highscore是int型,用于保存当前难度的最高分数。

(2)方法

hero()是该类的构造函数,读取文件highscore.txt里面的记录来初始化strbegin,strmidd,strhard这3个字符串。

herodiag(Shell)传入父Shell,用于创建英雄榜对话框,该对话框用6个Label,每两个为一对,用于显示提示信息和最高记录;一个Button,用于离开该对话框,该button有监听器newSelectionListener(){...},用来监听鼠标点击。

scorecompare()是判断当前获胜分数是否能刷新英雄榜上的历史最高分数。

sethighscore()用于设置最高分数,它有一个Label用于显示提示信息,一个Text用于记录玩家姓名。

gethighscore(String)传入String记录,过滤姓名等信息,提取出他的分数

2.8mainshell类

详细类图:

mainshell类是创建主窗口(调用MenuShell创建Menu,调用mineborder创建扫雷面板,调用fuzhumianbanComposite创建辅助面板),其详细类图信息如图所示:

图2-7mainshell详细类图

(1)成员变量

d是Display型,用于存储创建的Display,便于其他类调用。

s是Shell型,用于存储创建的Shell,便于其他类调用。

fuzu是fuzhumianbanComposite类的实例,用于创建辅助面板。

mb是mineborder类的实例,用于创建扫雷区

gd是GridData类的实例,用于设置布局

(2)方法

main(String[])是整个程序的方法,该方法创建主Shell,并调用其他类。

它有3个监听器,用于调正游戏难度。

2.9MenuShell类

详细类图:

MenuShell类是用于创建菜单栏,拥有游戏和帮组两大主菜单,其详细类图信息如图所示:

图2-8MenuShell详细类图

(1)成员变量

s是Shell型,用于接收构造函数传入的父Shell。

easyradioItem,middleradioItem,hardradioItem是MenuItem型,并且样式都为SWT.RADIO,一次只能选取一个难度

(2)方法

MenuShell(Shell)是该类的构造函数,构造出菜单栏,他有2个子菜单:

游戏和帮助。

游戏上有选项:

开局,初级,中级,高级,英雄榜,退出。

帮助上有选项:

使用帮助和关于扫雷。

每个选项都有其对应的选择监听器。

2.10mineborder类

详细类图:

mineborder类是用于扫雷区,其详细类图信息如图所示:

图2-9mineborder详细类图

(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,用来辅助判断玩家是否获胜的条件,一旦玩家中途失败,则设置为false

(2)方法

mineborder(Composite,int,int,int,int)是该类的构造函数,带入的Composite是父容器,此处为父Shell,后面的int依次为样式,行数,列数,雷数

reset()用于重新开始游戏。

 

3编码实现

3.1minesweeper.action包

(1)ImageSource类

packageminesweeper.action;

importorg.eclipse.swt.graphics.*;

importorg.eclipse.swt.widgets.*;

//该类用于初始化各Image,便于图片更改

publicclassImageSource{

privateDisplayd;

publicImage[]image=newImage[9];

publicImageSource(Displaydisplay){//构造函数,用于初始化0-8,这九个图片的image

this.d=display;

for(inti=0;i<9;i++)

image[i]=newImage(d,"bin\\minesweeper\\images\\"+i+".gif");

}

//定义各种image,便于其他类调用

publicImagemine=newImage(d,"bin\\minesweeper\\images\\mine.gif");

publicImageexplosion=newImage(d,"bin\\minesweeper\\images\\explosion.gif");

publicImageflag=newImage(d,"bin\\minesweeper\\images\\flag.gif");

publicImagewrong=newImage(d,"bin\\minesweeper\\images\\wrong.gif");

publicImagedigbome=newImage(d,"bin\\minesweeper\\images\\digbome.gif");

publicImagexiaolian=newImage(d,"bin\\minesweeper\\images\\xiaolian.ico");

publicImageapp=newImage(d,"bin\\minesweeper\\images\\app.png");

publicImagebackground=newImage(d,"bin\\minesweeper\\images\\background.jpg");

}

(2)MouseLeftListener类

packageminesweeper.action;

importjava.io.IOException;

importjava.util.TimerTask;

importminesweeper.swt.*;

importorg.eclipse.swt.SWT;

importorg.eclipse.swt.widgets.*;

importorg.eclipse.swt.events.*;

//创建左键点击触发的MouseAdapter

publicclassMouseLeftListenerextendsMouseAdapter{

privateButton[][]Button_Game;

privateint[][]Map_Bomb;

privateintBomb_I,Bomb_J;

privateImageSourceimagesource=newImageSource(mainshell.d);

//构造函数,用于初始化参数,便于后续进行操作

publicMouseLeftListener(Button[][]Button_Game,int[][]Map_Bomb,intBomb_I,intBomb_J){

this.Button_Game=Button_Game;

this.Map_Bomb=Map_Bomb;

this.Bomb_I=Bomb_I;

this.Bomb_J=Bomb_J;

}

//sweep函数,传入(x,y)坐标,翻开该坐标button的内容

publicvoidsweep(intX,intY){

if(Button_Game[X][Y].getImage()==null){

if(Map_Bomb[X][Y]==9){//如果选择的是雷

Button_Game[X][Y].setImage(imagesource.mine);//设置为雷的图片

}

else{

Button_Game[X][Y].setImage(imagesource.image[Map_Bomb[X][Y]]);//设置成相应数字的图片

}

if(Map_Bomb[X][Y]==0)//如果该格子周围什么都没有,挖开周围所有

{

if(Y-1>=0)

{

sweep(X,Y-1);//如果该雷的左边存在,那么对他调用sweep函数扫雷

if(X+1

sweep(X+1,Y-1);//如果该雷的左下方存在,那么对他调用sweep函数扫雷

if(X-1>0)

sweep(X-1,Y-1);//如果该雷的左上方存在,那么对他调用sweep函数扫雷

}

if(X-1>=0)

sweep(X-1,Y);//如果该雷的上方存在,那么对他调用sweep函数扫雷

if(X+1

sweep(X+1,Y);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1