俄罗斯方块设计与实现.docx
- 文档编号:4434358
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:25
- 大小:169.02KB
俄罗斯方块设计与实现.docx
《俄罗斯方块设计与实现.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块设计与实现.docx(25页珍藏版)》请在冰豆网上搜索。
俄罗斯方块设计与实现
信息与计算科学专业
工程实训报告
题目:
经典游戏—俄罗斯方块
班级:
信息与计算科学07-2
姓名:
XX
2010年11月21日
摘要
这是一款小型游戏,多出现在手机,MP4等小型数码展品中。
有趣且好玩,是人们在休闲娱乐时,消遣和打发时间的不错选择。
想要玩好它,你就得有灵活的手指掌控能力,且需要有缜密、灵活的头脑思维,以为下一步的下落位置做好预判。
具体规则,在以下做步骤详解。
此款游戏老少皆宜,说了这么多还没说这到底是怎样的一款游戏。
“俄罗斯方块”,顾名思义,就是不同形状和规格的块状物下落至指定位置。
且不能越界,一旦出界即输。
此次游戏的设计,我只完成了简单、大致的游戏功能块。
如要更加完整,也可增加和完善功能,比如添加更炫的背景和颜色,或设置分数计数器,当块合并消去后,你的分数会相应的增加,当你开始这款游戏,。
你一定会爱不释手的,那么现在就开始——让我们一起伸开双手,开始我们的手指健身操吧。
关键词:
游戏俄罗斯方块手指
Abstract
Itisainminiaturegame.AnditusuallyappearsinthedigitalproductlikemobileandMP4andsoon.Itisamusingandinteresting.Peoplealsocanrecreatethemselveswithit.Ifyouwantplayitwell,youmustcommandwithaflexiblefigureandmeticulousbrain.Thenyoucanprepareitwellforthenextstep.Theconcreteruleswillbeintroduceinthefollowarticle.Thiskindgameisadapttotheorderandyoungster.NowIwilltellyouwhatthegameis?
Obviously,itmeansthatmanyblockshouldbeuniteanddisappear.Anditcannotoutoftheborderlineandleavetheboard.Soyouwillbeloseifyoudo.HereImadeitonlyapartofthisgame.Ifyouareinterestinthisgame,youcanfinishandmakeitmoreperfectly.NowLet’splayitwithourfigure.
Keywords:
gameMuscovitesquarefigure
正文内容:
除了一、二、三、四级标题外,正文文本为宋体小四号字,20磅行距。
中文文本中的括号、标点符号为中文半角状态下的括号、标点符号,英文的括号、标点符号为英文半角状态下的括号、标点符号。
图、表的题头为黑体五号字、其中的文本为宋体五号字,图、表所在段落为单倍行距。
正文页码:
阿拉伯数字,宋体小五号字,页面底端居中(默认格式)。
第1章绪论
一款小游戏不仅可以放松心情,也可以激起人们对生活的乐趣,尤其对于像我这样的学生来说,在学习JAVA等程序设计过程中往往会感到枯燥乏味,而一个小游戏不仅可以引起我对兴趣也能帮助我对编写程序的理解与加深。
面向对象技术被称为是程序设计方法学的一场革命,他已经逐步替代了面向过程的程序设计技术,成为计算机应用开发领域的主流技术。
面向对象技术比较符合人们观察世界和处理问题的思维模式,而将数据与处理数据的操作封装在一起的机制也符合现代大规模软件开发的要求,并易于实现软件的复用。
游戏的初步设计,构思。
1.1选题背景及影响
从上世纪末开始,网络的应用与普及更加广泛,而由于网络和计算机的交融和拓展,逐渐被人们应用于不同领域,其中也应运而生了许多游戏。
以致发展到目前网络上流行的大型网游。
而这些游戏的发展都离不开许多小型游戏的开发和普及所带来的影响。
可以说研究小游戏的编译在对于初学者来说是对程序的一中感性的认识,也能对今后学习程序的开发等带来不小的促进作用,为今后更广阔的软件开发奠定扎实的基础。
1.2主要设计内容
本管理系统以Eclipse为主开发工具,Eclipse是一款集成开发软件工具。
Eclipse是一款免费的且应用广泛的软件而Eclipse提供的JAVA集成开发工具也相当的丰富,Eclipse从起初作为服务于软件开发的集成平台,逐步演变为可以宿主任何一桌面为中心的应用程序平台。
同时采用SQLServer2000来创建数据库的连接。
本游戏可满足玩家的基本操作。
1.3章节内容简介
第1章为绪论,主要介绍游戏的选题背景及其影响,以及主要设计内容。
变量声明的各值属性见下表:
表1各变量的属性值表
字段
类型
长度
备注
ges
Int
5
正下落的块
shiGes
Int
5
落实的块
fangAn
Int
5
造新块
jiShuQi
Int
5
计数器
jianGe
text
25
间隔
以上定义了游戏中各个指定值在数据库中的类型和字段等。
第2章为需求分析,首先介绍俄罗斯方块游戏的执行原理和基本功能,其中包括图像的显示,键盘的左右移动,边界值的设置等功能模块的实现。
还有所涉及到相关知识内容。
并设置其游戏规则,输赢主要由手指掌控操作灵活度决定。
最后是功能实现步骤。
第3章为功能模块和流程图,画出了游戏各个主要功能的实现模块,以及所使用的语句的JAVA流程结构图,包括主要有消行、出界和被挡。
最后显示运行成功后的运行结果图。
第4章为算法描述:
各个主要功能实现的详细算法介绍。
其中附有部分代码,并运用了二维数组和遍历循环的知识。
最后在理论上和具体实施上做出可行性分析。
完成所有的功能操作后,先进行调试,找出错误并做修改直至没有错误达到最终结果,然后做出总结归纳。
第2章需求分析
俄罗斯方块是每个人儿时几乎都玩过的游戏,还记得小时候经常用父亲的手机玩这一游戏。
从最初的不了解到后来的高手,想想都让人回味。
虽然是那么的简单,但却是充满了无穷的乐趣,对我而言是一段美好的回忆。
2.1游戏的执行原理
俄罗斯方块是一项简单,易懂的小游戏。
是通过不同小方块组成的不同形状的自由下落和背景组成的基本页面。
并通过手指操作键盘来实现小人的变化。
用上键控制方块的360度方向转变,左右键控制方块的左右移动。
为满足玩家的更多要求还可以增加方块的不同颜色的变化以及分数等。
2.2基本功能
2.2.1游戏规则
方块不能出界,即当方块合并叠加后超出了框架的范围,即为出界。
游戏结束。
因此需要灵活的手指操作能力。
规则相对来说还是很简单的,只要玩几次就能很好的掌握,并不难。
2.2.2游戏功能实现的步骤
1、图像的显示
2、下落的块与落定的实块
3、块的下出界与下被挡
4、决定是否下落
5、块的合并
6、消去整行
7、造一个新块
8、块的360度方向变化
2.2.3涉及知识内容
本游戏运用了数组的相关知识,还包括循环、选择、顺序等语句的应用。
数组是JAVA容器类的一种。
是用来存储一组固定的,有顺序且不重复的数据的。
它是学习JAVA最基础的知识点,熟悉了数组对今后的JAVA编程会有很大的帮助。
同时像for,ifelse,while等语句也是构成本游戏的基本语言。
其中数组是完成这一游戏设计的最基本的知识点,而循环语句的多次使用也是完成设计的一部分。
第3章功能模块与流程图
3.1功能模块
本图主要介绍了俄罗斯模块所需要实现的各个功能。
这是游戏设计的出发点和考虑的基本要素。
图1游戏功能模块图
图中右侧分支做有书签字样标记的是基本要实现的功能,而用感叹号做标记的是可加可不加的功能。
左侧的分支是拓展空间与注意提示等。
尤其是对可能出现的错误要考虑清楚。
3.2JAVA部分流程结构图形
流程结构图形包括对“方块的消行”,“出界”等的描述:
被挡:
指方块下落过程中,被实块所档,即无法在下落,也变成实块。
其他功能的流程结构图亦类似。
这里主要画了这两个主要的流程图。
详细算法分析见下介绍。
以下只列出了“出界”和“消行”两种情况。
出界:
方块下落后叠加超出框界限。
运用ifelse语句,如果每列19行都!
=0那么条件假设出界成立,否则不执行。
图2
消行:
指当下落后的块在某一行值都为1,即方块占满整行,则消去这一行。
运用:
3个for循环遍历嵌套,一个ifelse判断首先判断计数器内书是否为0或1,如果计数器累计达10则从看行-1到0开始循环,再从0到10循环,并把上一行的值给下一行。
从而达到消行的目的。
图3
最终运行界面如下:
图4
运行图有:
分数、级别、各种颜色的块、开始和暂停键组成。
再加上一些个人喜欢的插图以增加游戏的趣味性。
第4章算法功能描述
1、首先要显示背景图:
更具所提供的已有图片在绘图的任务指定区编写并变现代码如下:
Imagetu=(newImageIcon("俄罗斯图片/2/背景-1.png")).getImage();
g.drawImage(tu,0,0,null);
注意:
在选择图像的地址时只需打开图的属性,复制即可。
2、显示落块的图:
代码实现如下:
ImagetuKuai=(newImageIcon("俄罗斯图片/2/"+ges[h][l]+".png")).getImage();
g.drawImage(tuKuai,l*30+30,h*30+5,null);
变量h,l也包括颜色的随机变化。
其中行h、列l值是变量,即更据所给初始值的形状随机显示。
变量要加符号"++"。
除此之外,还要对图进行循环遍历。
3、显示实块也是如此,不同的是将变量改为常量。
4、分别定义落块与实块:
正在下落的块:
即方块自由定时下落,随固定时间随机是不停地下落,这里运用二维数组创建
int[][]ges=newint[20][10];
不能再动的块:
即落在下面固定不再动的块,这里运用二维数组创建
int[][]shiGes=newint[20][10];
5、初始化设置:
即初始的方块图形:
ges[0][3]=1;ges[0][4]=1;ges[0][5]=1;
ges[1][3]=1;
6、被挡需要判断落块是否有下一个实块。
如果下一个落块是固定不动的,即落实的块,则落块无法再在下落,与是被当。
用双循环遍历forfor语句。
以及选择判断:
if语句
if(ges[h][l]!
=0&&shiGes[h+1][l]!
=0)
{
jiaSheXiaBeiDang=true;
}
7、键盘的实现:
键盘上键主要负责方块的360度方向的变化,以更好的与实块合并从而为消行做最好的解决方案。
intxl=zl+zh-h;
intxh=zh-zl+l;
键盘左右键则是负责方块的左右移动。
右移同时也包括判断出界的语句:
if(ges[h][9]!
=0)
{
jiaSheYouChuJie=true;
}
else
{
}
这里玩家还可以将键盘下键设置为加速方块移动的功能键。
则这里我没做设计。
8、造新块:
定时的随机造出3种方案的方块形状。
并按定时时间向下落。
这3种方案分别为:
ges[0][3]=tu;ges[0][4]=tu;ges[0][5]=tu;
ges[1][4]=tu;
ges[0][3]=tu;ges[0][4]=tu;
ges[1][3]=tu;ges[1][4]=tu;
ges[0][3]=tu;ges[0][4]=tu;ges[0][5]=tu;ges[0][6]=tu;
随机数可用公式:
Math.random()
这里用:
inttu=(int)(Math.random()*11)+1;
intfangAn=(int)(Math.random()*3);
9、合并指将落块给实块,也变成实块。
同样用双循环语句forfor以及判断选择ifelse语句:
if(ges[h][l]!
=0)
{
shiGes[h][l]=ges[h][l];
ges[h][l]=0;
}
else
{
}
以上这些功能的实现均用到了数组等知识,并有都用到了循环遍历以及判断选择,这是游戏的8个主要功能的实现,完成了这些功能的算法,那么可以说这个游戏基本已经完成。
主要的方法基本都已经实现,如要加大功能也可做进一步的完善和改进。
最后所要做的工作是调试及运行看是否满足预期的目标。
如不行再继续修改和增删,运行成功并满足需求后形成报告。
结论
首先,本游戏使用Eclipse集成JAVA开发环境,完成其运行的框架和功能。
功能主要分为主程序和调用函数。
运用了本软件带有的Game生成程序,创建一新的Game主程序,在以此将分析结果转为代码,从而真正实现游戏的操作。
最后可以调试,修改以最终完成整个游戏的设计。
此款游戏还有其特有的好处:
据英国某一科学家测试验证表明,这一游戏有助于缓解遇到特大自然灾害的幸存者的心理,原因是当受害者在操作这一游戏时,会占用大脑中大部分资源,以使玩家暂时忘记灾害的痛苦程度。
有助其逐渐恢复平静状态。
是不是觉得很神奇啊!
通过此次课程设计,对我的综合知识有了很大的促进作用,包括数据库理解,JAVA的运用和掌握。
虽然整个报告并不是非常的完美,还有许多需要修改的地方也请老师多多包含,也感谢老师的指导和建议。
致谢
在工程实训设计阶段,有幸的投到我的导师赵福军、刘忠艳老师门下,开始我的设计生活。
在通过这次工程实训,我认真的并亲自完成了这份报告,通过此次实践操作,确实增强了自身的实践能力和思维能力,虽然没有在学校里全程跟随老师进行上机练习,不过我在校外也同的完成了课程设计,在对基础理论知识掌握的基础上,更加深了理论实践结合的能力。
并能更好的学以致用。
在实践的过程中,我们碰到了很多的问题,但都在老师的耐心指导下,最终形成了这份报告,也学会了许多东西。
正是在老师的不辞辛劳,我才能取得了显著地进步,在此我想你们致以最真心的感谢,并祝愿你们桃李满天下!
参考文献
1顾自新,王炳同.物流信息系统开发策略研究[J].物流科技,2006,
(1):
10-13
2蒋宝家,郑荣,董绍华,等.可视化仓库管理系统的设计[J].物流科技,2005,(9):
178-180
3郝刚.ASP.NET服务器控件开发[M].北京:
人民邮电出版社,2003:
34-36
4凯西.施瓦尔贝.IT项目管理[M].王金玉译.北京:
机械工业出版社,2003:
15-18
5J.Hamilton,T.Nayak.MicrosoftSQLServerFull-TextSearch.IEEEDataEngineeringBulletin,December,2001
6郑阿奇,刘启芬,顾韵华.SQLServer实训[M].清华大学出版社,2005
7王勇,张发勇,周顺平.CMM软件配置管理的理论与实践[J].计算机工程与应用,2004,(23):
102-10
8宋坤,李严,王国辉.数据库开发实例解析[M].机械工业出版社,2006
9马里杰.SQLServer数据库开发经典案例解析.清华大学出版社,2006.1.
10王珊,陈红.数据库系统原理教程[M].北京:
清华大学出版社,2004.6.
附录1设计系统部分源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassELuoSiFangKuaiCS
{
//TODO:
变量“声明”在此
/**
*正在下落的块
*/
int[][]ges=newint[20][10];
/**
*落实不能再动的块
*/
int[][]shiGes=newint[20][10];
intzh=0;
intzl=4;
窗口ck=null;
定时器ds1=null;
ELuoSiFangKuaiCS()
{
//TODO:
程序初始化在此
ges[0][3]=1;ges[0][4]=1;ges[0][5]=1;
ges[1][3]=1;
ck=new窗口();
//窗口宽+2*立体边,高+2*立体边+标题栏
ck.setSize(5*2+600,600+2*5+25);
//设定窗口可见性setVisibletrue/false
ck.setVisible(true);
//延时的毫秒
ds1=new定时器(200);
}
class窗口extendsJFrame
{
菜单cd=null;
面板mb=null;
窗口监听器exit=null;
键盘监听器jp=null;
窗口()
{
jp=new键盘监听器();
this.addKeyListener(jp);
cd=new菜单();
this.setJMenuBar(cd);
mb=new面板();
this.add(mb);
exit=new窗口监听器();
this.addWindowListener(exit);
this.repaint();
}
class菜单extendsJMenuBar
{
JMenudan;//菜单
JMenuItemxiang1;//菜单项
菜单监听器cdjtq;
菜单()
{
dan=newJMenu("游戏");//菜单
xiang1=newJMenuItem("开局");//菜单项
this.add(dan);
dan.add(xiang1);
cdjtq=new菜单监听器();
xiang1.addActionListener(cdjtq);
}
class菜单监听器implementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
//TODO:
菜单事件处理
if(e.getSource()==xiang1)
{
}
}
}
}
class窗口监听器extendsWindowAdapter
{
publicvoidwindowClosing(WindowEvente)
{
ds1.xc.stop();
System.exit(0);
}
}
class键盘监听器implementsKeyListener
{
//TODO:
键盘处理,可加入KeyEvent.VK_XXX
publicvoidkeyPressed(KeyEvente)
{
switch(e.getKeyCode())
{
caseKeyEvent.VK_LEFT:
//左
booleanjiaSheZuoChuJie=false;
for(inth=0;h<20;h++)
{
if(ges[h][0]!
=0)
{
jiaSheZuoChuJie=true;
}
else
{
}
}
//假设左被挡住
booleanjiaSheZuoDang=false;
for(intl=1;l<10;l++)
{
for(inth=0;h<20;h++)
{
if(ges[h][l]!
=0&&shiGes[h][l-1]!
=0)
{
jiaSheZuoDang=true;
}
}
}
if(jiaSheZuoChuJie==false&&jiaSheZuoDang==false)
{
//左移
for(intl=1;l<10;l++)
{
for(inth=0;h<20;h++)
{
ges[h][l-1]=ges[h][l];
ges[h][l]=0;
}
}
zl--;
}
else
{
}
break;
caseKeyEvent.VK_RIGHT:
//右
booleanjiaSheYouChuJie=false;
for(inth=0;h<20;h++)
{
if(ges[h][9]!
=0)
{
jiaSheYouChuJie=true;
}
else
{
}
}
if(jiaSheYouChuJie==false)
{
//右移
for(intl=8;l>=0;l--)
{
for(inth=0;h<20;h++)
{
ges[h][l+1]=ges[h][l];
ges[h][l]=0;
}
}
zl++;
}
else
{
}
break;
caseKeyEvent.VK_UP:
//上
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 设计 实现