基于JAVA的俄罗斯方块游戏设计与实现【文献综述】

基于JAVA的俄罗斯方块游戏设计与实现【文献综述】

ID:437553

大小:48.00 KB

页数:9页

时间:2017-08-02

上传者:U-944
基于JAVA的俄罗斯方块游戏设计与实现【文献综述】_第1页
基于JAVA的俄罗斯方块游戏设计与实现【文献综述】_第2页
基于JAVA的俄罗斯方块游戏设计与实现【文献综述】_第3页
基于JAVA的俄罗斯方块游戏设计与实现【文献综述】_第4页
基于JAVA的俄罗斯方块游戏设计与实现【文献综述】_第5页
资源描述:

《基于JAVA的俄罗斯方块游戏设计与实现【文献综述】》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

毕业论文文献综述计算机科学与技术基于JAVA的俄罗斯方块游戏设计与实现1.引言俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏。此游戏由于游戏简单、操作方便而备受大家青睐。电脑游戏软件的出现使计算机应用的世界更加绚丽多彩,然而游戏开发领域因涉及程序设计、图形图像、动画、音频等多方面技术而长期以来使很多电脑爱好者望而却步,更不适合一般的院校课堂教学。经典的俄罗斯方块游戏却是一个特例,它规则简单,所有人都比较熟悉,而且涉及到键盘控制、计时功能、图形的绘制以及其他逻辑问题,是一个比较综合而相对难度不很大的游戏,很适合初学者学习计算机程序开发技术,锻炼自己的动手能力。2.JAVA特性2.1面向对象Java的特点之一就是面向对象[2],是程序设计方法的一种。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的实际集合体叫做“对象”。一个对象可以想象成绑定了很多“行为(代码)”和“状态(数据)”的物体。对于数据结构的改变需要和代码进行通信然后操作,反之亦然。面向对象设计让大型软件工程的计划和设计变得更容易管理,能增强工程的健康度,减少失败工程的数量。面向对象设计另外一个目标就是能产生很多的有关联的类,可以让软件的再开发变得简单。举例来说,很多软件工程都有同样的功能,尤其是很多应用了同一原理组织的软件工程。软件的二次开发者想自己为软件开发插件以增强功能的时候,绝对不想看到混乱的开发代码和管理计划。面向对象的目的就是不生产难懂且难以使用的代码,为软件各个功能群之间创建有效的通信通道。很多开源软件社区正在计划给软件作者提供更多的类来让软件的二次开发变得简便。2.2跨平台性Java语言的第二个特性就是跨平台性[4],也就是说使用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“9 一次编译,到处运行”。执行Java应用程序必须安装JavaRuntimeEnvironment(JRE),JRE内部有一个Java虚拟机(JavaVirtualMachine,JVM)以及一些标准的类库(ClassLibrary)。通过JVM的虚拟机才能在电脑系统执行Java应用程序(JavaApplication),这与.NetFramework的情况一样,所以电脑上没有安装JVM,那么这些程序将不能够执行。实现跨平台性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码(Bytecode)写成的“半成品”,这个“半成品”会在Java虚拟机[7](解释层)的帮助下运行,虚拟机会把它转换成当前所处硬件平台的原始代码。之后,Java虚拟机会打开标准库,进行数据(图片、线程和网络)的访问工作。主要注意的是,尽管已经存在一个进行代码翻译的解释层,有些时候Java的字节码代码还是会被JIT编译器进行二次编译。有些编译器,比如GCJ[1],可以自动生成原始代码而不需要解释层。但是这些编译器所生成的代码只能应用于特定平台。并且GCJ目前只支持部分的JavaAPI[8]。甲骨文公司对于Java的许可是“全兼容的”,这也导致了微软和升阳关于微软的程序不支持RMI和JNI接口、并且增加特性为己所用的法律争端。升阳最终赢得了官司,获得了大约两千万美元的赔偿,法院强制要求微软执行升阳公司关于Java的许可要求。作为回应,微软不再在Windows系统中捆绑Java,最新的Windows版本,WindowsVista和InternetExplorer7.0版本也不再提供对于Java应用程序和控件的支持。但是升阳公司和其他使用Java运行时系统的公司对于微软的操作对用户提供无偿的第三方插件和程序支持。Java语言使用解释层最初是为了轻巧性。所以这些程序的运行效率比C语言和C++要低很多,用户也对此颇有微词。很多最近的调查显示Java的程序运行速度比几年前要高出许多,有些同样功能的程序的效率甚至超过了C++和C语言编写的程序。Java语言在最开始应用的时候是没有解释层的,所有需要编译的代码都直接转换成机器的原始代码。这样做的后果就是获得了最佳的性能,但是程序臃肿异常。从JIT技术开始,Java的程序都经过一次转换之后才变成机器码。很多老牌的第三方虚拟机都使用一种叫做“动态编译”的技术,也就是说虚拟机[9]实时监测和分析程序的运行行为,同时选择性地对程序所需要的部分进行编译和优化。所有这些技术都改善了代码的运行速度,但是又不会让程序的体积变得失常。程序的轻便性事实上是软件编写很难达到的一个目标,Java虽然成功地实现了“一次编译,到处运行”,但是由于平台和平台之间的差异,所编写的程序在转换代码的时候难免会出现微小的、不可察觉的错误和意外。有些程序员对此非常头疼,他们嘲笑Java的程序不是“一次编译,到处运行”[5],而是“一次编译,到处调试”。平台无关性让Java在服务器端软件领域非常成功。很多服务器端软件都使用Java或相关技术创建。2.3自动垃圾回收(GarbageCollection)[3]9 C++语言被用户诟病的原因之一是大多数C++编译器不支持垃圾收集机制。通常使用C++编程的时候,程序员于程序中初始化对象时,会在主机存储器堆栈上分配一块存储器与地址,当不需要此对象时,进行解构或者删除的时候再释放分配的存储器地址。如果对象是在堆栈上分配的,而程序员又忘记进行删除,那么就会造成存储器泄漏(MemoryLeak)。长此以往,程序运行的时候可能会生成很多不清除的垃圾,浪费了不必要的存储器空间。因此如果同一存储器地址被删除两次的话,程序会变得不稳定,甚至崩溃。因此有经验的C++程序员都会在删除之后将指针重置为0,然后在删除之前先判断指针是否为0。C++中也可以使用“智能指针”(SmartPointer)或者使用C++托管扩展编译器的方法来实现自动化存储器释放,智能指针可以在标准类库中找到,而C++托管扩展被微软的VisualC++7.0及以上版本所支持[7]。智能指针的优点是不需引入缓慢的垃圾收集机制,而且可以不考虑线程安全的问题,但是缺点是如果不善使用智能指针的话,性能有可能不如垃圾收集机制,而且不断地分配和释放存储器可能造成存储器碎片,需要手动对堆进行压缩。除此之外,由于智能指针是一个基于模板的功能,所以没有经验的程序员在需要使用多态特性进行自动清理时也可能束手无策。3.游戏系统简介俄罗斯方块是由下面这几种常见方块构成,全部为四点组成:长条:一次最多消除四层7(左右):最多消除三层,或消除二层L:最多消除三层,或消除二层田:消除一至二层S(左右):最多二层,容易造成孔洞Z(左右):最多二层,容易造成孔洞T:最多二层部分游戏有单格方块,可以穿透固定的方块到达最下层空位。其他的改版中出现更多特别的造型。方块会从区域上方开始缓慢继续落下。玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。同时删除的列数越多,得分指数上升。当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。9 一般来说,游戏还会提示下一个要落下的方块,熟练的玩家会计算到下一个方块,评估现在要如何进行。由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。3.1游戏规则单击“开始/暂停”按钮开始游戏或暂停游戏。游戏过程中,系统随机产生方块图形,并自动下落,用户可以通过特定按键来控制方块图形的变化和移动(详见帮助菜单);预览窗口显示下一个方块图形;每下落一个方块系统会自动加四分;当某行被填满,系统会自动消去被填满的行,并加相应的消除的行数;当消除行数增加一定数量(本系统设为10行),速度会上升一级,方块图形自动下落的速度会变快;每个方块图形下落到最底部或消行时,系统播放相应的声音;当方块图形已达到图形区域界面的最顶端时,游戏结束,系统也会播放相应的声音。用户可单击网页的“刷新”按钮重新开始新一轮的游戏[14]。3.2游戏界面本游戏界面分三大模块[12],分别是游戏界面模块、显示模块、按钮模块。(1)游戏界面模块:是在玩游戏时,方块下落、堆积的一个区域;(2)显示模块:包括显示游戏等级、消除的行数、得分及下一个方块的预览;(3)按钮模块:包括了“信息”按钮和“开始/暂停”按钮。本系统有五大模块分别是:游戏控制(Control类)、游戏主函数(Game)、显示游戏画面的画布对象(Canvas)、方格对象(ErsBlock类)、方块对象(Block类)。其中,4个方格对象组成一个方块对象。在游戏的操作上,是利用键盘来控制方块的移动来实现游戏。4.游戏制作编程需求随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置三关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。游戏功能要求如下:1.游戏界面需求:良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感[18]。2.游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。3.键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。4.9 显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定的分数时过关。设置三关,每关方块下落的速度不同。9 5.游戏主要类5.1ErsBlocksGame游戏主函数游戏主函数(1)ErsBlocksGame(stringtitle),主游戏类的构造函数。(2)reset(),游戏画板重置。(3)isplaying(),判断游戏是否还在进行。(4)getCurBlock(),得到当前活动块的引用。(5)GameCanvasgetCanvas(),得到当前游戏面板的引用。(6)playGame(),开始游戏。(7)pauseGame(),游戏暂停。(8)resumeGame(),让暂停中游戏继续。(9)stopGame(),停止游戏。(10)getLevel(),得到当前游戏者设置的游戏难度。(11)setLevel(),让用户设置游戏难度。(12)getScore(),得到游戏积分。(13)getScoreForLevelUpdate(),得到自上次升级以来的游戏积分。(14)levelupdate(),当分数累计到一定的数量时,升一次级。(15)play(),游戏开始。(16)reportGameOver(),报告游戏结束了。(17)CreateMenu(),建立并设置窗口菜单。(18)Game(),一轮游戏是一个大循环。(19)checkFullLine(),检查游戏面板中是否有全填满的行,如果有就删除之。(20)isGameOver(),根据最顶行是否被占,判断游戏是否已经结束了。5.2ErsBlock游戏方块类(1)ErsBlock(intstyle,inty,intx,intlevel,GameCanvascanvas),构造函数,产生一个特定的块。(2)Display(),让当前块放置在游戏面板的对应位置上,要等到下次重画游戏面板时才能看见。(3)isMoveAble(intnewRow,intnewCol),当前块能否移动到newRow/newCol所指定的位置。(4)earse(),将当前块从游戏面板的对应位置移除,要等到下次重画游戏面板时才能反映出来。(5)MoveTo(),将当前画移动到newRow/newCol所指定的位置。9 (6)isTurnAble(intnewStyle),当前块能否变成newStyle所指定的块样式,主要是要考虑,边界以及被其它块挡住、不能移动的情况。(7)run(),线程类的run()函数覆盖,下落块,直到块不能再下落。(8)moveLeft(),块向左移动一格。(9)moveRight(),块向右移动一格。(10)moveDown(),块向下落一格。(11)turnNext(),块变形调用turnTo。(12)turnTo(intnewStyle),将当前块变成newStyle所指定的块样式。(13)pauseMove(),暂停块的下落,对应游戏暂停。(14)resumeMove(),继续块的下落,对应游戏继续。(15)stopMove(),停止块的下落,对应游戏停止。5.3ErsBox方格类(1)ErsBox(booleanisColor),方格类的构造函数。(2)isColorBox(),此方格是不是用前景色表现。(3)SetColor(),设置方格的颜色。(4)DimensiongetSize(),得到此方格的尺寸。(5)setSize(Dimensionsize),设置方格的尺寸。(6)clone(),覆盖Object的Objectclone(),实现克隆。5.4GameCanvas画板类(1)GameCanvas(introws,intcols),游戏面板类的构造函数。(2)GameCanvas(introws,intcols,ColorbackColor,ColorfrontColor),游戏面板类的构造函数。(3)SetBackgroundColor(colorbackColor),设置游戏背景色彩。(4)getBackgroundColor(),取得游戏背景色彩。(5)setBlockColor(colorfrontColor),设置游戏方块色彩。(6)getBlockColor(),取得游戏方块色彩。(7)getRows(),取得游戏面板中方格的行数。(8)getCols(),取得游戏面板中方格的列数。(9)getScore(),取得游戏成绩。(10)getScoreForLevelUpdate(),取得自上一次升级后的积分。(11)resetScoreForLevelUpdate()升级后,将上一次升级以来的积分清零。(12)ErsBoxgetBox(introw,intcol),得到某一行某一列的方格引用。9 (13)PaintConponent(Graphicsg),覆盖JComponent类的函数,画组件。(14)Fanning(),根据窗口的大小,自动调整方格的尺寸。(15)Removeline(introw),当一行被游戏者叠满后,将此行清除,并为游戏者加分。(16)Reset(),重置游戏面板,置积分为零。5.5ControlPanel游戏控制类(1)ControlPanel(finalErsBlocksGamegame),控制面板类的构造函数。(2)SetTipStyle(intstyle),设置预显窗口的样式。(3)getLevel(),取得用户设置的游戏等级。(4)SetLevel(intlevel),让用户修改游戏难度等级。(5)SetplayButtonEnable(Booleanenable),设置"开始"按钮的状态。(6)SetPauseButtonLabel(booleanpause),设置"暂停"按钮的状态。(7)reset(),重置控制面板。(8)fanning(),重新计算TipPanel里的boxes[][]里的小框的大小。(9)TipPanel(),预显窗口类构造函数。(10)TipPanel(ColorbackColor,ColorfrontColor),预显窗口类构造函数。(11)SetStyle(intstyle),设置预显窗口的方块样式。(12)PaintComponent(Graphicsg),覆盖JComponent类的函数,画组件。(13)ControlKeyListener,控制方向键适配器。6.总结本软件只包括了俄罗斯方块游戏最基本的功能,功能还不够完善,但其短小精悍、易于扩充。可在其基础上进行如下扩充:在CGame类中添加游戏者姓名、游戏难度级别、游戏暂停以及游戏恢复,显示下一个方块等功能;可设置屏幕的任意大小,而不必拘泥与的方格大小。可以在Cgrid类中增加方块的种类,也不局限于本游戏中的7种方块类型;还可引入数据库的功能,来管理游戏者及分数,增加游戏触发事件,还可设置多种游戏背景等。9 参考文献[1]赵强,乔新亮.J2EE应用开发[M].北京:电子工业出版社.2003.[2]张海藩.软件工程导论.清华大学出版社,2008.2[3]李尊朝,苏军.Java语言程序设计.中国铁道出版社,2006.1[4]HarveyM.Deitel.javahowtoprogram.PearsonEducation,2001.8[5]陈东.编程常用设计模式.电子工业出版,2005.10[6]AndyBudd&CameronMoll&SimonCollison.CSSMastery:AdvancedWebStandardsSolutions.Apress,2006.10[7]邱郁惠.系统分析师UML实务手册.机械工业出版社,2008.04[8]王鹏,何昀峰.JavaSwing图形界面开发与案例详解.清华大学出版社,2008.12[9]JonathanS.Harbour.Java5游戏编程.机械工业出版社,2007.01[10][美]RogersCadenhead.Java编程入门经典.梅兴文译.第4版.北京:人民邮电出版社,2007[11][美]BruceEckel.ThinkingInJava.英文第4版.北京:机械工业出版社,2007[12]陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,2006[13]杨昭编著.二级Java语言程序设计教程.北京:中国水利水电出版社,2006[14]赵文靖编著.Java程序设计基础与上机指导.北京:清华大学出版社,2006[15]赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,2006[16]王路群.Java高级程序设计.北京:中国水利水电出版社,2006[17][美]HerbertSchidt著.Java参考大全.鄢爱兰.鹿江春译.北京:清华大学出版社,2006[18]宛延闿等编著.实用Java程序设计教程.北京:机械工业出版社,2006[19]陈国君等编著.Java2程序设计基础.北京:清华大学出版社,20069

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