综合实践T111齐利刚俄罗斯方块Word文档格式.docx
- 文档编号:16878395
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:25
- 大小:104.58KB
综合实践T111齐利刚俄罗斯方块Word文档格式.docx
《综合实践T111齐利刚俄罗斯方块Word文档格式.docx》由会员分享,可在线阅读,更多相关《综合实践T111齐利刚俄罗斯方块Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
目录
摘要I
AbstractII
第1章JAVA语言编程简介1
1.1
JAVA语言简介1
1.2JAVA语言在网络上的应用1
第2章课程设计的目的和要求3
2.1课程设计的目的3
2.2课程设计的要求3
第3章俄罗斯方块的基本玩法4
3.1游戏规则4
3.2游戏功能和操作4
3.2.1游戏功能4
3.2.2基本操作4
第4章整体设计5
4.1设计框图5
4.2俄罗斯方块功能部分5
4.2.1方块装载5
4.2.2处理键盘事件6
4.2.3判断满行及消行7
4.2.4显示控制7
第5章实验结果8
结论10
参考文献11
附录12
第1章JAVA语言编程简介
1.1
JAVA语言简介
SunMicrosystems公司在推出Java语言的同时,推出了一套开发工具JDK。
Sun提供的基于字符模式的Java开发工具包JDK:
Java开发工具(JDK)是许多Java专家最初使用的开发环境。
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。
所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。
JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。
其核心Java
API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。
JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。
不论什么Java应用服务器实质都是内置了某个版本的JDK。
因此掌握JDK是学好Java的第一步。
JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。
其中IBM的JDK包含的JVM(JavaVirtualMachine)运行效率要比SunJDK包含的JVM高出许多。
而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。
但不管怎么说,我们还是需要先把SunJDK掌握好。
1.2JAVA语言在网络上的应用
Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。
例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。
在编程处理上,一般先生成一个URL类型的对象,然后用Java中相应的方法(method)获取该对象所代表的资源。
1.3软硬件需求
运行此游戏最低的软硬件要求入表1-1所示
表1-1硬件参数
操作系统
Windows98/me/2000/XP/2003
内存容量
64MB
显卡要求
8M
声卡要求
支持DirectX8.0音效卡
交互工具
键盘/鼠标
CPU
奔腾133以上
硬盘空间
400MB
开发软件
Java可视化编程3.0以上版本
第2章课程设计的目的和要求
2.1课程设计的目的
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编程基本功,掌握JDK、Myeclipse等开发工具的运用,拓宽常用类库的应用。
使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java预言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
2.2课程设计的要求
实现俄罗斯方块游戏,具体的游戏方块图形的设计是比较重要的一个方面。
因为俄罗斯方块游戏中主要的动作就是控制游戏方块的移动和翻转,以便于组成一行行连续的方块从而增加游戏的空间,让它消除。
由于主要的游戏动作都集中在这个游戏方块上,因此游戏方块的设计就显得格外重要了。
为了增加程序的可拓展新,这里设计一个游戏方块的基类,各个具体的游戏方块都是从这个基类开始继承。
这样,当需要增加游戏方块时就不用重新设计新的类,只需要从这个基类集成出一个类就可以了。
第3章俄罗斯方块的基本玩法
3.1游戏规则
俄罗斯方块游戏规则是对于随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。
3.2游戏功能和操作
3.2.1游戏功能
游戏界面需求:
良好的用户界面,有关数显示和分数显示。
让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。
还需用另一种颜色把黑色围起来,宽度适中,要实现美感。
游戏形状(方块)需求:
良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。
键盘处理事件:
方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。
显示需求:
当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。
当达到一定的分数时过关。
3.2.2基本操作
基本操作就是点击程序运行键游戏开始运行,通过键盘的上、下、左、右方向控制键来控制产生随机图形的位置和形状,即方向键上来控制图形的旋转,方向键下加速图形下落速度,方向键左和右分别控制图形左右移动,从而完成整个游戏的控制。
第4章整体设计
4.1设计框图
俄罗斯方块游戏是对于随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。
游戏流程图如图4-1所示.
图4-1俄罗斯方块游戏流程图
4.2俄罗斯方块功能部分
程序一运行,游戏就开始了,出现的方块是随机的,然后你就用键盘上面的上下左右这四个方向键来控制游戏的运行。
其中上键,控制游戏方块的形状改变,下键控制它下落的速度,左右键分别控制左右。
当填满一层后,会自动消除。
若游戏方块上顶之后不再出新的方块,那游戏结束。
以下是主要功能模块设计。
4.2.1方块装载
定义一个随机变量,然后调用随机函数(rand=(int)(Math.random()*7)+1),
所取得的随机数在1到7之间,用这7个数字表示7中常见的方块,并从7种方块中随机抽取图形。
每一种方块都是由两个一维数组(x,y)表示的,其中一个用来保存方块所在行,另一个数组用来保存方块所在列,这样有利于方块在屏幕上准确而有活动的定位。
所有7种图形都是在三行三列的地图中研究后给出的坐标,给出的坐标也是方块在游戏地图中靠最顶行的坐标。
这就好象方块存在于一个三行三列大小的图形中而够成的一张图片。
图片的运动也就是方块的运动,这样,要实现方块的变形,就要在三行三列的图形中定义一个最左上角的基点,方块运动,基点也跟着运动。
基点坐标在加载方块是加载,基点的存储空间在加载每个方块数组的最后定义。
这样使得方块在游戏地图中的每一个地方都可以变形。
也不会因为变形而方块在游戏地图中的变动很厉害,出现瞬移的现象。
图形坐标装载完后,先判断在方块的下一行是否已有方块,如果有则说明方块以到达游戏地图的顶端,游戏将结束。
没有则先把方块坐标保存,这是为了在方块向下移动的时候在它的后面不会有虚假的方块,因为方块向下运动,记录的是新一行的方块坐标,但旧一行的没有消掉,所以要先旧方块的坐标保存起来,搽掉旧方块再显示方块。
这样也会减少屏幕的闪烁问题。
如图4-2所示。
图4-2方块装载
4.2.2处理键盘事件
keyDown()是处理按键的事件,刚开始运行程序时,游戏还没有开始,这时除S键(解键盘锁的键)是有用外,其他的键都给锁住,这样可以避免键盘过早的控制游戏。
在判断是否在S键的语句中还加了对游戏锁取反并判断是否为真的语句,两个语句同时成立时,才会解开游戏锁,程序开始时,游戏还没有开始,游戏锁是关的,但是取反后它就是真的,所以只要按下S键后,两个语句都成立。
这样做是为了在游戏开始时再按下S键,游戏不会重新开始,即游戏开始后,S键就没有用了。
按下S键后,游戏锁才被解开,键盘也被解开。
每当有按键,也就是方块要产生变化时,先保存方块的坐标,便于清理旧方块,显示新方块。
当方块要进行上(变形)、下、左、右变化时,先对方块将要移动到的位置进行判断,判断是否有障碍,有则保持原来的位置不变,没有则根据所按的键执行相关的操作。
再把方块的位置显示在屏幕上。
方块的移动其实也只是对行或列坐标的增减而己。
4.2.3判断满行及消行
满行判断及消行是到达事件中的一部分,是方块堆积,并对每个小方块所在行个数统计后,利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断是不是空行,如果那一行是空行则证明它以上的所有行都将不会有方块,也就不必要向上查找了。
不是则判断当前行是否满行的,如果满行则看有个连续几个满行的在一起。
然后再判断是否有行满的情况,否的话就继续检查上一行。
不然就进行消行处理及方块下移。
最后再向上查找满行情况直到本行为空时为止。
消行及方块下移:
当有行满时,则说明需要消行,有消行那么所有方块则要下移。
当本行满时,则以间隔为1向上查找,当遇到所查找的行也是满行,那么它的间隔自增1,然后继续向上查找,直到那一行不是满行的情况,则将此行所有数据信息移到本行,以后本行以上的每行都会以这个间隔去判断它将获得的那行数据,可以则继承,不然和上述一样操作。
如果将获得的那行数据为空行,则只须对本行的数据清空即可,那么方块下移也就完成。
4.2.4显示控制
方块组成:
小方块是由三个不同颜色的正方形方框组成,其中正方形有实心
的也有空心的,这样使得方块变得好看点能看出堆积的视觉效果.每个图形是由四个小方块拼凑而成的。
显示控制时先看之前是否发生过消行事件,如果发生了清除屏幕所有方块、成绩和关数,全部重新绘置,使得消行视觉化。
然后再清除旧图形,绘制新图形。
其实消除屏幕只是将屏幕重新画一次而己,清除成绩和关数,也只是在有显示成绩和关数的地方画一个白色的框而己。
重新绘置新点,就是从下向上判断看哪些地方有方块的就得新画一个小方块,没有的不画。
第5章实验结果
通过键盘的上、下、左、右方向控制键来控制产生随机图形的位置和形状,即方向键上来控制图形的旋转,方向键下加速图形下落速度,方向键左和右分别控制图形左右移动,从而完成整个游戏的控制。
运行结果如下:
(1)运行程序出现俄罗斯方块界面,产生随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)开始慢慢下落,如图5-1所示:
图5-1俄罗斯方块初始界面
(2)控制游戏方块的形状改变,下键控制它下落的速度,左右键分别控制左右。
当填满一层后,会自动消除,如图5-2所示。
图5-2消除一行
(3)若游戏方块上顶之后不再出新的方块,那游戏结束,如图5-3所示。
图5-3游戏结束
结论
综合实践部分,是培养学生动手能力,思维能力的重要环节。
这次通过综合设计,我完成了俄罗斯游戏的软件开发任务。
在整个开发过程中遇到了很多问题,如方块的装载和变形、屏幕太闪烁的问题、满行判断及消行的处理。
但最终都被我一一解决。
这个游戏虽然玩起来比较简单,但是用语言来把它编写出来,其实还是需要一定思维能力的。
回顾这个设计过程,我学到了许多书本上没有学到的知识。
通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。
在这次设计的同时,我又从中学到了许多东西。
在这里非常感谢指导自己的老师和帮助自己的同学!
参考文献
[1].齐治昌、谭庆平、宁洪编著,《软件工程》北京:
高等教育出版社1997年7月
[2].印旻编著,《java语言与面向对象程序设计》北京:
清华大学出版社2000年9月
[3].荣钦科技编著,《Java2游戏设计》北京:
清华大学出版社2004年11月
[4].朱福喜编著,《Java程序设计技巧与开发实例》北京:
人民邮电出版社2004年2月
[5].JSP编程技巧/清宏计算机工作室编著.北京:
机械工业出版社,2001.1
[6].精通JBuilder3环境下的JAVA编程/锐思创作室编著.北京:
人民邮电出版社.,2001.1
[7].深入JAVAServlet网络编程.清华大学出版社
[8].Struts开发入门与项目实践.北京:
人民邮电出版社,2005.8
附录
主要程序:
(1)Controller控制整个游戏的运行
packagetext01;
importjava.awt.event.KeyAdapter;
importjava.awt.event.KeyEvent;
importjavax.swing.JOptionPane;
/*
*控制类,控制图形,障碍物,处理逻辑和响应事件
*/
publicclassControllerextendsKeyAdapterimplementsShapeListener{
Shapeshape;
Groundground;
ShapePanelshapePanel;
ShapeFactoryshapeFactory;
/*
*
*controller的方法
//构造
publicController(ShapeFactoryshapeFactory,ShapePanelshapePanel,Groundground){
System.out.println("
Controller的构造"
);
this.shapePanel=shapePanel;
this.shapeFactory=shapeFactory;
this.ground=ground;
}
publicvoidnewGame(){
Controller的newGame方法开始新游戏"
shape=shapeFactory.setShape(this);
//按键响应方法
publicvoidkeyPressed(KeyEvente){
您按了一个按键"
//TODO自动生成的方法存根
switch(e.getKeyCode()){
caseKeyEvent.VK_UP:
System.out.println("
1232"
if(ground.isMoveable(shape,shape.ROTATE))
shape.roate();
break;
caseKeyEvent.VK_DOWN:
if(ground.isMoveable(shape,shape.DOWN))
shape.moveDown();
caseKeyEvent.VK_LEFT:
if(ground.isMoveable(shape,shape.LEFT))
shape.moveLeft();
caseKeyEvent.VK_RIGHT:
if(ground.isMoveable(shape,shape.RIGHT))
shape.moveRight();
}
shapePanel.display(ground,shape);
@Override
publicvoidshapeMoveDown(Shapeshape){
Controller实现ShapeListener接口的shapeMoveDown方法"
//synchronized保证在同一时刻最多只有一个线程执行该段代码
publicsynchronizedbooleanisShapeMoveDownNable(Shapeshape){
Controller实现ShapeListener接口的isShapeMoveDownNable方法"
if(this.shape!
=shape){
returnfalse;
//shapePanel.display(ground,shape);
if(ground.isMoveable(shape,shape.DOWN)){
returntrue;
ground.acceptShape(this.shape);
if(!
ground.isFull()){//判断能否产生新图形结束游戏
this.shape=shapeFactory.setShape(this);
//else{
//this.shape=shapeFactory.setShape(this);
//JOptionPane.showConfirmDialog(null,"
游戏结束"
"
提示:
"
JOptionPane.YES_NO_OPTION);
//}
returnfalse;
}
(2)图形产生
importjava.util.Random;
*图形生产
publicclassShapeFactory{
privateintstastus;
//数组中的标志用来判断是否画图形
*定义三维数组实现图形并初始化
privateintshapes[][][]=newint[][][]{
{
{1,0,0,0,
1,1,1,0,
0,0,0,0,
0,0,0,0
},
{1,1,0,0,
1,0,0,0,
{1,1,1,0,
0,0,1,0,
0,0,0,0,
{0,1,0,0,
0,1,0,0,
1,1,0,0,
}
},
{1,1,1,0,
1,0,0,0,
0,0,0,0,
0,0,0,0
},
{1,1,0,0,
0,1,0,0,
{0,0,1,0,
1,1,1,0,
0,0,0,0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 实践 T111 齐利刚 俄罗斯方块