1、毕 业 论 文 java 俄 罗 斯 方 块 游 戏0毕业论文 java 俄罗斯方块游戏摘 要在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。但是游戏设计结合了日新月异的技术,在一个产品中整合了复杂的设计、艺术、声音和软件,所以并不是人人皆知。直到今天,在中国从事游戏设计的人仍然很少,但是游戏行业的发展之快,远超如家电、汽车等传统行业,也正因为如此,游戏人才的教育、培养远落后于产业的发展。俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生
2、,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(控制键的实现是由键盘的方向键的事件处理实现)。然后程序根据这七种方块堆叠成各种不同的模型。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,最后对软件进行了测试,整个开发过程贯穿软件工程的知识体系。此次设计在 Microsoft Windows XP 系统下,以 Java 为开发语言,在 eclipse 开发平台上进行游戏的设计与实践。关键词:游戏设计;算法;数组;事件引 言游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的
3、游戏都失去兴趣,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重毕 业 论 文 java 俄 罗 斯 方 块 游 戏1新掀起这股让人沉迷的俄罗斯
4、方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在“联众俄罗斯方块“中,更有一些联众网络游戏所独有的魅力有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可及。而一般游戏软件也确实具有很高的技术难度, 随着开发工具及软件开发
5、方法学的不断发展, 动手开发游戏也不是十分困难的。俄罗斯方块游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂算法和设计, 其难度让一般初学者望而却步。本文利用数组作为方块的数据结构,提出一种用JAVA语言实现的简易方法, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。1绪论1.1 电子游戏及其分类电子游戏,也就是运行在家用电脑、家用电子游戏机或是掌中宝游戏机及街机上的电子游戏程序。电子游戏是一种结合剧情故事、美术、音乐、动画、程序等技术于一身的互动型娱乐软件,涉及到多个行业。 从电子游戏的分类来看,有着多种分类方式。传统的游戏分类是按照游戏类型,将
6、其分为即时战略游戏、第一人称射击游戏、角色扮演游戏、策略型游戏等类别。根据游戏运行平台的不同,可将电子游戏分为游戏机游戏、单机版 PC 游戏、互动电视游戏、在线游戏和手机游戏。此外,韩国政府将电子游戏业分为家用游戏机游戏、单机版 PC 游戏、网络游戏和街机游戏四大类。考虑到中韩游戏业比较接近,论文采用韩国的分类标准。“网络游戏”也就是人们一般所指的“在线游戏”,是指通过互联网进行的电脑游戏,通过人与人之间的互动达到交流、娱乐和休闲的目的。在互联网(局域网)技术出现之前,电子游戏都可以归于单机版游戏,即“人机对战”游戏,或最多是双人对战游戏。而随着互联网技术的出现,通过连接游戏服务器,上百、上千
7、、乃至上万的游戏玩家同时连线娱乐成为了现实,这就大大增加了游戏的互动性、真实性,丰富了电子游戏的内涵。从网络游戏的分类来看,目前业界还没有一个比较统一毕 业 论 文 java 俄 罗 斯 方 块 游 戏2规范的分类。随着计算机设备和网络技术的发展,电子游戏在全球得到了迅猛的发展,取得了巨大的成功,已成为当今世界上不可缺少的精神粮食。1.2 电子游戏发展现状1.2.1 电子游戏在国外的发展现状电子游戏是最初产生于美国,1971 年,一个还在 MIT 就读的学生设计了世界上第一个业务用游戏机,这个街机游戏的名字叫电脑空间。可以说时至今日,电子游戏仍然是外国的天下。美国至今仍是世界第一大游戏市场,它
8、遵循的是以发行商为主的产业开发链模式,根据美国市场调查公司 NPD Group 调查统计,美国 2004 年游戏总销售金额(包括家用、掌上型主机及软件)为 99 亿美元,占了全球游戏市场的 45%。其中游戏软件销售的具体数字是:视频游戏软件的销售额达 52 亿美元(1.6 亿套),PC 游戏软件销售额达11 亿美元(4500 万套) ,掌机游戏销售额达 10 亿美元(4230 万套)。2004 年一共大约有2.48 亿套游戏售出。据估计,美国每个家庭平均购买过 2 部游戏 3。日本近 20 年来疯狂赚电子游戏的钱。从上世纪 60 年代初的街机,到六七十年代之间的家用游戏机,再到八九十年代的掌上
9、游戏机,日本经过 30 多年的耕耘,终于把电子游戏这棵“摇钱树”,培育成第一时尚娱乐产业,垄断全球业界长达 10 余年。对于日本来说,电玩业已是国家经济的重要支柱之一,在 GDP 中占有 1/5 的举足轻重地位。日本游戏业在最辉煌的 1998 年,曾经占领全球电子游戏市场硬件 90%以上,软件50以上。韩国号称世界上网络游戏产业最发达国家之一。迄今为止,国内网络游戏市场有超过 60%的产品来自韩国游戏软件开发商,韩国网络游戏使国内很多游戏运营公司在游戏营销市场或股票资本市场上获得了巨大的成功。 韩国游戏市场的发展不是偶然,韩国政府不仅给游戏产业以正确的定位和引导,更是将其和本国经济发展紧密地联
10、系到一起,做了很多市场培育方面的工作。韩国政府认识到,靠重型工业来支撑全国经济的做法是片面的,于是将、娱乐产业视为新的经济增长点,开始大力扶持。从那时起,科技含量极高而能源消耗极低的游戏制作及相关产业担负起了“富国兴邦”的重担。由文化观光部出面组建韩国游戏支援中心,向韩国游戏产业提供从资金到技术上的多方面支援;成立游戏投资联盟,政府每年向游戏产业投入的资金多达亿韩元,并为游戏企业提供长期的低息贷款;设立信息化基金和文化产业基金,为游毕 业 论 文 java 俄 罗 斯 方 块 游 戏3戏产业服务;对指定的风险企业实行各种税制优惠政策,减少甚至免除游戏企业的税务负担;建设游戏产业基地以扶持中小游
11、戏企业的发展;对从事游戏产业的高科技人才免除两年的兵役。 在韩国,从制作到运营,一个网络游戏公司起步门槛较低,主要得益于政府实行的援助计划。此外,在有利的政策形势下,韩国出现了众多的游戏院校,一些原本不涉足此领域的大学也开设了游戏相关专业课程,以大力培养游戏专业人才,从而为游戏生产提供了基础保障。1.2.2 电子游戏在国内的发展现状与电子游戏发达的国家相比,我国在电子游戏方面还存在比较大的差距。目前,我国游戏市场正处于发展阶段,但市场上的游戏软件主要来自日本、美国、韩国等地,但由本土游戏制作人开发创作的游戏正在高速增加,国产原创的游戏即将成为游戏的主流。中国的游戏产业经过 80 年代初期台湾厂
12、商的探索至 90 年代,开始了自己的研发、发行的历程,直至网络游戏的风行,让中国的网络游戏开始有了飞速的发展。 1983 年,智冠科技有限公司在中国台湾成立,为全球第一家签订授权重制中文版产品代理销售合约的公司,2000 年智冠在台湾股票上市, 2002 年其控股的中华网龙在台湾上市。1996 年底,UBI SOFT 上海分公司暨上海育碧电脑软件有限公司成立。同年,全球游戏软件领军企业 EA 在中国上海成立办事处。1997 年,由尚洋公司制作的血狮正式上市。 1997 年,北京新天地互动多媒体技术有限公司成立,该公司引进了古墓丽影 III(TombRaider III)、盟军敢死队等著名欧美游
13、戏,并在 1999 年在中国率先掀起“游戏软件价格革命”,全面推行 50 元的价格体系,从此正版游戏价格开始贴近大众消费者。 1999 年,业内估算中国电脑游戏市场(正版)约 1.5 亿元人民币。 2000 年,大陆华彩软件代理发行第一款中文 MMORPG万王之王正式推出,该游戏于 1999 年在台湾发行,由台湾雷爵资讯(Lager)开发。也在 2000 年,继万王之王、石器时代、网络三国在台湾上市之后,游戏桔子推出了天堂,游戏桔子成立于 1995 年,1999 年以便利店在台湾奠定了地位。天堂这款由韩国著名游戏公司 Ncsoft 研发的网络游戏不但在本国大获成功,也在台湾再次夺冠。 2001
14、 年初,北京华义在中国大陆地区正式推出了石器时代,华义国际股份有限公司于1993 年在台北成立,2001 年在台湾股票上市。石器时代成为大陆当时最流行的网络游戏。2001 年,天人互动软件技术有限公司在北京成立。当年与 SEGA 结成 PC 游戏业务的战略合作关系,发行了樱花大战文明无冬之夜等经典游戏,2002 年,引进在欧美网络游戏魔剑(Shadow Bane),这是首款在中国测试的欧美毕 业 论 文 java 俄 罗 斯 方 块 游 戏4网络游戏。 2001 年 5 月,“联众世界”经过 3 年多的迅速成长,以同时在线 17 万人、注册用户约 1800 万的规模,成为当时世界用户数量第一的
15、在线游戏网站。2005 年 1 月 21 日,中央电视台报道:我国网络游戏产业当年增加了 50%,今后几年都将以 50%以上的速度增长;第一届中国网络游戏年会报道:中国国内网络游戏 2004年规模达 24.7 亿元,2009 年规模将达到 109.6 亿元。2可行性研究2.1 设计目的通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯方块游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,初步掌握 MVC 这种设计模式,进一步巩固和加强自身对 j2se 基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。2.2
16、 软件问题定义基本要求:本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。整个开发过程遵循软件工程规范,采用 JAVA GUI 编程来实现界面以及事件的控制,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方块、积分以及等级的功能。目标:通过本游戏的开发,主要实现游戏的可操作性以及美观性,同时使自己对JAVA 语言的了解更进一层,为将来的实际工作打下坚实的基础。条件、假定和限制:由于知识以及能力的限制,本游戏所实现的功能不够强大,可对本游戏进行改善,从而增强游戏的功能。可行性研究的方法:通过研究分析俄罗斯方块所具备的能力及实
17、现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。毕 业 论 文 java 俄 罗 斯 方 块 游 戏5评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。2.3 可行性分析技术可行性:开发本游戏的编程语言有多种,考虑到自身对语言的掌握程度,选择 JAVA 语言进行游戏的开发,采用 JAVA GUI 编程来实现界面以及事件的控制。经济可行性:本游戏的开发旨在完成毕业设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行相应 J
18、AVA 程序的电脑便可,所以不用考虑到经济问题。社会可行性:本游戏的开发主要为了完成毕业设计,开发的主体是个人,不存在法律上的侵权行为,也不会为社会造成影响,这方面是完全可行的。3需求分析3.1 引言对软件需求分析就是通过调查研究,建立系统的数据模型、功能模型、行为模型,用户和开发人员在“系统必须做什么”这个问题上实现相互理解,达到共识,从而形成双方认可的软件产品的需求规格说明书。这样有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功
19、能、性能需求,使其能够判断该软件是否与自己的需求相关。3.2 游戏需求28 种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便以玩家所需要的形态和位置落下。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,若由存在空格的方块填满整个窗口,则游戏失败。游戏功能需求如下:毕 业 论 文 java 俄 罗 斯 方 块 游 戏6游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,游戏的背景色是黑色,方块用蓝色颜色,在一定的区域内运动和变形,落下后的障碍物用黄色显示,这样看起来会有一定的美感。游戏形状需求:用数组作为
20、存储方块 28 种状态的数据结构,即长条形、Z 字形、反 Z 形、田字形、7 字形、反 7 形、T 字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。键盘处理事件需求:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。鼠标处理事件需求:通过点击菜单栏中相应的菜单项,可以实现游戏的开始、结束,方块形状的变换,分数、等级的显示,以及游戏帮助等功能。显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定分数的时候,会增加相应的等级。3.3 软硬件需求操作系统:Microsoft Windows XP
21、 Professional Service Pack 2内存:512M硬盘:80GCPU:赛扬 2.8交互工具:键盘/鼠标显示器:VGA 显示器JDK 版本:jdk1.6.0.02Eclipse 版本:eclipse-SDK-3.4-win323.4 接口控制本游戏通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。3.5 方案论证学校现已开设的课程有C语言、C+,java,自己本身自学了Java,通过网上以及图书馆的资料,知道可以通过C,C+,VB,Delphi,Java实现俄罗斯方块游戏的设计。下面简单介绍下VB、C+、Jav
22、a各自的优点:毕 业 论 文 java 俄 罗 斯 方 块 游 戏73.5.1 VB的优点全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。在中国乃至全世界都能看到它的身影,它曾是在中国最为流行的编程工具,到现在还占 据着非常重要的地位,对于它的好坏大家都有一定的了解,VB作为一种较早出现的开发程序以其容易学习,开发效率较高,具有完善的帮助系统等优点曾影响了好 几代编程人员,但是由于VB不具备跨平台这个特性,从而也决定了 VB在未来的软件开发中将会逐渐地退出其历史舞台;它对组件技术的支持是基于COM和 ActiveX,对于组件技术不断完善发展的今天,它也显出
23、了它的落后性;同时VB在进行系统底层开发的时候也是相对复杂的,调用API函数需声明,调用 不方便,不能进行DDK编程,不可能深入Ring0编程,不能嵌套汇编;而且面向对象的特性差;网络功能和数据库功能也没有非常突出的表现,综上所 述,VB作为一种可视化的开发工具由于其本身的局限性,导致了它在未来软件开发中逐步被其他工具所代替。3.5.2 C+的优点C+是对 C 语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从 SIMULA 67 中吸取了类,从 ALGOL 68 中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了 Ada 的类属和 Clu 的模块特点,从 BCPL 中吸取异
24、常处理,从 BCPL 中吸取了用/表示注释。C+保持了 C 的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。C+既有数据抽象和面向对象能力,语言运行性能高多,加上 C 语言的普及,而从 C 至 C+的过渡较为平滑,以及 C+与 C 的兼容程度可使数据巨大的 C 程序能方便地在 C+环境中重用。尽管C+当初的设计本意是帮助管理大型程序,但其用途并不仅限于此。C+的面向对象的特性可有效地用于实际的程序设计工作。C+常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于C+共享C的效率,所以用C+可以构成很多高性能的系统软
25、件。3.5.3 Java的优点(1) 安全性 Java 是一种安全的网络编程语言,不支持指针类型,一切对内存的访问都必须通过对象的实例来实现。这样能够防止他人使用欺骗手段访问对象的私有成员,也能够避免在指针操作中易产生的错误。毕 业 论 文 java 俄 罗 斯 方 块 游 戏8此外,Java 的安全性体现在多个层次上:在编译层,有语法检查;在解释层,有字节码校验器,可进行代码段格式测试和规则检查、访问权限和类型转换合法性检查、操作数堆栈的上溢和下溢检测、代码参数类型合法性检查等;在平台层上,通过配置策略,可设定访问资源域,无须区分本地或远程。(2) 可移植性 Java 具备有很好的移植性,这
26、主要得益于它与平台无关的特性。同时,Java 的类库中也实现了与平台无关的接口,这使得这些类库也能移植。同时,Java 编译器主要是由 Java 本身来实现的,Java 的运行系统(解释器)由标准 C 语言实现,因而整个Java 系统都具有可移植性。 (3) 多线程机制 Java 具有多线程机制,这使得应用程序能够并行地执行。它的同步机制也保证了对共享数据的共享操作,而且线程具有优先级的机制,有助于分别使用不同线程完成特定行为,也提高了交互的实时响应能力。Java 的多线程技术使网上实时交互实现很容易,从而为解决网上大数量的客户访问提供了技术基础。(4) 跨平台通常,在 Windows 下编写
27、的程序是不能直接拿到 UNIX 上运行的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到其他类型的计算机硬件上执行的,至少要做移植工作。要想让程序能够在不同的计算机上运行,就要求程序设计语言能够跨越各种软件和硬件平台,而 Java 恰恰满足了这一需求。Java 编译器能够产生一种与计算机体系结构无关的字节指令,只要安装了 Java 虚拟机,Java 就可以在相应的处理机上执行。3.5.4 方案的选择面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程
28、序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。毕 业 论 文 java 俄 罗 斯 方 块 游 戏9C+和Java在面向对象这方面比VB要强,所以我排除了用VB做的可能性。但是C+为了与C语言兼容,其是包含了些面向过程的成分;Java除了C+中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有Java特有的“沙箱”机制是其安全性的保障,同时它去除了C+中
29、易造成的错误指针,增加了自动内存管理等措施,保证了Java程序运行的可靠性。所以经过再三比较了三种语言后,决定采用Java语言编写俄罗斯方块。4 概要设计41 游戏设计方案的确定本游戏的设计采用 MVC 模式(Model -View -Controller),即把本游戏的输入、处理、输出流程按照 Model、View、Controller 的方式进行分离,这样本游戏的设计被分成三个层模型层、视图层、控制层。MVC 模型图如下所示:毕 业 论 文 java 俄 罗 斯 方 块 游 戏1042 系统流程结构设计图形工厂类图形类障碍物类中央控制器处理按键事件处理逻辑显示面板显示生产43 各个功能模块
30、图设计4.3.1 模型层(Model)功能模块图设计图形工厂图形障碍物生产图形下落产生障碍物触发按键事件毕 业 论 文 java 俄 罗 斯 方 块 游 戏114.3.2 视图层(View)功能模块图设计游戏面板GamePanel方块的显示 障碍物的显示4.3.3 控制层(Controller)功能模块图设计中央控制器Controller 类图形工厂生产图形显示面板显示图形和障碍物处理按键和鼠标事件毕 业 论 文 java 俄 罗 斯 方 块 游 戏125 详细设计5.1 模型层(Model)设计5.1.1 图形的产生通过图形工厂类 ShapeFactory 的 getShape(ShapeL
31、istener listener)方法随机产生方块的某种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品的方法,然后根据你传进来的产品,而决定工厂人生产什么产品,产生出来产品后,最后要返回您要的这个东西。7654321随机产生一个数随机数一字形 Z 字形 反 Z形7 字形 反 7 形 倒 T形田字型5.1.2 图形的数据结构定义一个 4x4 方阵,共 16 个小格。用“0”和“1”来表示每个方格是绘制还是空白,由此可以
32、组合出多种图形,如图所示:毕 业 论 文 java 俄 罗 斯 方 块 游 戏13其中图一表示为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 s
33、hapes = new int;作为存储方块的数据结构来保存方块的 28 种状态的。5.1.3 图形的移动图形类 Shape 保存了自己的位置信息,用 left 表示图形到左边界的距离, top 表示图形到上边界的距离,图形移动就是改变 left 和 top 的值。向上移动:top 减 1,向下移动:top 加 1,向左移动:left 减 1,向右移动:left 加 1。图形的移动分为图形的自动下落以及通过按键事件实现图形的左移、右移以及加速下移。通过多线程 ShapeDriver 类来实现图形的自动下移,由于游戏中方块的动态性,每个方块有一定的生命周期,所以选用线程来实现方块。一个方块用一个
34、线程类对象实现,该类继承与 Thread 类,当一个方块出现时也就表示一个线程对象产生并开始运行。通过对按键事件的响应,实现图形的左移、右移以及加速下移。5.1.4 图形的变形通过 int type = new Random().nextInt(shapes.length); shape.setBody(shapestype);shape.setStatus(0);实现初始图形的初始化,通过 status = (status + 1) % body.length;实现图形的变形功能。5.1.5 存储和表示障碍物用一个和显示区域的面板大小相对应的二维数组保存障碍物的位置信息,如果对应的位置是障碍
35、物,则这个数组中相应的元素就为 1,否则就为 0。如何把图形变成障碍物呢?只要把属于图形的格子对应的位置都变成障碍物即可。代码如下:public boolean isMember(int x, int y, boolean rotate) int tempStatus = status;if(rotate) tempStatus = (status + 1) % body.length;毕 业 论 文 java 俄 罗 斯 方 块 游 戏14return bodytempStatusy*4 + x = 1;public void accept(Shape shape) System.out.p
36、rintln(“Grounds accept“);for(int x=0; x=0; y-) boolean full = true;for(int x=0; x0; y-) for(int x=0; xGlobal.WIDTH; x+) zawxy = zawxy-1;毕 业 论 文 java 俄 罗 斯 方 块 游 戏15for(int x=0; xGlobal.WIDTH; x+) zawx0 = 0;deleteFullLine();利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断某一行中是否有空白,如果没有空白的话,则将当前的行号传递给 deleteLine(int l
37、ineNum)方法,由该方法实现消除当前行,并将上面的方块依次下移一行,最后再重新调用deleteFullLine()方法进行查找,直到所有行都检查一遍结束。5.2 视图层(View)设计5.2.1 方块的显示通过视图层的 GamePanel 类的 paint(Graphics g)方法调用 Shape 类的drawMe(Graphics g)方法,从而实现方块的绘制,代码如下:public void drawMe(Graphics g) g.setColor(Color.BLUE);for(int x=0; x4; x+) for(int y=0; y4; y+)if(getFlagByPo
38、int(x, y) g.setColor(new Shape().shapeColor);g.fill3DRect(left + x)*Global.CELL_SIZE, (top + y)*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE,true);毕 业 论 文 java 俄 罗 斯 方 块 游 戏165.2.2 障碍物的显示通过视图层的 GamePanel 类的 paint(Graphics g)方法调用 Ground 的 drawMe(Graphics g) 方法,从而实现障碍物的绘制,代码如下:public void draw
39、Me(Graphics g) for(int x=0; xGlobal.WIDTH; x+) for(int y=0; yGlobal.HEIGHT; y+) if(zawxy = 1) g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE,true);5.3 控制层(Controller)设计控制层主要是实现图形工厂生产图形,图形按键事件的处理,方块、障碍物显示的控制,图形自动下落和障碍物生成的控制。通过控制层这个大管家最终实现此俄罗斯方块的按键事件的处理以及各种逻辑的处理
40、。毕 业 论 文 java 俄 罗 斯 方 块 游 戏175.4 游戏演示5.4.1 游戏界面显示5.4.2 开始和结束控制菜单毕 业 论 文 java 俄 罗 斯 方 块 游 戏185.4.3 分数和等级查看菜单5.4.4 变换方块菜单毕 业 论 文 java 俄 罗 斯 方 块 游 戏195.4.5 帮助菜单5系统测试5.1 游戏界面菜单选项的功能测试(1) “控制”菜单测试点击“游戏”“开始”输出:游戏开始结果:正常点击“游戏”“结束”输出:弹出游戏结束提示框结果:正常(2) “查看”菜单测试点击“查看”“分数”输出:在游戏面板中间跳出分数显示框结果:正常点击“查看”“级别”毕 业 论
41、文 java 俄 罗 斯 方 块 游 戏20输出:在游戏面板中间跳出级别显示框结果:正常(3) “变换”菜单测试点击“变换”“改变方块”输出:在游戏面板中显示随机产生的某种方块结果:正常5.2 按键事件的功能测试(1) 方块移动测试游戏过程中,点击“左、右、下”方向键输出:方块正常移动,不会移出边界结果:正常(2) 方块反转测试游戏过程中,点击向上方向键输出:方块无边界和障碍物阻挡的情况下可反转结果:正常5.3 方块堆砌与消行测试(1) 当方块下落到最底面或与障碍物接触时输出:方块成功堆砌在底部结果:正常(2) 当出现满行现象时输出:所有满行被消除,方块依次下移结果:正常5.4 测试结果分析经
42、过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。毕 业 论 文 java 俄 罗 斯 方 块 游 戏21结 论游戏设计与实践是一项复杂而且庞大的工作,在选题之后,我才意识到过程的艰难,因为以前从来没有接触过游戏设计,刚开始时有点迷茫和彷徨。后来通过看书和在网上查找资料,逐渐找到了一些感觉,也依照资料自己动手编写了几个简单经典的游戏。本文仅以俄罗斯方块为例予以说明。本次设计让我初步懂得了电子游戏所涉及到的有关技术、方法,包括电子游戏分类、选题、构思等。并实现几个可演示的游戏软件,其中有很多应用了学习的相关技术,并且做到了图、文、声并
43、茂,能实际演示。此次设计过程中印象最深的收获有:1、学到了很多新知识,并且对老知识进行了回顾。经过长时间的学习,更进一步熟悉了 Java 语言。2、通过不断上机实验,调试程序,总结经验,从对课题的不理解到能够开始动手去做,提出问题并自己想办法解决问题,自己多实践,所以增强了动手能力。3、提高了中、英文资料的检索能力。这次毕业设计过程中我查阅了很多资料,不但有图书馆的期刊、杂志、馆藏图书,还有网络中的电子文档、电子书籍、网页及下载的视频教学课程;不但有中文资料还有英文资料。这些资料,使我的眼界更开阔,对课题的认识更加深刻,编写程序的时候思路更加清楚,少走了很多弯路。但如果真的要从事游戏设计的工作
44、,需要走的路还很长,即便是对于国际知名的大公司,也是在不断的探索和实践中前进。但这并不表明前途就是渺茫的,通过这次实践,进行了一次从底而上和自上而下的归纳和演绎的过程,在变化多端的游戏面前,总算领悟了一点它的奥妙。内容繁复、采用的表现手段多姿多彩的游戏世界,即便是再复杂,也可以通过一定程度的归纳演绎得出适应其规则和表现的契合点。回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或
45、许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,如不能把要装载的方块提前显示出来。因此做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色出来,这也可能是我这个系统的不足之处。毕 业 论 文 java 俄 罗 斯 方 块 游 戏22致 谢经过一个多月的不断努力,毕业设计内容已经基本上完成了。首先,在这里我要由衷地感谢我的指导老师梁光春教授。他在毕业设计期间对本人给予了悉心指导和大力帮助。在毕业设计期间,在我的课题设计和论文撰写过程中对我进行了认真检查,严格督促和仔细批阅,并对我的课题提出了许多富有启发性和建设性的意见和建议。同时我也要非常感谢班上的同学,一直以来都是
46、他们在身边督促我,我们互相鼓励共同进步。另外,我还要感谢我的室友和身边的好友,他们一直都在身边支持我,在程序设计和论文撰写的艰难过程中,他们带给我欢乐,带给我信心,并給予了我很大的鼓励与帮助。最后,在这里还要对我的家人和远方的朋友表示深深的感谢,他们在精神和物质上都给了我莫大的支持,没有他们的关怀和爱护,我想我就无法顺利地完成这次毕业设计。毕 业 论 文 java 俄 罗 斯 方 块 游 戏23参 考 文 献1 罗伟坚著.Visual C+经典游戏程序设计M.北京:人民邮电出版社,2006.22 朱福喜著. Java 程序设计技巧与开发实例M.北京:人民邮电出版社,2004.23 赵东跃著.俄
47、罗斯方块编程M.电脑编程技巧与维护,1998 年第六期4 陆惠恩著. 实用软件工程M.北京:清华大学出版社,2006.55 黄复贤著.俄罗斯方块游戏的敏捷设计与开发M. 电脑编程技巧与维护,2005.46 (美)Bruce Eckel 著,陈昊天 译.Java 编程思想M.北京:机械工业出版社,2007.67 高凌琴,陈青华 著. 俄罗斯方块游戏关键技术探讨M.信息技术与信息化研究探讨,2008 年第二期.8 王宇,战学刚,高国伟著. 计算机算法解决俄罗斯方块中的数学与计算问题M.计算机应用与软件,第二十四卷第三期,2007.3 .9朱福喜,黄昊著. Java 项目开发与毕业设计指导M.北京:清华大学出版社,2008.610 郑人杰,殷人昆,陶永雷著.实用软件工程M.北京:清华大学出版社,2004.11