软件作业俄罗斯方块游戏2.docx

上传人:b****6 文档编号:5766312 上传时间:2023-01-01 格式:DOCX 页数:16 大小:169.60KB
下载 相关 举报
软件作业俄罗斯方块游戏2.docx_第1页
第1页 / 共16页
软件作业俄罗斯方块游戏2.docx_第2页
第2页 / 共16页
软件作业俄罗斯方块游戏2.docx_第3页
第3页 / 共16页
软件作业俄罗斯方块游戏2.docx_第4页
第4页 / 共16页
软件作业俄罗斯方块游戏2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

软件作业俄罗斯方块游戏2.docx

《软件作业俄罗斯方块游戏2.docx》由会员分享,可在线阅读,更多相关《软件作业俄罗斯方块游戏2.docx(16页珍藏版)》请在冰豆网上搜索。

软件作业俄罗斯方块游戏2.docx

软件作业俄罗斯方块游戏2

目录

一、需求分析

1.电子游戏的发展状况………………………………1

2.设计目标……………………………………..………6

3.游戏需求…………………………………….……….6

4.软硬件环境………………………………………7

二、总体设计

2.1游戏设计方案的确定……………………………8

2.2系统流程结构设计………………………………9

2.3各个功能图模块设计…………………………9

三、详细设计

3.1模型层设计……………………………………..10

3.2视图层设计……………………………………..16

3.3控制层设计……………………………………..18

3.4游戏演示……………………………………....18

4、系统测试分析

4.1游戏界面菜单选项的功能测试………………..21

4.2按键事件的功能测试……………………..……..22

4.3方块堆砌与消行测试……………………..……..22

4.4测试结果分析…………………………….……..23

五、个人小结……………………………………23

一、需求分析

1.电子游戏发展现状

1.1电子游戏在国外的发展现状

电子游戏是最初产生于美国,1971年,一个还在MIT就读的学生设计了世界上第一个业务用游戏机,这个街机游戏的名字叫《电脑空间》。

可以说时至今日,电子游戏仍然是外国的天下。

美国至今仍是世界第一大游戏市场,它遵循的是以发行商为主的产业开发链模式,根据美国市场调查公司NPDGroup调查统计,美国2004年游戏总销售金额(包括家用、掌上型主机及软件)为99亿美元,占了全球游戏市场的45%。

其中游戏软件销售的具体数字是:

视频游戏软件的销售额达52亿美元(1.6亿套),PC游戏软件销售额达11亿美元(4500万套),掌机游戏销售额达10亿美元(4230万套)。

2004年一共大约有2.48亿套游戏售出。

据估计,美国每个家庭平均购买过2部游戏[3]。

日本近20年来疯狂赚电子游戏的钱。

从上世纪60年代初的街机,到六七十年代之间的家用游戏机,再到八九十年代的掌上游戏机,日本经过30多年的耕耘,终于把电子游戏这棵“摇钱树”,培育成第一时尚娱乐产业,垄断全球业界长达10余年。

对于日本来说,电玩业已是国家经济的重要支柱之一,在GDP中占有1/5的举足轻重地位。

日本游戏业在最辉煌的1998年,曾经占领全球电子游戏市场硬件90%以上,软件50%以上。

韩国号称世界上网络游戏产业最发达国家之一。

迄今为止,国内网络游戏市场有超过60%的产品来自韩国游戏软件开发商,韩国网络游戏使国内很多游戏运营公司在游戏营销市场或股票资本市场上获得了巨大的成功。

韩国游戏市场的发展不是偶然,韩国政府不仅给游戏产业以正确的定位和引导,更是将其和本国经济发展紧密地联系到一起,做了很多市场培育方面的工作。

韩国政府认识到,靠重型工业来支撑全国经济的做法是片面的,于是将IT、娱乐产业视为新的经济增长点,开始大力扶持。

从那时起,科技含量极高而能源消耗极低的游戏制作及相关产业担负起了“富国兴邦”的重担。

