《Java程序设计》实训报告.docx

上传人:b****3 文档编号:2979838 上传时间:2022-11-16 格式:DOCX 页数:38 大小:276.10KB
下载 相关 举报
《Java程序设计》实训报告.docx_第1页
第1页 / 共38页
《Java程序设计》实训报告.docx_第2页
第2页 / 共38页
《Java程序设计》实训报告.docx_第3页
第3页 / 共38页
《Java程序设计》实训报告.docx_第4页
第4页 / 共38页
《Java程序设计》实训报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

《Java程序设计》实训报告.docx

《《Java程序设计》实训报告.docx》由会员分享,可在线阅读,更多相关《《Java程序设计》实训报告.docx(38页珍藏版)》请在冰豆网上搜索。

《Java程序设计》实训报告.docx

《Java程序设计》实训报告

Java程序设计》实训报告

——《俄罗斯方块》

一、实训任务及要求:

1.1、实训任务

1.运用Java实现小游戏的开发

2.了解Java开发项目的流程

3.掌握规划,设计,开发,测试的能力

1.2、实训要求

熟悉java的编程环境J2SDK掌握Application和Applet的程序结构,并能熟练编写

和调试两类程序。

熟练使用各种常用类库。

理解JDK的事件处理机制,掌握java.awt、javax.swing,javax.swing.event中的GUI标准组件的用法,学会合理运用布局策略、综合运用各种界面元素,编程构造满足应用需要的图形工作界面。

二、需求分析:

1.课程设计的目的和意义

俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。

而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于visualbasi语言设计者而言,是个很好的锻炼机会。

2.系统功能设计

1.本系统主要设计以下几种功能

2.1、游戏难度选择功能

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,

0,

0,

1,

1,

1,

1,

0,

0,

0,

0,

0,

0,

0,

0}

其中图一表示为

{0,

0,

0,

0,

0,

1,

1,

0,

0,

1,

1,

0,

0,

0,

0,

0}

其中图三表示为

{0,

0,

0,

0,

0,

1,

0,

0,

0,

1,

1,

1,

0,

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},//'Z'

型的四种状态

{0x6220,0x1700,0x2230,0x0740},//'7'

型的四种状态

{0x6440,0x0e20,0x44c0,0x8e00},//

反'7'型的四种状态

{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;

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

当前位置:首页 > 法律文书 > 调解书

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

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