《Java程序设计》实训报告——俄罗斯方块文档格式.docx

上传人:wj 文档编号:347746 上传时间:2023-04-28 格式:DOCX 页数:35 大小:71.44KB
下载 相关 举报
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第1页
第1页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第2页
第2页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第3页
第3页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第4页
第4页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第5页
第5页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第6页
第6页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第7页
第7页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第8页
第8页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第9页
第9页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第10页
第10页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第11页
第11页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第12页
第12页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第13页
第13页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第14页
第14页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第15页
第15页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第16页
第16页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第17页
第17页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第18页
第18页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第19页
第19页 / 共35页
《Java程序设计》实训报告——俄罗斯方块文档格式.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《Java程序设计》实训报告——俄罗斯方块文档格式.docx

《《Java程序设计》实训报告——俄罗斯方块文档格式.docx》由会员分享,可在线阅读,更多相关《《Java程序设计》实训报告——俄罗斯方块文档格式.docx(35页珍藏版)》请在冰点文库上搜索。

《Java程序设计》实训报告——俄罗斯方块文档格式.docx

分别实现方块的重画、翻转、左移、右移、下落、同步显示等功能。

2.2、Command,处理控制类。

这是一个实现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、GameOver,游戏结束弹出提示框类。

当游戏结束时,系统弹出提示,包括玩家分数以及询问玩家要继续游戏还是退出。

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)方法随机产生方块的某种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:

你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品的方法,然后根据你传进来的产品,而决定工厂人生产什么产品,产生出来产品后,最后要返回您要的这个东西。

随机产生一个数

随机数

1

2

3

4

5

6

7

一字形

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,1,0,0,

0,1,1,1,

其中图四表示为{0,0,0,0,

0,1,0,1,

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;

canvas=GameCanvas.getCanvasInstance();

boxes=newRussiaBox[ROWS][COLS];

intkey=0x8000;

for(inti=0;

i<

boxes.length;

i++)

for(intj=0;

j<

boxes[i].length;

j++){booleanisColor=((style&

key)!

=0);

boxes[i][j]=newRussiaBox(isColor);

key>

>

=1;

}display();

}

以下这段代码是3个子模块的代码,通过实例化按钮,标签,文本域,图形面板等,用

add方法进行添加等,具体解释在代码中有体现

publicControlPanel(finalRussiaBlocksGamegame){this.game=game;

*图形界面部分

setLayout(newGridLayout(3,1,0,4));

//设置控制面板布局方式为网格

状布局

tipBlockPanel=newTipBlockPanel();

//新建一个图形界面面板中的子面

tipPanel=newJPanel(newBorderLayout());

//设置为位置布局方式tipPanel.add(newJLabel("

NextBlock:

"

),BorderLayout.NORTH);

//添加

新的标签在子面板中,设置布局在北部

tipPanel.add(tipBlockPanel, BorderLayout.CENTER);

// 添 加

tipblockpanel面板在子面板中

tipPanel.setBorder(border);

//显示统计面板模块

InfoPanel=newJPanel(newGridLayout(4,1,0,0));

//新建一个显示面

//设置4行1列

的网格状布局

levelField=newJTextField("

+RussiaBlocksGame.DEFAULT_LEVEL);

levelField.setEditable(false);

scoreField=newJTextField("

0"

);

//新建一个得分区域,并设置其值为0scoreField.setEditable(false);

//文本区域不能被编辑InfoPanel.add(newJLabel("

当前等级:

));

//信息面板添加新的标签内容

为“当前等级”

InfoPanel.add(levelField);

//信息面板添加等级区域InfoPanel.add(newJLabel("

当前分数:

为“当前分数”

InfoPanel.add(scoreField);

//信息面板添加得分区域

InfoPanel.setBorder(border);

//显示功能按钮面板模块

buttonPanel=newJPanel(newGridLayout(3,1,0,0));

//新建一个按钮

面板

//设置布局

方式为网格状布局

//为3行1