由文化观光部出面组建韩国游戏支援中心,向韩国游戏产业提供从资金到技术上的多方面支援;成立游戏投资联盟,政府每年向游戏产业投入的资金多达500亿韩元,并为游戏企业提供长期的低息贷款;设立信息化基金和文化产业基金,为游戏产业服务;对指定的风险企业实行各种税制优惠政策,减少甚至免除游戏企业的税务负担;建设游戏产业基地以扶持中小游戏企业的发展;对从事游戏产业的高科技人才免除两年的兵役。

在韩国,从制作到运营,一个网络游戏公司起步门槛较低,主要得益于政府实行的援助计划。

此外,在有利的政策形势下,韩国出现了众多的游戏院校,一些原本不涉足此领域的大学也开设了游戏相关专业课程,以大力培养游戏专业人才,从而为游戏生产提供了基础保障。

1.2电子游戏在国内的发展现状

与电子游戏发达的国家相比,我国在电子游戏方面还存在比较大的差距。

目前,我国游戏市场正处于发展阶段,但市场上的游戏软件主要来自日本、美国、韩国等地,但由本土游戏制作人开发创作的游戏正在高速增加,国产原创的游戏即将成为游戏的主流。

中国的游戏产业经过80年代初期台湾厂商的探索至90年代,开始了自己的研发、发行的历程,直至网络游戏的风行,让中国的网络游戏开始有了飞速的发展。

1983年,智冠科技有限公司在中国台湾成立,为全球第一家签订授权重制中文版产品代理销售合约的公司,2000年智冠在台湾股票上市,2002年其控股的中华网龙在台湾上市。

1996年底,UBISOFT上海分公司暨上海育碧电脑软件有限公司成立。

同年,全球游戏软件领军企业EA在中国上海成立办事处。

1997年,由尚洋公司制作的《血狮》正式上市。

1997年,北京新天地互动多媒体技术有限公司成立,该公司引进了《古墓丽影III》(TombRaiderIII)、《盟军敢死队》等著名欧美游戏,并在1999年在中国率先掀起“游戏软件价格革命”,全面推行50元的价格体系,从此正版游戏价格开始贴近大众消费者。

1999年,业内估算中国电脑游戏市场(正版)约1.5亿元人民币。

2000年,大陆华彩软件代理发行第一款中文MMORPG《万王之王》正式推出,该游戏于1999年在台湾发行,由台湾雷爵资讯(Lager)开发。

也在2000年,继《万王之王》、《石器时代》、《网络三国》在台湾上市之后,游戏桔子推出了《天堂》,游戏桔子成立于1995年,1999年以《便利店》在台湾奠定了地位。

《天堂》这款由韩国著名游戏公司Ncsoft研发的网络游戏不但在本国大获成功,也在台湾再次夺冠。

2001年初,北京华义在中国大陆地区正式推出了《石器时代》,华义国际股份有限公司于1993年在台北成立,2001年在台湾股票上市。

《石器时代》成为大陆当时最流行的网络游戏。

2001年,天人互动软件技术有限公司在北京成立。

当年与SEGA结成PC游戏业务的战略合作关系,发行了《樱花大战Ⅱ》《文明Ⅲ》《无冬之夜》等经典游戏,2002年,引进在欧美网络游戏《魔剑》(ShadowBane),这是首款在中国测试的欧美网络游戏。

2001年5月,“联众世界”经过3年多的迅速成长,以同时在线17万人、注册用户约1800万的规模,成为当时世界用户数量第一的在线游戏网站。

2005年1月21日,中央电视台报道:

我国网络游戏产业当年增加了50%,今后几年都将以50%以上的速度增长;第一届中国网络游戏年会报道:

中国国内网络游戏2004年规模达24.7亿元,2009年规模将达到109.6亿元。

2、设计目标

通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯方块游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,初步掌握MVC这种设计模式,进一步巩固和加强自身对j2se基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。

3、游戏需求

28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便以玩家所需要的形态和位置落下。

如果落下时,方块的方格能填满某一行,则这一行可消去。

消去一行后,游戏可给玩家加分,若由存在空格的方块填满整个窗口,则游戏失败。

游戏功能需求如下:

游戏界面需求:

设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的背景色是黑色,方块用蓝色颜色,在一定的区域内运动和变形,落下后的障碍物用黄色显示,这样看起来会有一定的美感。

游戏形状需求:

用数组作为存储方块28种状态的数据结构,即长条形、Z字形、反Z形、田字形、7字形、反7形、T字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。

