《Java程序设计》实训报告Word文档下载推荐.docx
《《Java程序设计》实训报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《Java程序设计》实训报告Word文档下载推荐.docx(38页珍藏版)》请在冰豆网上搜索。
3.游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。
开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再进入。
4.2、方块下落、变形功能
5.在整个俄罗斯方块游戏中,方块的设计是核心。
这里设计了一个方块类:
Square(),
用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显示、初始化新块等。
6.3、自动升级功能
7.当分数累积到一定大小时,系统将自动为玩家提高难度。
这里设置了每消除10行方块,就增加一级难度。
当难度增加的时候,方块会相应地改变颜色,以作为对玩家的提示。
8.4、游戏音乐功能
9.游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。
10.5、获取帮助功能
11.这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。
3.系统功能设计分析
1.俄罗斯方块游戏根据功能的不同,设置了如下12个类:
Square,Command,GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPanel,MyTimer,PlayMidi,WinListener,每个类的描述如下:
2.1、Square,方块类。
这个类中定义了生成方块的方法,用二维数组int[][]pattern,
存放7种方块的四种状态。
在构造方法中以随机的形式生成方块,同时提供了以下几种方法:
reset(),leftTurn(),leftMove(),rightMove(),fallDown(),assertValid(intt,ints,introw,intcol),dispBlock(ints)。
分别实现方块的重画、翻转、左移、右移、
下落、同步显示等功能。
2.2、Comman,d处理控制类。
这是一个实现ActionListener接口的类,主要处理点击按钮
事件。
类中定义了三个int型变量:
button_play,button_quit,button_pause,和一个boolean型的变量:
pause_resume,并赋值。
在GameArea类中通过事件响应,在按钮执行方法中调用其值,使用switch语句,根据不同按钮不同的值,来响应不同的事件。
2.3、GameArea游戏界面类。
GameArea继承了JFrame,是俄罗斯方块的主要游戏界面。
这个类定义了GameSetting类的gameScr对象和ImagePanel类的imagepanel对象作为游戏区域面板和控制区域面板。
在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显示。
2.4、GameSetting,游戏画布类。
这个类生成的对象将作为游戏界面的方块下落区域,画布
的设置为15行10列,当中的方格边长为30,类中还定义了一个二维数组int[][]scrArr作为屏幕数组,表示每一个方格。
游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;
如果该方格中的值为0,
则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。
此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。
单击Play按钮时,系统调用initScr()方法,初始化屏幕,将屏幕数组清零。
当满足满行删除的条件时,系统调用deleteFullLine()方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。
2.5、GameOve,r游戏结束弹出提示框类。
当游戏结束时,系统弹出提示,包括玩家分数以及询问玩家要继续游戏还是退出。
2.6、Help,帮助类。
在游戏界面,按F1键,弹出提示窗口,获取帮助。
2.7、ImagePanel,背景图片类。
这个类继承了JPanel类,用来作为游戏界面中控制区域的容器,并添加图片。
2.8、JieMian,主界面类。
这个类继承了JPanel类,作为游戏的第一个界面,也是难度选择界面。
定义了9个单选按钮,当玩家未选任何难度就按Enter时,系统会弹出一个提示框,提示玩家先选难度再进入。
2.9、MyPanel,重写MyPanel类,使Panel的四周留空间。
2.10、MyTimer,定时线程类。
类中定义了一个run()方法,用sleep()函数实现方块下落的快慢,即调节难度。
2.11>
PlayMidi,添加音乐类。
在游戏过程中添加背景音乐。
2.12、WinListener,关闭窗口类。
4.主要类的UML类图表示
1.
Square
2.
int[][]pattern
3.
intSquareType
4.
intSquareState
5.
intblockState
6.
introw,col
7.
GameSettingscr
8.
+voidreset()
9.
+voidleftTurn()
10.
+voidleftMove()
11.
+voidrightMove()
12.
+booleanfallDown()
13.
booleanassertValid(intt,ints,introw,intcol)
14.
+synchronizedvoiddispBlock(ints)
5.(Square类的UML类图表示)
15.
GameSetting
16.
intunitSize
17.
introwNum
18.
intcolumnNum
19.
intmaxAllowRowNum
20.
intSquareInitRo
21.
intSquareInitCol
22.
int[][]scrArr
23.Squareb
24.initScr()
25.+voidpaint(Graphicsg)
26.+voiddrawUnit(introw,intcol,inttype)
27.+SquaregetBlock()
28.+intgetScrArrXY(introw,intcol)
29.+intgetInitRow()
30.+intgetInitCol()
31.voiddeleteFullLine()
32.booleanisGameEnd()
33.+voidkeyPressed(KeyEvente)
三、详细设计:
1模型层设计
1)图形的产生
通过图形工厂类ShapeFactory的getShape(ShapeListenerlistener)方法随机产生方块的某
种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种
设计模式的通俗解释就是:
你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你
要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品的方法,然后
根据你传进来的产品,而决定工厂人生产什么产品,产生出来产品后,最后要返回您要的这
个东西。
随机产生一个数
一字形Z字形反Z形7字形反7形倒T形田字型
2)图形数据结购
定义一个4x4方阵,共16个小格。
用“0”和“1”来表示每个方格是绘制还是空白,
由此可以组合出多种图形,如图所示:
其中图表示为
{0,
0,
1,
1,
1,
0,
0}
其中图一表示为
0,
其中图三表示为
其中图四表示为{0,0,0,0,
0,1,0,1,
0,1,1,0,
0,0,1,0}
方块的旋转是通过绘制
4个方向的方块,在不同旋转角度显示不同方向的方块来完成
的。
所以程序要控制方块的旋转方向,只要控制显示哪副图就可以了。
本游戏是用一个三维数组int[][][]shapes=newint[][][];
作为存储方块的数据结构来保
存方块的28种状态的。
代码如下:
publicfinalstaticint[][]STYLES={//共28种状态
{0x0f00,0x4444,0x0f00,0x4444},//长条型的四种状态
{0x04e0,0x0464,0x00e4,0x04c4},//T
型的四种状态
{0x4620,0x6c00,0x4620,0x6c00},//
反'
Z'
{0x2640,0xc600,0x2640,0xc600},//'
{0x6220,0x1700,0x2230,0x0740},//'
7'
{0x6440,0x0e20,0x44c0,0x8e00},//
{0x0660,0x0660,0x0660,0x0660},//
方块的四种状态
};
/*
*构造函数
*/
publicRussiaBlock(inty,intx,intlevel,intstyle){
this.y=y;
this.x=x;
this.level=level;
moving=true;
pausing=false;
this.style=style;