playButton=newJButton("

开始"

//添加开始按钮pauseButton=newJButton("

暂停"

//添加暂停按钮stopButton=newJButton("

停止"

//添加停止按钮

turnHarderButton=newJButton("

难一级"

//添加难一级按钮按钮功能

未实现

turnEasilyButton=newJButton("

简单一级"

//添加简单一级按钮按钮

功能未实现

//按钮面板添加功能按钮buttonPanel.add(playButton);

//按钮面板添加开始按钮buttonPanel.add(pauseButton);

//按钮面板添加暂停按钮buttonPanel.add(stopButton);

//按钮面板添加停止按钮

//buttonPanel.add(turnHarderButton);

添加难一级按钮该功能未实现

//buttonPanel.add(turnEasilyButton);

添加简单一级按钮该功能未实现

buttonPanel.setBorder(border);

addKeyListener(newControlKeyListener());

//添加键盘监听事件add(tipPanel);

add(InfoPanel);

add(buttonPanel);

四、运行调试与分析讨论:

4.1游戏演示

4.1游戏界面演示,如7

图7

4.2开始和结束控制菜单,如图8

图8

4.3游戏窗口控制菜单,如图9

图9

4.2系统测试

4.2.1快捷键测试

1.键盘按“Ctrl+N”效果:

游戏开始结果:

正常

2.键盘按“Ctrl+E”效果:

游戏退出

结果:

4.2.2右侧快捷按钮测试1.点击“开始”按钮效果:

游戏开始

2.点击“暂停”按钮

效果:

游戏暂停结果:

3.点击“停止”按钮效果:

游戏重置

结果正常

4.2.3界面菜单选项的功能测试

1.“游戏”菜单的测试

点击“游戏”à

“新游戏”

游戏正常开始结果:

2.点击“游戏”à

“Exit”

游戏退出结果:

3.“窗口样式”菜单测试

1.点击“窗口样式”à

“Windows”

切换为Wingdows模式结果:

2.点击“窗口样式”à

“Motif”

切换为Motif样式结果:

3.点击“窗口样式”à

“Mentel”效果:

切换为Mentel模式

4.2.4按键事件的功能测试

(1)方块移动测试

游戏过程中,点击“左、右、下”方向键输出:

方块正常移动,不会移出边界

(2)方块反转测试

游戏过程中,点击向上方向键

输出:

方块无边界和障碍物阻挡的情况下可反转结果:

4.2.5方块堆砌与消行测试

(1)当方块下落到最底面或与障碍物接触时输出:

方块成功堆砌在底部

(2)当出现满行现象时

所有满行被消除,方块依次下移结果:

4.2.6测试结果分析

经过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。

五、设计体会与小结:

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.

回顾起课程设计,至今我仍感慨颇多,的确,在这一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

通过课程设计之后,把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的指导下,

终于迎刃而解。

在此我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢

六、附录:

1、小组成员及分工情况

系(部):

信息工程系

专业班级:

软件

(1)班

学生姓名:

陈学烽

学 号:

1011302101012

完成日期:

2011年12月28日

2、源代码ControlPanel.java

/*

*虚拟的单个方格类,控制方格的颜色

*/

classRussiaBoximplementsCloneable{privatebooleanisColor;

publicRussiaBox(booleanisColor){this.isColor=isColor;

}

*设置颜色

publicvoidsetColor(booleanisColor){this.isColor=isColor;

*返回颜色

publicbooleanisColorBox(){returnisColor;

publicObjectclone(){Objecto=null;

try{

o=super.clone();

}catch(CloneNotSupportedExceptione){e.printStackTrace();

returno;

GameCanvas.java

//游戏中方块显示的画布类importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.border.*;

classGameCanvasextendsJPanel{

privateRussiaBox[][]boxes;

//定义小方块

privateintrows=20,cols=12;

//定义20行12列

privatestaticGameCanvascanvas=null;

privateintboxWidth,boxHeight;

//默认为零需要调用fanning函数设置

privateColorblockColor=Color.RED,bgColor=Color.LIGHT_GRAY;

//定义方块色为红色,背景为浅灰色

privateEtchedBorderborder=newEtchedBorder(EtchedBorder.RAISED,

Color.WHITE,newColor(148,145,140));

/边/

框颜色白色

*采用单件模式,构造函数私有

privateGameCanvas(){

boxes=newRussiaBox[rows][cols];

i++)

j++)boxes[i][j]=newRussiaBox(false);

setBorder(border);

*获得GameCanvas实例

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

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2