java扫雷小游戏软件设计报告.docx
《java扫雷小游戏软件设计报告.docx》由会员分享,可在线阅读,更多相关《java扫雷小游戏软件设计报告.docx(68页珍藏版)》请在冰豆网上搜索。
java扫雷小游戏软件设计报告
佛山科学技术学院
《可视化编程技术》课程设计报告
计算器软件设计
学生:
吴晓莉
学号:
2011914210
年级专业:
11级教育技术学2班
指导老师:
容汝佳
学院:
教育科学学院
广东★佛山
提交日期:
2013年6月
1.前言………………………………………………………………………………2
2.概要设计…………………………………………………………………………3
2.1开发环境……………………………………………………………………3
2.2游戏功能……………………………………………………………………3
2.3界面设计……………………………………………………………………3
2.4类的框架结构图……………………………………………………………4
3.详细设计………………………………………………………………………4
3.1使用的java类的说明……………………………………………………4
3.2类的主要方法………………………………………………………………5
处理按了运算符后的计算……………………………………………5
处理输入字符…………………………………………………………6
进制的转换……………………………………………………………6
设计总体认识…………………………………………………………7
程序流程图……………………………………………………………8
4.运行结果…………………………………………………………………………8
5.测试分析…………………………………………………………………………9
5.1程序运行情况………………………………………………………………9
5.2程序异常处理………………………………………………………………9
6.源程序……………………………………………………………………………9
参考文献……………………………………………………………………………27
设计总结……………………………………………………………………………27
摘要:
该程序是一个扫雷的小游戏,具有赶紧简洁的游戏界面,玩者只要是曾经玩过扫雷的游戏,那么我这个游戏是很容易上手的。
该游戏具有三种模式:
简单模式,中等模式以及复杂模式。
游戏界面上有一个显示剩余雷数目的小方框,还有一个计时的小方框。
中间是一个“重新玩的按钮”,选择菜单栏有重新玩、可以选择模式、还能退出。
关键字:
java扫雷,游戏类,方法,事件
1前言
学生的学习压力越来越大,应当有适时的娱乐放松,,所以我在学习了java语言之后,决定用java语言编写一个简单的扫雷小游戏,可以实现简单的娱乐功能,且比普通的扫雷游戏增加一些功能。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢送的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
Java基本版本叫Java2标准版〔Java2StandardEdition,J2SE〕,它包含建立Java应用程序或者是Applet所需的应用程序编程接口〔API〕。
Java2移动版〔TheJava2MobileEdition,J2ME〕包含创建无线Java应用程序的API。
还有Java2企业版〔TheJava2Enterprise,J2EE〕是J2SE的增强版本,包含建立多层架构应用程序API。
Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。
作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。
Java语言去掉了C++语言的一些容易引起错误的特性。
Java语言的特点有:
面向对象、跨平台、安全性、多线程和图形功能强。
2概要设计
开发环境
开发平台:
MicrosoftWindowsXPProfessionalServicePack2
开发工具:
JBuilder2007+JDK_02
游戏功能
功能1:
打开游戏之后,会默认进入疯狂模式,可以通过菜单栏选择不同的游戏模式。
功能2:
游戏界面的左边有个小框,用来显示当前界面剩余雷的数目。
功能3:
游戏界面的右边有一个小框,用来显示当前游戏已经进行了的时间〔秒〕。
功能4:
游戏界面的中间有一个按钮,点击可以重新开始游戏。
功能5:
菜单栏的二级菜单有选项可以退出游戏。
图游戏面板〔疯狂模式〕
图游戏面板〔中等模式〕
图2.3.3游戏面板〔简单模式〕
类的框架结构图
BottomPanel如图.1所示
CenterPanel如图2.所示
Display如图2.所示
Field如图2.所示
Digit如图2.所示
J_sweep如图2.所示
NorthPanel如图2.4.7所示
BottomPanel
属性
privatestaticfinallongserialVersionUID
操作
publicBottomPanel()
图.1
CenterPanel
属性
privatestaticfinallongserialVersionUID=1L;
privateintcountX,countY,fieldsLeft;
privateField[][]fields;
privateDifficultydifficulty;
privateRandomrandom;
privatebooleangameOver;
privateJ_sweepminesweeper;
publicCenterPanel(J_sweepminesweeper,Difficultydifficulty)
publicvoidsetMinesweeper(Difficultydifficulty)
privatevoidsetFields()
publicvoidpaint(Graphicsg)
privatevoidsetGameOver()
privatevoidsetWon()
privatevoidperformFieldClick(intx,inty)
privatevoidperformFieldClickFlagged(intx,inty)
privatebooleanisNeighbourMinesFlagged(intx,inty)
publicvoidmousePressed(MouseEvente)
图.2
Display
属性
privatestaticfinallongserialVersionUID=1L;
privateDigitdigit0,digit1,digit2;
privateintvalue;
操作
publicDisplay(intvalue)
publicvoidsetValue(intvalue)
publicintgetValue()
publicvoidpaint(Graphicsg)
图.3
Field
属性
privateintx,y,neighbourMines;
privatebooleanclicked,mine,flag,mineClicked;
privateColorcolor1,color2,color3,color4,color5,color6,color7,color8;
操作
publicField(intx,inty)
publicbooleansetClicked()
publicbooleanisClicked()
publicvoidsetMine(booleanmine)
publicvoidincrementNeighbourMines()
publicintgetNeighbourMines()
publicintsetFlag()
publicbooleanisFlag()
publicvoidsetGameOver()
publicvoidsetWon()
publicvoidpaint(Graphicsg)
图.4
Digit
属性
privateintdigit,x,y,width,height;
privateColordarkRed;
操作
publicDigit(intdigit,intx,inty)
publicvoidsetDigit(intdigit)
publicvoidpaint(Graphicsg)
图.5
J_sweep
属性
privatestaticfinallongserialVersionUID
privateNorthPanelnorthPanel;
privateCenterPanelcenterPanel;
privateBottomPanelbottomPanel;
privateJCheckBoxMenuItemmiBeginner,miIntermediate,miExpert;
privateDifficultydifficulty;
publicJ_sweep()
publicvoidstartTime()
publicvoidstopTime()
publicvoidsetMines(intvalue)
publicvoidsetMines(intvalue,booleanreal)
publicvoidsetMainMenuDifficulty()
publicvoidactionPerformed(ActionEvente)
publicstaticvoidmain(String[]args)
图.6
NorthPanel
privatestaticfinallongserialVersionUID
privateJ_sweepminesweeper;
privateDisplaymineDisplay,timeDisplay;
privatelongbegin;
privateTimertimer;
publicNorthPanel(J_sweepminesweeper,Difficultydifficulty)
publicvoidsetMinesweeper(Difficultydifficulty)
publicvoidsetMines(intvalue,booleanreal)
publicvoidstartTime()
publicintstopTime()
publicvoidactionPerformed(ActionEvente)
图.7
3详细设计
扫雷游戏使用的Java类的说明
类名:
BottomPanel
作用:
这是设计整个界面的底部颜色
继承的父类:
JPanel类
实现的接口:
没有
publicclassBottomPanelextendsJPanel{
publicBottomPanel(){
super();
setBackground(Color.white);//这是设计整个界面的底部颜色
}
}
类名:
J_sweep
作用:
主类。
继承的父类:
JFrame类
实现的接口:
ActionListener类
publicclassJ_sweepextendsJFrameimplementsActionListener
{
privatestaticfinallongserialVersionUID=3905282627525319706L;//生成序列号,不用管它
privateNorthPanelnorthPanel;
privateCenterPanelcenterPanel;
privateBottomPanelbottomPanel;
privateJCheckBoxMenuItemmiBeginner,miIntermediate,miExpert;
privateDifficultydifficulty;
publicJ_sweep()
{
super("wxl_扫雷");//软件标题
setDefaultCloseOperation(EXIT_ON_CLOSE);//退出按钮
/*
resizeable值为true时,表示在生成的窗体可以自由改变大小;
resizeable值为false时,表示生成的窗体大小是由程序员决定的,用户不可以自由改变该窗体的大小
*/
setResizable(false);
difficulty=Difficulty.疯狂模式;//默认定义最高难度
JMenuBarmenuBar=newJMenuBar();//菜单栏控件
JMenumenu=newJMenu("文件");//菜单栏的菜单项
JMenuItemmenuItem=newJMenuItem("重新玩");//菜单栏的下拉菜单
menuItem.addActionListener(this);//给下拉框加上事件捕捉
menu.add(menuItem);//下拉框放入下拉菜单的控件
menu.addSeparator();//加个空格线
miBeginner=newJCheckBoxMenuItem("简单模式");//选择框下面一样,不解释!
miBeginner.addActionListener(this);
menu.add(miBeginner);
miIntermediate=newJCheckBoxMenuItem("中等模式");
miIntermediate.addActionListener(this);
menu.add(miIntermediate);
miExpert=newJCheckBoxMenuItem("疯狂模式",true);
miExpert.addActionListener(this);
menu.add(miExpert);
menu.addSeparator();
menuItem=newJMenuItem("退出");
menuItem.addActionListener(this);
menu.add(menuItem);
menuBar.add(menu);
setJMenuBar(menuBar);//把菜单栏加入面板
northPanel=newNorthPanel(this,Difficulty.疯狂模式);//定义一个面板
add(northPanel,BorderLayout.NORTH);//把这个面板放在上面
centerPanel=newCenterPanel(this,Difficulty.疯狂模式);
add(centerPanel,BorderLayout.CENTER);//把这个面板放在中间
/*调整此窗口的大小,以适合其子组件的首选大小和布局XJQ*/
bottomPanel=newBottomPanel();
add(bottomPanel,BorderLayout.SOUTH);
pack();
//设置窗口相对于指定组件的位置
setLocationRelativeTo(null);
//设置可视化
setVisible(true);
}
类名:
CenterPanel
作用:
设置中间面板
继承的父类:
JPanel类
实现的接口:
MouseListener类
publicclassCenterPanelextendsJPanelimplementsMouseListener
{
privatestaticfinallongserialVersionUID=1L;
privateintcountX,countY,fieldsLeft;
privateField[][]fields;//用数组定义界面的横向和纵向
privateDifficultydifficulty;//定义难度
privateRandomrandom;
privatebooleangameOver;
privateJ_sweepminesweeper;
}
类名:
Display
作用:
计时
继承的父类:
JPanel类
实现的接口:
没有
publicclassDisplayextendsJPanel
{
privatestaticfinallongserialVersionUID=1L;
privateDigitdigit0,digit1,digit2;//定义了一个表示雷的有、无、不确定的量
privateintvalue;
}
类名:
Field
作用:
定义数字的颜色
继承的父类:
没有
实现的接口:
没有
publicclassField
{
privateintx,y,neighbourMines;
privatebooleanclicked,mine,flag,mineClicked;
privateColorcolor1,color2,color3,color4,color5,color6,color7,color8;
//定义了从1——8之间,八个数字的颜色
}
类名NorthPanel
作用:
定义中间面板
继承的父类:
JPanel类
实现的接口:
ActionListener类
publicclassNorthPanelextendsJPanelimplementsActionListener
{
privateJ_sweepminesweeper;
privateDisplaymineDisplay,timeDisplay;
privatelongbegin;
privateTimertimer;
}
类名Digit
作用:
记录剩余雷的数目
继承的父类:
没有
实现的接口:
没有
publicclassDigit
{
privateintdigit,x,y,width,height;
privateColordarkRed;//定义接下来用来绘制数字的颜色
}
类的主要方法
设计整个界面的底部颜色:
publicBottomPanel(){
super();
setBackground(Color.white);
}
添加鼠标监听器:
publicCenterPanel(J_sweepminesweeper,Difficultydifficulty)
{
super();
this.setBackground(Color.LIGHT_GRAY);
addMouseListener(this);
this.minesweeper=minesweeper;
this.difficulty=difficulty;
random=newRandom();
setFields();
}
设置三种模式的界面大小:
privatevoidsetFields()
{
intmines=0;
switch(difficulty)
{
case简单模式:
countX=countY=12;//这是设置简单模式界面横竖都有12个格子
mines=15;//这是设置简单模式的雷的个数
break;
case中等模式:
countX=countY=16;//这是设置中等模式界面横竖都有16个格子
mines=40;//这是设置中等模式的雷的个数
break;
case疯狂模式:
countX=30;//这是设置疯狂模式界面横向有30个格子
countY=16;//这是设置疯狂模式界纵向都有16个格子
mines=99;//这是设置疯狂模式的雷的个数
break;
}
3.2.4绘制记录雷数目的数字
publicDigit(intdigit,intx,inty)
{
this.digit=digit;
this.x=x;
this.y=y;
width=13;
height=23;
darkRed=newColor(128,0,0);
}
publicvoidsetDigit(intdigit)
{
this.digit=digit;
}
publicvoidpaint(Graphicsg)
{
g.setColor(Color.BLACK);
g.fillRect(x,y,width,height);
switch(digit)
{
case0:
case2:
case3:
case5:
case6:
case7:
case8:
case9:
g.setColor(Color.RED);
g.drawLine(x+2,y+1,x+10,y+1);
g.drawLine(x+3,y+2,x+9,y+2);
g.drawLine(x+4,y+3,x+8,y+3);
break;
case-2:
case-1:
case1:
case4:
g.setColor(darkRed);
g.fillRect(x+3,y+1,1,1);
g.fillRect(x+5,y+1,1,1);