基于Java的俄罗斯方块的设计和实现-毕业论文.docx
《基于Java的俄罗斯方块的设计和实现-毕业论文.docx》由会员分享,可在线阅读,更多相关《基于Java的俄罗斯方块的设计和实现-毕业论文.docx(31页珍藏版)》请在冰点文库上搜索。
河北农业大学本科毕业论文
题 目:
基于Java的俄罗斯方块的设计与实现
摘要
俄罗斯方块作为一款风靡全球的多样化终端游戏,经久不衰。
俄罗斯方块简单的基本游戏规则是旋转、移动,游戏自动随机输出7种形状的方块,经旋转后可形成28种形状,方块堆叠在一起,排列成完整的一行或多行消除得分,积分达到一定程度会自动提升级别。
该游戏上手简单、老少皆宜、家喻户晓。
本论文在详尽分析传统俄罗斯实现的基本原理、基本规则基础上,更深一步地研究俄罗斯方块的创新模式,在经典模式基础上开发出等级可变的模式,本文对以上功能给出了实现流程、详尽描述、和部分源代码。
程序是在MicrosoftWindows7系统下,以Java为开发语言,在MyEclipse开发平台上进行游戏的设计与实现。
关键词:
游戏;软件工程;MyEclipse
Abstract
Tetrisisapopularglobaldiversificationterminalgame,enduring.ThebasicrulesofthegameTetrissimpleisrotating,moving,thegameautomaticallyrandomoutput7shapebox,therotationcanbeformedafterthe28squareshape,stackedtogether,arrangedtocompleteoneormorerowstoeliminatethescore,theintegraltoacertainextentwillautomaticallyupgradethelevelof.Thegamestartedsimple,suitableforallages,makeknowntoeveryfamily.
InthispaperadetailedanalysisofthebasicrulesoftraditionalRussianbasicprinciple,onthebasisoftherealizationofinnovationmode,furtherstudyofTetris,developedaclassvariablemodelintheclassicalmodel,theabovefunctiongivestheimplementationprocess,detaileddescription,andpartofthesourcecode.ThisdesignisintheMicrosoftWindows7system,takingJavaasthedevelopmentlanguage,forgamedesignandImplementationonMyEclipseplatform.
Keywords:
Game;softwareengineering;MyEclipse
目录
1绪论 1
1.1俄罗斯方块游戏的背景 1
1.2俄罗斯方块游戏的规则 1
1.3研究俄罗斯方块游戏的意义 1
1.4论文组织 2
2相关技术分析 3
2.1JAVA语言概述 3
2.2Eclipse简介 4
3需求分析 6
3.1系统需求 6
3.2接口控制 6
4系统设计 7
4.1软件运行和开发工具 7
4.2系统功能设计 7
4.2.1手工处理业务的基本流程 7
4.2.2基本流程的功能模块 9
5系统实现 11
5.1游戏主界面显示模块 11
5.2画布、方块显示模块 12
5.2.1背景画布模块设计 12
5.2.2预览方块模块设计 14
5.2.3方块移动、旋转设计 16
5.3控制面板模块 20
5.3.1菜单栏模块设计 20
5.3.2控制面板按钮设计 22
6总结 23
参考文献 24
致谢 25
1绪论
1.1俄罗斯方块游戏的背景
俄罗斯方块是俄罗斯人阿列克谢•帕基特诺夫(AlexeyPazhitnov)发明。
1985年6月工作于莫斯科科学计算机中心的阿列克谢·帕基特诺夫在玩过一个拼图游戏之后受到启发,从而制作了一个以Electronica60(一种计算机)为平台的俄罗斯方块的游戏。
后来经瓦丁·格拉西莫夫(VadimGerasimov)移植到PC上,并且在莫斯科的电脑界传播。
人们一开始并没预料到它将会有如此广泛的吸引力。
实际上,在游戏发明后的数年间,俄罗斯方块成了无数场专利官司和法律纠纷的目标,而许多公司也不遗余力地上阵厮杀,想要
将游戏的创意据为己有。
一个最初的版本是SpectrumHolobyte为IBM兼容机开发的游戏。
1988年,俄罗斯方块在街机上也变得非常流行,这归功于Atari,因为他们发布了一个能让两名玩家同时游戏的版本。
俄罗斯方块经常被称为拼图游戏。
玩家需要找出如何能把各块积木最好的拼在一起的方法。
俄罗斯方块相当于直角的智力拼图游戏,或者其它一种“在这有限空间内组织几何体”的拼图。
俄罗斯方块为了创造真正引人入胜的游戏,它巧妙的平衡了拼图游戏与动作游戏的机制。
因而每个人玩这个游戏都会有一次不同的体验。
俄罗斯方块所用到的一种动作游戏机制是越来越逼近的威胁感,留给玩家的时间总是非常有限。
俄罗斯方块中积木是从上面落下来。
如果玩家不在积木落到屏幕底下或翻转它,不能给它找一个最有利的位置,这块积木就可能会堵住某处,而它下面的几行也就没有办法拼接完整,玩家也就离游戏结束又靠近了一行或几行。
在游戏进程中,积木落下来的速度越来越快,这样对玩家的挑战也就越来越大,游戏的难度也逐步增加。
2014年2月22日,英国心理学家发现,减肥者通过玩俄罗斯方块,可以降低对富含脂肪的食物和零食的心理需求;尝试戒烟者的烟瘾也能得到遏制[1]。
1.2俄罗斯方块游戏的规则
由小方块组成的不同形状的板块陆续从屏幕上方落下来,玩家通过调整板块的位置和方向,使它们在屏幕底部拼出完整的一条或几条。
这些完整的横条会随即消失,给新落下来的板块腾出空间,与此同时,玩家得到分数奖励。
没有被消除掉的方块不断堆积起来,一旦堆到屏幕顶端,玩家便告输,游戏结束[2]。
1.3研究俄罗斯方块游戏的意义
在成为一个真正的游戏开发者的路上,俄罗斯方块是一个完美开始。
并且,不需要艺术家般的才能就能做出非常好看的俄罗斯方块游戏。
任何一个能画出方块的人每个作图形程序的人都会的就能做出商业品质的俄罗斯方块游戏。
以俄罗斯方块开始还有另外一个好处,不仅能做出一个完整的既好玩又容易上瘾游戏,而且它看上来和那些商业版本没什么区别。
方块就是方块,不管是谁画出它们的,而且tetraminos(俄罗斯方块中使用的形状)也不过是一些方块的组合。
1
俄罗斯方块拥有所有游戏共通的独立成份。
它有一个游戏循环(这个过程被反复执行直到游戏退出)。
这个游戏循环读取玩家的输入,处理这个输入,然后更新游戏的元素(下落的tetraminos),并且检查是输还是赢[3]。
以后要做的所有的简单的游戏都要用到这些东西,所以学习这个过程并且实现它是非常重要的。
当第一次完成它之后,以后再做游戏时就能看出那个游戏有多难以及要花多长时间。
如果没有完整的完成过这些,哪怕一次,就永远不能完整地正确领会其中的每个元素。
当做大的项目时,就更不能确定其复杂性及所要的时间。
如果甚至不能正确地领会这整个过程(因为你没能完成它),可能是没能建立一个合适的时间表或估计合适的时间,更有可能的是不够努力。
还有,玩俄罗斯方块可以练习人的反映能力,开始时快速的下降会让人手无足措,但适应了之后就会发现自己的反应力变的很快了。
其次长时间的手指活动可以让人血液流通加快有利健康。
还有俄罗斯方块高手都知道要想赢,就要有远大的布局,决不能只局限于一点一点的减,这在无形中就提高了人的智慧。
1.4论文组织
论文全文共分为六章:
第一章绪论:
主要介绍了游戏的背景、规则及研究此游戏的意义。
第二章相关技术分析:
介绍了Java语言和开发环境Eclipse的相关知识。
第三章需求分析:
主要介绍了系统设计思想、功能和性能需求。
第四章系统设计:
主要介绍了系统的功能设计。
第五章系统实现:
介绍了系统的所有模块和它的功能。
第六章总结:
回顾开发此游戏的艰辛过程与人生感悟。
2
2相关技术分析
JAVA语言概述
2.1
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言[4],是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE,JavaME,JavaSE)的总称。
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。
Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Java语言是易学的。
Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。
另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。
特别地,Java语言不使用指针,而是引用。
并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
Java语言是强制面向对象的。
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。
总之,Java语言是一个纯的面向对象程序设计语言。
Java语言是分布式的。
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(javanet),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。
Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
Java语言是健壮的。
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。
对指针的丢弃是Java的明智选择。
Java的安全检查机制使得Java更具健壮性。
Java语言是安全的。
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。
除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
Java语言是体系结构中立的。
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
这种途径适合于异构的网络环境和软件的分发。
Java语言是可移植的。
这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。
Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSIC实现的。
Java语言是解释型的。
如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。
在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
3
Java是性能略高的。
与那些解释型的高级脚本语言相比,Java的性能还是较优的。
Java语言是原生支持多线程的。
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。
通常有两种方法来创建线程:
其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。
值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。
线程的活动由一组方法来控制。
Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
Java语言是动态的。
Java语言的设计目标之一是适应于动态变化的环境。
Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。
这也有利于软件的升级。
另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用[5]。
Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。
Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。
特别是Java企业应用编程接口(Java
EnterpriseAPIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库[6-7]。
Eclipse简介
2.2
Eclipse是著名的跨平台的自由集成开发环境(IDE)[8]。
最初主要用来Java语言开发,
但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse最初是由IBM公司开发的替代商业软件VisualAgeforJava的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(EclipseFoundation)管理。
2003年,Eclipse3.0选择OSGi服务平台规范为运行时架构。
2007年6月,稳定版3.3发布。
2008年6月发布代号为Ganymede的3.4版[9]。
Eclipse的基础是富客户机平台(RichClientPlatform,即RCP)。
RCP包括下列组
件:
(1)核心平台(启动Eclipse,运行插件)
(2)OSGi(标准集束框架)(3)SWT(可移植构件工具包)(4)JFace(文件缓冲,文本处理,文本编辑器)
(5)Eclipse工作台(即Workbench,包含视图(views)、编辑器(editors)、视角(perspectives)、和向导(wizards))
Eclipse采用的技术是IBM公司开发的(SWT),这是一种基于Java的窗口组件,类似Java本身提供的AWT和Swing窗口组件;不过IBM声称SWT比其他Java窗口组件更有效率。
Eclipse的用户界面还使用了GUI中间层JFace,从而简化了基于SWT的应用程序
的构建。
4
Eclipse的插件机制是轻型软件组件化架构。
在富客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。
已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby,Python、telnet和数据库开发。
插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。
Eclipse的设计思想是:
一切皆插件。
Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。
Eclipse基本内核包括:
图形API(SWT/Jface),Java开发环境插件(JDT),插件开发环境(PDE)等。
Eclipse由各种不同的计划组成。
以下列出了部分计划。
(1)Eclipse计划:
本身包括Eclipse平台,Eclipse富客户端平台(RCP)和Java
开发工具(JDT)。
(2)Eclipse测试和性能工具平台(TPTP):
提供一个允许软件开发者构建诸如测试调试、概况分析、基准评测等测试和性能工具的平台。
(3)EclipseWeb工具平台计划(WTP):
用Java企业版Web应用程序开发工具来扩展Eclipse平台。
它由以下部分组成:
HTML、JavaScript、CSS、JSP、SQL、XML、DTD、XSD和WSDL的源代码编辑器;XSD和WSDL的图形界面编辑器;Java企业版的“项目性质”
(projectnature)、建构器(builder)和模型(model),与一个Java企业版的导航
(navigator);一个Web服务(Webservice)向导和浏览器,还有一个WS-I测试工具;最后是数据库访问查询的工具与模型。
(4)Eclipse商业智能和报表工具计划(BIRT):
提供Web应用程序(特别是基于
Java企业版的)的报表开发工具。
(5)Eclipse可视化界面编辑器计划(VEP):
一个Eclipse下创建图形用户界面代码生成器的框架。
(6)Eclipse建模框架(EMF):
依据使用XMI描述的建模规格,生成结构化数据模型的工具和其他应用程序的代码。
(7)图形化编辑器框架(GEF):
能让开发者采用一个现成的应用程序模型来轻松地创建富图形化编辑器。
(8)UML2:
Eclipse平台下的一个UML2.0元模型的实现,用以支持建模工具的开发。
(9)AspectJ:
一种针对Java的面向侧面语言扩展。
(10)Eclipse通讯框架(ECF):
专注于在Eclipse平台上创建通讯应用程序的工作。
(11)Eclipse数据工具平台计划(DTP)
(12)Eclipse设备驱动软件开发计划(DSDP)
(13)C/C++开发工具计划(CDT):
努力为Eclipse平台提供一个全功能C和C++的集成开发环境(IDE),它使用GCC作为编译器。
(14)Eclipse平台COBOL集成开发环境子计划(COBOL):
将构建一个Eclipse平台上的全功能COBOL集成开发环境。
(15)并行工具平台(PTP):
将开发一个对并行计算机架构下的一组工具进行集成的平行工具平台,而且这个平台是可移植的,可伸缩的并基于标准的。
(16)嵌入式富客户端平台(eRCP):
计划将Eclipse富客户端平台扩展到嵌入式设备上。
这个平台主要是一个富客户端平台(RCP)组件子集的集合。
它能让桌面环境下的应用程序模型能够大致同样地能运用在嵌入式设备上。
5
3需求分析
对系统的需求分析就是用户和开发人员在“系统必须做什么”这个问题上实现相互理解,达到共识,从而形成双方认可的软件产品的需求规格。
这样有利于提高软件开发过程中的能见度,便于对软件开发过程的控制与管理,便于采用工程化的模式开发软件,从而达到提高软件的质量,为开发人员、维护人员、管理人员之间的交流、协作提供便捷。
作为工作成果的原始依据,系统的需求分析可以向潜在用户传递软件功能、性能的需求,使其能够判断该软件是否符合自己的需求。
3.1系统需求
系统随机产生7中不同形状的方块,旋转后有28种状态。
方块自由下落,玩家通过键盘控制方块的移动和旋转,把方块摆放在适当的位置。
如果方块落下时,有被方块填满的整行,则该行可消去。
每消去一行,玩家得分增加10分,每满50分,玩家等级增加一级。
若由存在空格的方块填满整个窗口,则游戏宣告失败。
游戏功能需求如下:
游戏界面需求:
设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的默认背景色是灰色,主界面方块默认用浅绿色,预显方块颜色默认为红色。
背景色、前景色对比鲜明,以达到让玩家眼前一亮的感觉,并能在游戏达到高等级状态,方块下落速度渐高的情况下使玩家能够清楚的分辨出下落方块的形状,增加游戏的刺激性。
游戏形状需求:
用数组作为存储方块28种状态的数据结构,即长条形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7种形状的向4个方向的旋转变形,各个方块要能实现它的任意变形,可设为顺时针变形或逆时针变形,一般为逆时针变形。
方块的可否翻转需要加以判断,以防止其翻转越界。
键盘处理事件需求:
方块下落时,可通过键盘方向键(上键、下键、左键、右键)向上(旋转变形)、向下(加速下落)、向左移动、向右移动。
鼠标处理事件需求:
通过点击菜单栏中相应的菜单项或控制面板内的按钮,可以实现游戏的开始、结束、暂停、继续、提高等级、降低等级,预显方块形状的显示,分数、等级的显示,以及游戏帮助等功能。
显示需求:
当方块填满一行时可以消行,剩余未填满的行逐次向下移动并统计分数。
当达到一定分数的时候,会增加相应的等级。
当方块充满主界面的每一行,方块不能再下落时,提示“亲!
你输了!
”的字样。
非功能性需求:
本系统非功能性需求包括游戏主界面窗口尺寸可调整性需求、游戏运行时主界面弹出位置居中需求等。
3.2接口控制
本游戏通过键盘和鼠标进行操作,在Windows的操作系统下,利用键盘的按键对方块进行移动、变形,要使用到键盘的接口事件。
游戏使用鼠标对游戏进行全程控制,如游戏的开始、暂停、继续、查看游戏帮助、更改游戏等级等,通过对鼠标单击、按键添加监听事件,编辑相应代码来实现相应功能。
6
4系统设计
4.1软件运行和开发工具
操作系统:
MicrosoftWindows7
内存:
2G硬盘:
500G
CPU:
Intel(R)Core(TM)i3-2310M
交互工具:
键盘、鼠标显示器:
VGA显示器JDK版本:
jdk1.7.0_25
Eclipse版本:
MyEclipse4.3.0SDK-3.4.1-win64
4.2系统功能设计
4.2.1手工处理业务的基本流程
本游戏的设计以娱乐为初衷,以益智为目的,在综合研究以往俄罗斯方块经典游戏功能的基础上推陈出新,加之新的功能,赋以新的生机和活力。
图4-1为游戏基本流程图具体阐述游戏的基本流程。
运行说明:
1>运行程序,点击右侧控制面板内的“开始”或“控制”菜单内的“开始”按钮开始游戏。
2>使用