基于JAVA技术的俄罗斯方块游戏的设计与实现.doc
- 文档编号:1224505
- 上传时间:2023-04-30
- 格式:DOC
- 页数:41
- 大小:847.50KB
基于JAVA技术的俄罗斯方块游戏的设计与实现.doc
《基于JAVA技术的俄罗斯方块游戏的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于JAVA技术的俄罗斯方块游戏的设计与实现.doc(41页珍藏版)》请在冰点文库上搜索。
目录
摘要 1
关键词 1
1前言 2
2需求分析 3
2.1系统开发环境 3
2.2系统玩法及规则 3
2.3系统设计分析 4
2.4注意事项 5
3概要设计 5
3.1系统介绍 5
3.2系统简单设计 6
3.3系统功能设计 6
3.4系统流程 8
4系统详细设计 9
4.1设计游戏框架 9
4.2设计游戏界面 13
4.3游戏内容设计 14
4.3.1方块描述 14
4.3.2地图描述 16
4.3.3地图方块阻碍描述 16
4.3.4满行判断及删除 16
4.3.5线程控制的实现 17
4.3.6控制游戏开始 17
4.3.7控制游戏暂停 17
4.3.8控制游戏结束 17
4.3.9控制方块自动下降 18
4.3.10预备方块区的上移效果 19
4.3.11键盘事件处理 19
4.4游戏其它功能的实现 20
4.4.1添加状态栏 20
4.4.2添加关于对话框 20
4.4.3添加音响效果 22
4.4.4得分情况封装 23
4.4.5成绩的录入 25
5系统实现 28
5.1登入界面 28
5.2游戏主界面 28
5.3游戏结束显示框 29
5.4成绩排行榜 30
6系统测试 30
6.1测试举例 30
6.2测试项目 31
6.3测试方法 32
7设计小结 33
7.1出现的问题及解决方法 33
7.2游戏存在的不足 35
7.3结论 35
参考文献 36
致谢 37
附录 38
基于JAVA技术的俄罗斯方块游戏的设计与实现
摘要:
俄罗斯方块是一款非常经典的游戏,曾经风靡全球,经久不衰,相信不少人都玩过,同时也是我们学习面向对象编程思想的理想实例。
现在面向对象的编程语言很多,都可以通过编程来实现。
本设计介绍的是用Java语言设计一个俄罗斯方块游戏的全过程,整个游戏系统是一个应用程序,不再是嵌入到网页里的那种小应用程序,并使用了Swing组件,使得界面更具有专业效果。
游戏设计过程中涉及到游戏框架、游戏界面的编写、菜单处理、变量的定义、算法设计以及预览功能的实现。
同时,还为游戏添加了其他功能,如设计About对话框,实现游戏分数的存档,为游戏添加状态栏等。
通过本次毕业设计可以学到如何定义类和类成员及其方法;并如何使用JBuilder来创建工程;如何创建一个对话框,并将对话框和主应用程序联系起来共同使用。
关键词:
俄罗斯方块;Java;应用程序;Swing组件
TheDesignAndImplementationOfATetrisGameBasedOnJavaTechnology
Abstract:
Tetrisisaclassicanddurablegame,andithasbeenpopularallovertheworld.Believeingithasbeenplayedmanyofpeople.andmeanwhileit’sanidealsampleforleaningobject-orientedprogramming.Itcanbeimplementedbydifferentobject-orientedprogramminglanguagesthatexistsnowadays.Thisthesisdescribestheimplementingprocessofthisgameinjavalanguage,whichisimplementedinapplicationforminsteadofappletthatembeddedinthewebpages.Theuseofswingcomponentmakestheinterfacelookmoreprofessional.Theprocessofgameprogramminginvolvesthedesignofgameframeandgameinterface,menudesign,thedefinitionofvariable,arithmaticdesignandtheimplementationofpreviewfunction.Meanwhile,othersarealsoadded,suchastheAboutdialog,statusbar,andthefunctionofgamescoressaving.Alotcanbelearnedintheprocessofprogramming,suchashowtodefinetheclassesanditsmembersandfunctions,howtobuildaprojectinJBuilder,andhowtoimplementadialogbox,andhowtoconnectdialogboxtothemainframeofusingtogether.
Keywords:
Tetris;Java;application;swingcomponent
1前言
计算机游戏如同戏剧、电影一样,是一种新型的综合性艺术产品,计算机游戏软件的开发和一般的软件产品的开发有着明显的不同,计算机游戏程序设计人员不仅需要掌握程序设计的技巧和软件工程方法,还需要有坚实的专业领域知识,才能有效地生成和实现游戏的画面内容、音效处理等。
近来,Java游戏在提供个人娱乐方面变得越来越流行,这种流行给游戏出版商带来丰厚的利润。
JAVA游戏在给游戏开发者和相关人员带来无数商机的同时,也处于极为重要的枢纽位置。
据估计,到2009年,全世界的Java游戏玩家有望达到两亿两千万之多,Java游戏开发将被规划并扩展到一个更高的层次。
同时,俄罗斯方块可以说是一款非常流行且历久弥新的老游戏,风靡全球,经久不衰。
究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解而喜欢上它的。
它之所以如此耐玩,主要在于它拥有简单的控制(只需上下左右方向键)、简单的游戏规则(有空就移,有满行就删除)及刺激的游玩过程(方块下降的速度因等级而变化)等。
俄罗斯方块这款游戏最初是由苏联的游戏制作人AlexPajitnov制作的,它看似简单但却变化无穷。
相信大多数玩家都还记得为它痴迷得茶饭不思的那个俄罗斯方块时代。
这款游戏除了好玩之外,在程序设计上也有多处值得学习的地方,如方块的旋转处理、绘图的应用及双重显示缓冲区的使用等。
整个游戏在设计上偏重逻辑的运算,其次为绘图及使用者接口的控制,在游戏设计过程中可以了解到对象的设定、绘图的技巧等。
俄罗斯方块无论从操作过程或程序设计来看,都是一款既好玩又可以在设计过程中享受成就的好游戏。
一个完整的俄罗斯方块游戏,要求带有多关卡设置、计分统计、伴有音响效果和背景音乐,可以控制游戏的开始、暂停和重玩,并具有一定的自动演示功能。
同时,还要为游戏添加其他功能,如设计About对话框,实现游戏分数的存档,为游戏添加状态栏等,并要求使用图形用户界面,界面色彩、布局要求美观,操作流畅。
主要涉及到图形用户界面的图形绘制,整个程序采用Swing图形界面,要求熟练掌握Java2图形用户界面的事件处理及部分Swing组件的使用。
在代码的编写上要考虑代码重用的思想,要深入理解抽象类和接口的作用等。
2需求分析
2.1系统开发环境
当今,运用Java语言来开发一些小游戏已经非常普遍,而一些中型游戏有时也可在网络上见到。
Java程序本身无论是在绘图、网络、多媒体等方面都提供有相当多的API链接库,甚至包括了3D领域,所以使用Java程序来设计程序可以获得相当多的资源。
而Java程序可以使用Applet来实现的属性,更使得它拥有更大的发挥空间;另一方面,目前有许多桌面游戏,也逐渐用Java来进行开发,这也是我选择Java开发的原因。
BorlandJBuilder是一种处于市场领先地位的跨平台开发环境,支持最新的Java标准,并且缩短了开发周期。
新增的功能有从输入的EJB代码中生成EJB块,并且增强了EJB2.0设计器。
JBuilder一直以其友好的集成开发环境在业界受到广泛的赞誉,这也是JBuilder一直是广大程序员最喜爱的Java开发工具的原因之一。
JBuilder的可视化集成开发环境包括文本编辑器、工程创建工具、对象浏览器和调试器等。
用户可以在集成开发环境中创建工程和打开工程,建立、打开和编辑文件,并可以编译、运行和调试应用程序。
可以说在JBuilder中开发Java程序,快速而且高效。
2.2系统玩法及规则
游戏的玩法及规则,关系着游戏本身的刺激性及耐玩度,本游戏除了基本的控制方式及规则外,还适度地增加了一些控制及规则,以便能更好地操作游戏和增强它的耐玩度。
本游戏在控制上主要采用键盘输入的方式,相关控制键如下表1所示。
表1玩游戏时使用键盘的相关控制键
Table1Usingrelatedcontrolkeyofthekeyboardtocontrolgame
attheplaygame
按键说明
↑方块方向变化
↓方块下降
←方块左移
→方块右移
Space方块直接降落到底部
续表1
按键说明
Pause游戏暂停
Esc游戏结束
如表1所列,除了一般的控制外,还新增了space(方块直接降落)等按键,这些按键都是有效加快游戏进行的控制键,其它的助记符和快捷键不再介绍。
游戏的规则如下表2所示。
表2游戏的规则
Table2Therulesofthegame
规则说明
方块移动方块会持续向下移动直到无法降落为止,使用者可按相应方向键控
—制方块向左、向右、向下移动,当按向上方向键方块会作90度的旋
—转。
移动时,预备移往的区域必须符合现在方块的方向及所占区域。
计分每次删除行数的立方乘以25再乘速度等级所得积的总和
速度等级越高速度越快
预备方块一次提示三个
如表2所示,计分方面采用线性增加的方式,这样使得游戏设计简便,再搭配3个预备方块提示,玩家更会考虑再排列方块。
2.3系统设计分析
Java为纯面向对象(Object-Oriented,OO)的程序语言,它的诸多优点在此就不作论述了。
从面向对象的观念出发,本程序可分为以下几个对象:
·方块类型数据
·程序运算逻辑
·绘图
·显示平台
分析对象的技巧在于它的重复利用及维护效率。
试想,若要把设计出来的程序在不同的显示平台(浏览器或手机)上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以本程序分析时将不变与易变的因素分别做成对象,如方块类型数据及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。
①方块类型数据
方块类型虽然形状不同,但状态与行为都是相同的,如下表3所示。
利用对象的继承属性与不同形状的特点,定义一个基础方块类(SuperBrick),其他的方块类继承此类并产生派生类,然后再重新定义表示方块形状的变量数据,就可产生新的方块样式。
如果要再新增不同的方块样式,只要再派生出不同的方块类即可。
表3方块的状态和行为
Table3Thestateandbehaviorofbox
对象要素说明
状态记录方块形态的变量
行为方块作90度旋转的方法
②程序运算逻辑
程序中逻辑运算通常只作数值的运算及分析,如方块移动时阻碍判断、方块满行判断、删除判断、方块移动或事件响应、成绩的排序等。
③绘图
绘图会因为显示平台的不同而有所不同,例如在单机与手机上的显示环境不相同,或显示效果会有所不同,例如游戏的样式作修正时,即可产生出不同的显示效果。
④显示平台
“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、PDA、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。
2.4注意事项
游戏在设计时除了将程序切割成多个对象外,在游戏的逻辑运算上应尽可能做到弹性化。
所谓弹性就是方块地图的长与宽都应该可以用参数来改变,下面就是参数定义部分代码。
publicfinalstaticintBRICK_COLS=16;//方块的列数
publicfinalstaticintBRICK_ROWS=20;//方块的行数
3概要设计
3.1系统介绍
俄罗斯方块是一个传统的游戏,这个游戏是考验玩家的反应灵敏度和几何图形的一种直觉,想必大家一定都玩过。
下面简单介绍我们要编写的这个游戏的功能。
游戏的主要功能如下:
·当游戏程序打开时,有一个登入页面,用来反应游戏的加载情况。
·游戏当然可以让玩家操纵方块来玩,这里设计用方向键和空格键来控制方块,向上键为90度旋转方块,空格键为直落方块,每种类型的方块都有各自不同的图片。
·游戏能够在玩的过程中,给出玩家的等级、分数和消除的行数。
·游戏有暂停、开始和结束等控制。
·可以让玩家来调整游戏的速度级别和障碍级别。
·可以让玩家调整游戏的声音,其包括背景音乐和音效。
·在游戏结束时,如果玩家的分数进入了前10名,则提示玩家输入名字,并将玩家的名字存入档案之中。
游戏的功能结构如下页图1所示。
3.2系统简单设计
由于我们要将这个游戏写成一个应用程序(Application),所以首先要设计一下游戏的主框架和菜单。
游戏的主框架采用标准的Windows框架,在上面有标题栏、菜单栏、工具栏,以方便玩家控制游戏。
我们应该先做好这一部分。
菜单栏和工具栏分别放菜单和工具条,这里应包括游戏的开始、暂停、重新开始、结束等控制菜单和工具。
在框架的底部还应该放进去一个状态栏,用来显示游戏的当前状态。
我们需要对菜单和工具栏的操作进行响应,并相应地来控制游戏。
这时我们需要添加对菜单和工具栏的事件响应方法。
然后,应该在一个面板上构建游戏的界面,将这个面板嵌入到游戏的大框架里。
游戏的界面包含以下三部分:
一是游戏活动区;二是游戏预备方块显示区;三是成绩显示框。
这样整个游戏的主界面就出来了。
在游戏面板构建好之后,我们应该让游戏能够玩起来,这一部分主要是编写一些算法,用来控制游戏。
这里我们还应该增加对键盘事件的响应,让玩家能够控制游戏。
最后,我们再来改进这个游戏,使得在游戏结束时能够判断玩家的分数在存档内是不是前10名,如果是,则将玩家的分数存档。
3.3系统功能设计
⑴登入页面
由一张图片和一个进度条组成。
“图片”:
用来显示游戏的一些信息。
“进度条”:
用来显示游戏进入主程序的时间。
⑵游戏主页面
结束游戏
输入信息对话框
游戏结束对话框
高级
蓝色天空菜单项
巴乔传奇菜单项
一级
初级
五级
四级
三级
二级
中级
开始游戏子菜单
放弃游戏菜单项
退出游戏菜单项
暂停游戏菜单项
重新开始菜单项
速度等级子菜单
障碍等级子菜单
播放背景音乐菜单项
游戏文字说明菜单项
播放音效菜单项
排行榜菜单项
关于菜单项
游戏菜单
设置菜单
成绩菜单
帮助菜单
方块活动区
预备方块显示区
成绩状态显示区
菜单条
登入页面
游戏开始
游戏主页面
游戏面板
状态栏
图1游戏功能结构图
FiglThefunctionalstructurechartofthegame
由菜单条、游戏面板和状态栏组成,分别说明如下:
①菜单条:
1、“游戏”菜单,包含2个菜单项和1个子菜单组成。
“开始游戏”:
用来选择游戏版本和运行游戏。
“放弃游戏”:
用来退出当前游戏,返回主页面。
“退出游戏”:
用来退出程序。
2、“设置”菜单,它包含6个菜单项。
“暂停游戏”:
用来暂停游戏,再次点击时可以取消暂停。
“重新开始”:
用来重玩游戏。
“速度等级”:
用来选择游戏的难易级别。
“障碍等级”:
用来选择游戏的障碍级别。
“播放背景音乐”:
用来播放场景音乐,版本不同,音乐不同。
“播放音效”:
用来播放一些触发音乐,它随着版本不同而异。
3、“成绩”菜单,它只包含1个菜单项。
“排行榜”:
用来查看分数为前10名的玩家信息。
4、“帮助”菜单,它包含2个菜单项。
“游戏文字说明”:
以文字的形式,说明游戏的功能和玩法。
“关于”:
用来显示游戏的一些版本信息。
②游戏面板:
1、“方块活动区”,方块程序在里面进行。
2、“预备方块显示区”,用来显示预备的三个方块组。
3、“成绩状态显示区”,用来显示游戏级别、分数和消除的行数。
③状态栏:
用来显示游戏的状态,它包含有三个状态:
游戏装载完毕、游戏运行
中及暂停游戏。
⑶游戏结束页面
由游戏结束显示框和输入个人信息显示框组成。
①游戏结束显示框:
用来显示游戏已经结束,并让玩家选择是保存信息,还是退出游戏。
②输入个人信息显示框:
用来输入玩家的一些个人信息,保存在成绩表中,并退出程序。
3.4系统流程
游戏流程如下页图2所示。
是
否
是
游戏结束
游戏开始
1.检查满行
2.删除满行
3.重绘地图方块
移动方块
接受按钮输入的控制信息
产生控制方块下降的执行信息
1.显示方块于地图中2.产生下一个方块
检查方块在地图上是否有阻碍发生
方块移动时是否有障碍
方块是否无法下移
游戏结束,是否重玩
游戏结束,分数是否进入前10名
否
否
否
否
是
是
是
输入个人信息
图2游戏流程图
Fig2Flowchartofgame
4系统详细设计
4.1设计游戏框架
AWT最初的设计目标是让程序员构建一个通用的图形用户接口(GUI),但是,这个目标并没有达到。
在Java1.0抽象窗口工具包产生的是在各个系统看来都欠佳的图形用户接口。
除此之外,它还限制只能使用4种字体,限制我们不能够访问操作系统中现有的高级GUI元素。
在Java1.1里,对抽象窗口工具包进行了很好的改进,更加
清晰、面向对象的编程使得我们使用起来更加方便。
在Java1.2里,又增添了Java的
基础类(JFC),这是一个被称为Swing的GUI的一部分。
Swing的使用方法很简单,类似AWT包里类的使用方法。
⑴编写游戏框架
先使用JBuilder新建一个项目,这次我们将使用最简单的方法建立应用程序框架。
先建立一个工程,将工程的名字命名为winimagetetirs。
在JBuilder的主菜单中,选择File主菜单→New子菜单项→General选项卡→Application选项,点击OK按钮,进入应用程序向导对话框。
在对话框中规定应用程序主类的名称为:
AppMain,如下图3所示。
图3创建Application的向导界面1
Fig3Thefirstwizardinterfaceofbuildingapplication
接下来我们要命名程序界面框架的名称。
在当前的对话框中点击Next按钮,进入应用程序向导第二步,在这里命名Frame类的名称和标题分别为FrameMain和winimagetetirs,如下图4所示。
接着点击Finish按钮,JBuilder就为我们建立好了一个应用程序框架。
这个应用程序框架中有一个主类AppMain和一个界面框架类FrameMain。
我们还要写一个方法,用来初始化窗口的大小和位置,代码如下:
窗口位置代码:
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2-12);
窗口大小代码:
this.setBounds(0,0,game_area_width+info_area_width+12,
game_area_height+59+28);
我们应该在构造方法里调用这个方法。
关掉系统可以调用System.exit()方法,关掉整个窗口可以使用Frame.dispose()方法。
图4创建Application的向导界面2
Fig4Thesecondwizardinterfaceofbuildingapplication
⑵为游戏编写菜单项
游戏的菜单包含“游戏”、“设置”、“成绩”、“关于”4个主菜单。
我们使用UI设计器中的菜单设计器来进行菜单项的编辑。
我们应该对界面类FrameMain进行编辑,因为这个类用于界面的显示,所有的组件都要添加在这个类中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JAVA 技术 俄罗斯方块 游戏 设计 实现