键盘处理事件需求:

方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。

鼠标处理事件需求:

通过点击菜单栏中相应的菜单项,可以实现游戏的开始、结束,方块形状的变换,分数、等级的显示,以及游戏帮助等功能。

显示需求:

当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。

当达到一定分数的时候,会增加相应的等级。

4、软硬件环境

操作系统:

MicrosoftWindowsXPProfessionalServicePack2

内存:

512M

硬盘:

80G

CPU:

赛扬2.8

交互工具:

键盘/鼠标

显示器:

VGA显示器

JDK版本:

jdk1.6.0.02

Eclipse版本:

eclipse-SDK-3.4-win32

二、总体设计

2.1游戏设计方案的确定

本游戏的设计采用MVC模式(Model-View-Controller),即把本游戏的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样本游戏的设计被分成三个层—模型层、视图层、控制层。

MVC模型图如下所示:

2.2系统流程结构设计

2.3各个功能模块图设计

2.3.1模型层(Model)功能模块图设计

2.3.2视图层(View)功能模块图设计

2.3.3控制层(Controller)功能模块图设计

三、详细设计

3.1模型层(Model)设计

3.1.1图形的产生

通过图形工厂类ShapeFactory的getShape(ShapeListenerlistener)方法随机产生方块的某种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:

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

3.1.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种状态的。

3.1.3图形的移动

图形类Shape保存了自己的位置信息,用left表示图形到左边界的距离,top表示图形到上边界的距离,图形移动就是改变left和top的值。

向上移动:

top减1,向下移动:

top加1,向左移动:

left减1,向右移动:

left加1。

图形的移动分为图形的自动下落以及通过按键事件实现图形的左移、右移以及加速下移。

通过多线程ShapeDriver类来实现图形的自动下移,由于游戏中方块的动态性,每个方块有一定的生命周期,所以选用线程来实现方块。

一个方块用一个线程类对象实现,该类继承与Thread类,当一个方块出现时也就表示一个线程对象产生并开始运行。

通过对按键事件的响应,实现图形的左移、右移以及加速下移。

3.1.4图形的变形

通过inttype=newRandom().nextInt(shapes.length);shape.setBody(shapes[type]);

shape.setStatus(0);实现初始图形的初始化,通过status=(status+1)%body.length;实现图形的变形功能。

3.1.5存储和表示障碍物

用一个和显示区域的面板大小相对应的二维数组保存障碍物的位置信息,如果对应的位置是障碍物,则这个数组中相应的元素就为1,否则就为0。

如何把图形变成障碍物呢?

只要把属于图形的格子对应的位置都变成障碍物即可。

代码如下:

publicbooleanisMember(intx,inty,booleanrotate){

inttempStatus=status;

if(rotate){

tempStatus=(status+1)%body.length;

}

returnbody[tempStatus][y*4+x]==1;

}

publicvoidaccept(Shapeshape){

System.out.println("Ground'saccept");

for(intx=0;x<4;x++){

for(inty=0;y<4;y++){

if(shape.isMember(x,y,false)){

if((shape.getLeft()+x)

zaw[shape.getLeft()+x][shape.getTop()+y]=1;

}

}

}

}

3.1.6判断满行及消行

如果某一行没有空白,则这一行就是满行。

满的那行上面所有的行整体下移一行就是消除这个满行。

代码如下:

privatevoiddeleteFullLine(){

for(inty=Global.HEIGHT-1;y>=0;y--){

booleanfull=true;

for(intx=0;x

if(zaw[x][y]==0){

full=false;

}

}

if(full){

deleteLine(y);

}

}

}

privatevoiddeleteLine(intlineNum){

for(inty=lineNum;y>0;y--){

for(intx=0;x

zaw[x][y]=zaw[x][y-1];

}

}

for(intx=0;x

zaw[x][0]=0;

}

deleteFullLine();

}

利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断某一行中是否有空白,如果没有空白的话,则将当前的行号传递给deleteLine(intlineNum)方法,由该方法实现消除当前行,并将上面的方块依次下移一行,最后再重新调用deleteFullLine()方法进行查找,直到所有行都检查一遍结束。

3.2视图层(View)设计

3.2.1方块的显示

通过视图层的GamePanel类的paint(Graphicsg)方法调用Shape类的drawMe(Graphicsg)方法,从而实现方块的绘制,代码如下:

publicvoiddrawMe(Graphicsg){

g.setColor(Color.BLUE);

for(intx=0;x<4;x++){

for(inty=0;y<4;y++)

if(getFlagByPoint(x,y)){

g.setColor(newShape().shapeColor);

g.fill3DRect((left+x)*Global.CELL_SIZE,

(top+y)*Global.CELL_SIZE,

Global.CELL_SIZE,

Global.CELL_SIZE,

true);

}

}

}

 

3.2.2障碍物的显示

通过视图层的GamePanel类的paint(Graphicsg)方法调用Ground的drawMe(Graphicsg)方法,从而实现障碍物的绘制,代码如下:

publicvoiddrawMe(Graphicsg){

for(intx=0;x

for(inty=0;y

if(zaw[x][y]==1){

g.fill3DRect(x*Global.CELL_SIZE,

y*Global.CELL_SIZE,

Global.CELL_SIZE,

Global.CELL_SIZE,

true);

}

}

}

}

3.3控制层(Controller)设计

控制层主要是实现图形工厂生产图形,图形按键事件的处理,方块、障碍物显示的控制,图形自动下落和障碍物生成的控制。

通过控制层这个大管家最终实现此俄罗斯方块的按键事件的处理以及各种逻辑的处理。

3.4游戏演示

3.4.1游戏界面显示

3.4.2开始和结束控制菜单

 

3.4.3分数和等级查看菜单

3.4.4变换方块菜单

3.4.5帮助菜单

4、系统测试分析

4.1游戏界面菜单选项的功能测试

(1)“控制”菜单测试

①点击“游戏”“开始”

输出:

游戏开始

结果:

正常

②点击“游戏”“结束”

输出:

弹出游戏结束提示框

结果:

正常

(2)“查看”菜单测试

①点击“查看”“分数”

输出:

在游戏面板中间跳出分数显示框

结果:

正常

②点击“查看”“级别”

输出:

在游戏面板中间跳出级别显示框

结果:

正常

(3)“变换”菜单测试

①点击“变换”“改变方块”

输出:

在游戏面板中显示随机产生的某种方块

结果:

正常

4.2按键事件的功能测试

(1)方块移动测试

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

输出:

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

结果:

正常

(2)方块反转测试

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

输出:

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

结果:

正常

4.3方块堆砌与消行测试

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

输出:

方块成功堆砌在底部

结果:

正常

(2)当出现满行现象时

输出:

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

结果:

正常

4.4测试结果分析

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

五、个人小结

游戏设计与实践是一项复杂而且庞大的工作,在选题之后,我才意识到过程的艰难,因为以前从来没有接触过游戏设计,刚开始时有点迷茫和彷徨。

后来通过看书和在网上查找资料,逐渐找到了一些感觉。

本次设计让我初步懂得了电子游戏所涉及到的有关技术、方法,包括电子游戏分类、选题、构思等。

并实现几个可演示的游戏软件,其中有很多应用了学习的相关技术,并且做到了图、文、声并茂,能实际演示。

此次设计过程中印象最深的收获有:

1、学到了很多新知识,并且对老知识进行了回顾。

经过长时间的学习,更进一步熟悉了Java语言。

2、通过不断上机实验,调试程序,总结经验,从对课题的不理解到能够开始动手去做,提出问题并自己想办法解决问题,自己多实践,所以增强了动手能力。

3、提高了中、英文资料的检索能力。

这次毕业设计过程中我查阅了很多资料,不但有图书馆的期刊、杂志、馆藏图书,还有网络中的电子文档、电子书籍、网页及下载的视频教学课程;不但有中文资料还有英文资料。

这些资料,使我的眼界更开阔,对课题的认识更加深刻,编写程序的时候思路更加清楚,少走了很多弯路。

回顾这个设计过程,我学到了许多书本上没有学到的知识。

通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。

在这次设计的同时,我又从中学到了许多东西。

但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,如不能把要装载的方块提前显示出来。

因此做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个系统的不足之处。

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

当前位置:首页 > 自然科学

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

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