




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全套设计加扣 3012250582湖南软件职业学院毕业设计毕业选题:俄罗斯方块指导教师:学生姓名:院系名称:软件工程系专业班级:Java1304班学生学号:提交日期:2015年12月19日III目 录第一章.绪论- 1 -1.1 电子游戏及其分类- 1 -1.1.1游戏的组成要素- 1 -1.2 电子游戏发展现状- 2 -1.2.1 电子游戏在国外的发展现状- 2 -1.2.2 电子游戏在国内的发展现状- 3 -第二章.可行性研究- 5 -2.1 设计目的- 5 -2.2 软件问题定义- 5 -2.3 可行性分析- 5 -第三章.需求分析- 7 -3.1 引言- 7 -3.2 游戏需求- 7 -3.3 软硬件需求- 8 -3.4 接口控制- 8 -3.5 方案论证- 8 -3.5.1 VB的优点- 8 -3.5.2 C+的优点- 9 -3.5.3 Java的优点- 9 -3.5.4 方案的选择- 10 -第四章.概要设计- 12 -41 游戏设计方案的确定- 12 -IIII43 各个功能模块图设计- 13 -4.3.1 模型层(Model)功能模块图设计- 13 -4.3.2 视图层(View)功能模块图设计- 14 -4.3.3 控制层(Controller)功能模块图设计- 14 -第五章. 详细设计- 15 -5.1 模型层(Model)设计- 15 -5.1.1 图形的产生- 15 -5.1.2 图片的数据结构- 15 -5.1.3 图形的移动- 17 -5.1.4 图形的变形- 17 -5.1.5 存储和表示障碍物- 17 -5.1.6 判断满行及消行- 18 -5.2 视图层(View)设计- 19 -5.2.1 方块的显示- 19 -5.2.2 障碍物的显示- 20 -5.2.3 点击事件- 20 -5.2.4 图形的各种状态- 22 -5.3 控制层(Controller)设计- 24 -5.4 游戏演示- 25 -5.4.1 游戏界面显示- 25 -5.4.3 分数和销毁的行数- 25 -5.4.4 结束界面- 26 -第六章.系统测试- 28 -6.1按键事件的功能测试- 28 -6.2 方块堆砌与消行测试- 28 -6.3 测试结果分析- 28 -结 论- 29 -致 谢- 30 -IIIIII第一章绪论1.1 电子游戏及其分类 电子游戏,也就是运行在家用电脑、家用电子游戏机或是掌中宝游戏机及街机上的电子游戏程序。电子游戏是一种结合剧情故事、美术、音乐、动画、程序等技术于一身的互动型娱乐软件,涉及到多个行业。 从电子游戏的分类来看,有着多种分类方式。传统的游戏分类是按照游戏类型,将 其分为即时战略游戏、第一人称射击游戏、角色扮演游戏、策略型游戏等类别。根据游戏运行平台的不同,可将电子游戏分为游戏机游戏、单机版PC游戏、互动电视游戏、在线游戏和手机游戏。此外,韩国政府将电子游戏业分为家用游戏机游戏、单机版 PC 游 戏、网络游戏和街机游戏四大类。考虑到中韩游戏业比较接近,论文采用韩国的分类标 准。“网络游戏”也就是人们一般所指的“在线游戏”,是指通过互联网进行的电脑游戏,通过人与人之间的互动达到交流、娱乐和休闲的目的。在互联网(局域网)技术出 现之前,电子游戏都可以归于单机版游戏,即“人机对战”游戏,或最多是双人对战游戏。而随着互联网技术的出现,通过连接游戏服务器,上百、上千、乃至上万的游戏玩 家同时连线娱乐成为了现实,这就大大增加了游戏的互动性、真实性,丰富了电子游戏的内涵。从网络游戏的分类来看,目前业界还没有一个比较统一规范的分类。随着计算 机设备和网络技术的发展,电子游戏在全球得到了迅猛的发展,取得了巨大的成功,已成为当今世界上不可缺少的精神粮食。 1.1.1游戏的组成要素“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容,“游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素。行为模式:“游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做“猜拳游戏”吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAYGAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”1.2 电子游戏发展现状1.2.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%的产品来自韩国游戏软件开发商,韩国网络游戏使国内很多游戏运营公司在游戏营销市场或股票资本市场上获得了巨大的成功。韩国游戏市场的发展不是偶然,韩国 政府不仅给游戏产业以正确的定位和引导,更是将其和本国经济发展紧密地联系到一起,做了很多市场培育方面的工作。韩国政府认识到,靠重型工业来支撑全国经济的做 法是片面的,于是将、娱乐产业视为新的经济增长点,开始大力扶持。从那时起,科技含量极高而能源消耗极低的游戏制作及相关产业担负起了“富国兴邦”的重担。由文化观光部出面组建韩国游戏支援中心,向韩国游戏产业提供从资金到技术上的多方面支援;成立游戏投资联盟,政府每年向游戏产业投入的资金多达亿韩元,并为游戏企业提供长期的低息贷款;设立信息化基金和文化产业基金,为游戏产业服务;对指 定的风险企业实行各种税制优惠政策,减少甚至免除游戏企业的税务负担;建设游戏产业基地以扶持中小游戏企业的发展;对从事游戏产业的高科技人才免除两年的兵役。在3 韩国,从制作到运营,一个网络游戏公司起步门槛较低,主要得益于政府实行的援助计划。此外,在有利的政策形势下,韩国出现了众多的游戏院校,一些原本不涉足此领域 的大学也开设了游戏相关专业课程,以大力培养游戏专业人才,从而为游戏生产提供了基础保障。 1.2.2 电子游戏在国内的发展现状 与电子游戏发达的国家相比,我国在电子游戏方面还存在比较大的差距。目前,我国游戏市场正处于发展阶段,但市场上的游戏软件主要来自日本、美国、韩国等地,但由本土游戏制作人开发创作的游戏正在高速增加,国产原创的游戏即将成为游戏的主流。 中国的游戏产业经过80年代初期台湾厂商的探索至90年代,开始了自己的研发、发行的历程,直至网络游戏的风行,让中国的网络游戏开始有了飞速的发展。1983年,智冠科技有限公司在中国台湾成立,为全球第一家签订授权重制中文版产品代理销售合约的公司,2000年智冠在台湾股票上市,2002年其控股的中华网龙在台湾上市。 1996年底,UBISOFT上海分公司暨上海育碧电脑软件有限公司成立。同年,全球游戏软件领军企业EA在中国上海成立办事处。1997年,由尚洋公司制作的血狮正 式上市。1997年,北京新天地互动多媒体技术有限公司成立,该公司引进了古墓丽 影 III(TombRaider III)、盟军敢死队等著名欧美游戏,并在1999年在中国率先掀起“游戏软件价格革命”,全面推行50元的价格体系,从此正版游戏价格开始贴近 大众消费者。1999年,业内估算中国电脑游戏市场(正版)约1.5亿元人民币。2000年,大陆华彩软件代理发行第一款中文 MMORPG万王之王正式推出,该游戏于1999年在台湾发行,由台湾雷爵资讯(Lager)开发。也在2000年,继万王之王、石器 时代、网络三国在台湾上市之后,游戏桔子推出了天堂,游戏桔子成立于1995年,1999年以便利店在台湾奠定了地位天堂这款由韩国著名游戏公司 Ncsoft研发的网络游戏不但在本国大获成功,也在台湾再次夺冠。2001年初,北京华义在中 国大陆地区正式推出了石器时代,华义国际股份有限公司于1993 年在台北成立,2001年在台湾股票上市。石器时代成为大陆当时最流行的网络游戏。2001年,天人互动软件技术有限公司在北京成立。当年与 SEGA 结成 PC 游戏业务的战略合作关系,发行了樱花大战文明无冬之夜等经典游戏,2002 年,引进在欧美网络 游戏魔剑(Shadow Bane),这是首款在中国测试的欧美网络游戏。2001年5月,“联众世界”经过3年多的迅速成长,以同时在线17万人、注册用户约 1800万的规模,成为当时世界用户数量第一的在线游戏网站。2005年1月21日,中央电视台报道:我国网络游戏产业当年增加了50%今后几年都 将以50%以上的速度增长;第一届中国网络游戏年会报道:中国国内网络游戏2004年规模达24.7亿元,2009年规模将达到109.6亿元。第二章可行性研究 2.1 设计目的 通过本游戏的设计,综合自己在校期间所学的理论知识,设计开发俄罗斯方块游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步 掌握软件工程的系统理论,初步掌握 MVC 这种设计模式,进一步巩固和加强自身对j2se基础知识的理解,提高自己的编程水平,从而达到理论与实践相结合的目的。 2.2 软件问题定义 基本要求:本游戏开发的总体任务是实现游戏的可操作性,以及界面的美观性。整个开发过程遵循软件工程规范,采用 JAVA GUI 编程来实现界面以及事件的控制,用户 根据键盘的四个方向键控制翻转、向左、向右和向下操作,通过菜单栏中的相应菜单选项实现游戏的开始、结束、变换方块、积分以及等级的功能。 目标:通过本游戏的开发,主要实现游戏的可操作性以及美观性,同时使自己对 JAVA 语言的了解更进一层,为将来的实际工作打下坚实的基础。条件、假定和限制:由于知识以及能力的限制,本游戏所实现的功能不够强大,可对本游戏进行改善,从而增强游戏的功能。 可行性研究的方法:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。 评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗 斯游戏的一般功能即可。 2.3 可行性分析 管理可行性:该游戏软件为首次开发,目的只为提高工作自身素质和检自学Java的效果,用Java3.0软件编写后在Applet管理器中运行简单明了,所有功能均根据基本需求所做。于管理,所以在这方面是可以实现的。经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行JAVA3.0软件的电脑便可,所以不用考虑到经济问题。技术可行性:可用与本游戏的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择JAVA作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用虑到法律、版权等的社会因素,所以在这方面是完全可行的。 第三章需求分析 3.1 引言 对软件需求分析就是通过调查研究,建立系统的数据模型、功能模型、行为模型,用户和开发人员在“系统必须做什么”这个问题上实现相互理解,达到共识,从而形成双方认可的软件产品的需求规格说明书。这样有益于提高软件开发过程中 的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工 作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。 3.2 游戏需求 28 种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控 制键控制翻转和移动,以便以玩家所需要的形态和位置落下。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,若由存在 空格的方块填满整个窗口,则游戏失败。游戏功能需求如下:游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐 性,游戏的背景是用图片,方块用蓝色颜色,在一定的区域内运动和变形,落下后的障碍物用黄色显示,这样看起来会有一定的美感。 游戏形状需求:用数组作为存储方块 28 种状态的数据结构,即长条形、Z字形、反Z形、田字形、7字形、反7形、T字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。 键盘处理事件需求:方块下落时,可通过键盘方向键(上、下、左、右键) 对该方块进行向上(变形),向下(加速)、向左、向右移动。 鼠标处理事件需求:通过点击菜单栏中相应的菜单项,可以实现游戏的开始、结束,方块形状的变换,分数、等级的显示,以及游戏帮助等功能。 显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定分数的时候,会增加相应的等级。 3.3 软硬件需求 操作系统:Microsoft Windows XP Professional Service Pack 2 内存:512M 硬盘:80G CPU:赛扬 2.8 交互工具:键盘/鼠标 显示器:VGA 显示器 JDK 版本:jdk1.6.0.02 Eclipse 版本:eclipse-SDK-3.4-win32 3.4 接口控制 本游戏通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。 3.5 方案论证 学校现已开设的课程C语言、C+,java,自己本身自学了Java,通过网上以及图书馆的资料,知道可以通过C,C+,VBDelphi,Java实现俄罗斯方块游戏的设计。下面简单介绍下VB、C+、Java各自的优点: 3.5.1 VB的优点 全称VisualBasic,它是以Basic语言作为其基本语言的一种可视化编程工具。在中国乃至全世界都能看到它的身影,它曾是在中国最为流行的编程工具,到现在还占据着非常重要的地位,对于它的好坏大家都有一定的了解,VB作为一种较早出现的开发 程序以其容易学习,开发效率较高,具有完善的帮助系统等优点曾影响了好几代编程人员,但是由于VB不具备跨平台这个特性,从而也决定了VB在未来的软件开发中将会 逐渐地退出其历史舞台;它对组件技术的支持是基于COM和 ActiveX,对于组件技术不断完善发展的今天,它也显出了它的落后性;同时VB在进行系统底层开发的时候也是调用不方便,不能进行DDK编程,不可能深入Ring0相对复杂的,调用API函数需声明,编程,不能嵌套汇编;而且面向对象的特性差;网络功能和数据库功能也没有非常突出 的表现,综上所述,VB作为一种可视化的开发工具由于其本身的局限性,导致了它在未来软件开发中逐步被其他工具所代替。 3.5.2 C+的优点 C+是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从 SIMULA67中吸取了类,从ALGOL68中吸取了运算符一名多用、引用和在分程序中任何地方说明 变量,综合了Ada的类属和Clu的模块特点,从BCPL中吸取异常处理,从BCPL中吸取了用/表示注释。 C+保持了C的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。C+既有数据抽象和面向对象能力,语言运行性能高多,加上C语言的普及,而从C至 C+的过渡较为平滑,以及 C+与C的兼容程度可使数据巨大的C程序能方便地在 C+环境中重用。 尽管C+当初的设计本意是帮助管理大型程序,但其用途并不仅限于此。C+的面向 对象的特性可有效地用于实际的程序设计工作。C+常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于C+共享C的效率,所以用C+可以构成很多高性能的系统软件。 3.5.3 Java的优点 (1) 安全性 Java 是一种安全的网络编程语言,不支持指针类型,一切对内存的访问都必须通过对象的实例来实现。这样能够防止他人使用欺骗手段访问对象的私有成员,也能够避免 在指针操作中易产生的错误。 此外,Java的安全性体现在多个层次上:在编译层,有语法检查;在解释层,有字节码校验器,可进行代码段格式测试和规则检查、访问权限和类型转换合法性检查、操8作数堆栈的上溢和下溢检测、代码参数类型合法性检查等;在平台层上,通过配置策略,可设定访问资源域,无须区分本地或远程。 (2) 可移植性 Java具备有很好的移植性,这主要得益于它与平台无关的特性。同时,Java的类库中也实现了与平台无关的接口,这使得这些类库也能移植。同时,Java编译器主要是 由 Java 本身来实现的,Java的运行系统(解释器)由标准C语言实现,因而整个Java系统都具有可移植性。 (3) 多线程机制 Java具有多线程机制,这使得应用程序能够并行地执行。它的同步机制也保证了对共享数据的共享操作,而且线程具有优先级的机制,有助于分别使用不同线程完成特定 行为,也提高了交互的实时响应能力。Java 的多线程技术使网上实时交互实现很容易,从而为解决网上大数量的客户访问提供了技术基础。 (4) 跨平台 通常,在Windows下编写的程序是不能直接拿到UNIX上运行的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的 程序是不能够直接放到其他类型的计算机硬件上执行的,至少要做移植工作。要想让程 序能够在不同的计算机上运行,就要求程序设计语言能够跨越各种软件和硬件平台,而 Java 恰恰满足了这一需求。Java编译器能够产生一种与计算机体系结构无关的字节指令,只要安装了Java虚拟机,Java就可以在相应的处理机上执行。 3.5.4 方案的选择 面向对象的程序设计吸取了结构化程序设计的先进思想, 并把它们同几个支持用户 用新方法进行程序设计的有力概念结合在一起。 所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。 这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。 面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。C+和Java在面向对象这方面比VB要强,所以我排除了用VB做的可能性。但是C+为了与C语言兼容,其是包含了些面向过程的成分;Java除了C+中非面向过程的部分其程序编写过程就是设计、实现类,定义其属性、行为的过程。还有Java特有的“沙箱”机制9是其安全性的保障,同时它去除了C+中易造成的错误指针,增加了自动内存管理等措 施,保证了Java程序运行的可靠性。 所以经过再三比较了三种语言后,决定采用Java语言编写俄罗斯方块。第四章 概要设计 41 游戏设计方案的确定 本游戏的设计采用MVC模式(Model -View -Controller),即把本游戏的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样本游戏的设计被分成三个层模型层、视图层、控制层。MVC模型图如下图3-3所示:图 3-3MVC模型图 42 系统流程结构设计通过工厂类生产各种图片,然后通过事件处理,实现各种功能,如图3-4所示:图 3-4 安卓系统设计图43 各个功能模块图设计 4.3.1 模型层(Model)功能模块图设计如图3-5所示: 图 3-5 JAVA系统框架图 4.3.2 视图层(View)功能模块图设计如图3-6所示:图 3-6 安卓系统框架图4.3.3 控制层(Controller)功能模块图设计 如图3-7所示:图 3-7 JAVA系统框架图第五章 详细设计 5.1 模型层(Model)设计 5.1.1 图形的产生 通过图形工厂类randomOne()Randomr=newRandom();inttype=r.nextInt(7);随机生成一个数:0,7):0,1,2,3,4,5,6方法随机加入方块的图片某种状态, 这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品 的方法,然后根据你传进来的产品,而决定工厂人生产什么产品,产生出来产品后,最后要返回您要的这个东西。如图4-1所以:图4-1 5.1.2 图片的数据结构 定义一个4x4方阵,共16个小格。用“0”和“1”来表示每个方格是绘制还是空白,由此可以组合出多种图形,如图4-2所示: 图4-2其中图一表示为0,0,0,-1, 0,1,1,0 , 0,0,0,0, 0,0,0,0 其中图二表示为0,0,-1,0, 1,0,1,-1 , 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个方向的方块,在不同旋转角度显示不同方向的方块来完成的。所以程序要控制方块的旋转方向,只要控制显示哪副图就可以了。 本游戏是用一个数组protected Cell cells=new Cell4; 作为存储方块的数据结构来保存方块的28种状态的。 5.1.3 图形的移动 图形类 Cell保存了自己的位置信息,用moveLeft表示图形到左边界的距离,moveRight表示图形到右边边界的距离,图形移动就是改变moveLeft和moveLeft的值。 图形的移动分为图形的自动下落以及通过按键事件实现图形的左移、 右移以及加速 下移。通过softDropAction 方法来实现图形的自动下移,由于游戏中方块的动态性,通过对按键事件的响应,实现图形的左移、右移以及加速下移。 5.1.4 图形的变形 通过rotateAction() 方法来实现图形的旋转具体代码如下:public void rotateAction() /先向右转一次 tetromino.rotateRight(); if(outBound()|coincide()tetromino.rotateLeft(); 5.1.5 存储和表示障碍物 用一个和显示区域的面板大小相对应的二维数组保存障碍物的位置信息,如果对应的 位置是障碍物,则这个数组中相应的元素就为1,否则就为 0。如何把图形变成障碍物呢?只要把属于图形的格子对应的位置都变成障碍物即可。代码如下:public void moveLeftAction()tetromino.moveLeft();if(outBound()|coincide()tetromino.moveRight();public boolean coincide() / 获取方块中的四个格子Cell cells = tetromino.cells;/ 依次遍历并判断for (Cell cell : cells) / 获取每个格子的行和列int row = cell.getRow();int col = cell.getCol();if(wallrowcol!=null)return true;return false;5.1.6 判断满行及消行 如果某一行没有空白,则这一行就是满行。满的那行上面所有的行整体下移一行就是消除这个满行。代码如下:public boolean fullCell(int row) Cell line=wallrow;for(int col=0;col=1;i-)System.arraycopy(walli-1, 0, walli, 0, COLS);Arrays.fill(wall0, null);利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断某一行中是否有空白,如果没有空白的话,则将当前的行号传递给deleteRow(int row)方法,由 该方法实现消除当前行,并将上面的方块依次下移一行,最后再重新调用Arrays.fill(wall0, null) 方法进行查找,直到所有行都检查一遍结束 5.2 视图层(View)设计 5.2.1 方块的显示 通过Tetris 类的paintNextOne(Graphics g)方法,从而实现方块的绘制,代码如下:/画下一个要下落的方块public void paintNextOne(Graphics g) if(nextOne=null)return;Cell cells=nextOne.cells;for(Cell cell:cells)int x=CELL_SIZE*(cell.getCol()+10);int y=CELL_SIZE*(cell.getRow()+1);g.drawImage(cell.getImage(), x, y, null);/画正在下落的方块public void paintTetromino(Graphics g) if(tetromino=null)return;Cell cells=tetromino.cells;for(Cell cell:cells)int x=CELL_SIZE*cell.getCol();int y=CELL_SIZE*cell.getRow();g.drawImage(cell.getImage(), x, y, null); 5.2.2 障碍物的显示 通过视图层的Tetris类的paintWall(Graphics g)方法调用 Ground的drawMe(Graphics g) 方法,从而实现障碍物的绘制,代码如下:public void paintWall(Graphics g) /画格子for(int row=0;rowROWS;row+)for(int col=0;colCOLS;col+)Cell cell=wallrowcol;/得到坐标int x=CELL_SIZE*col;int y=CELL_SIZE*row;if(cell=null)/画小矩形g.drawRect(x, y, CELL_SIZE, CELL_SIZE);else/画对应的图片g.drawImage(cell.getImage(), x, y, null); 5.2.3 点击事件通过点击事件来控制,图形的左右移动,以及图形的旋转,代码如下:public void keyPressed(KeyEvent e) int key=e.getKeyCode(); if(key=KeyEvent.VK_Q) System.exit(0);if(pause)if(key=KeyEvent.VK_C)continueAction();return;if(gameOver)if(key=KeyEvent.VK_S)startAction();return;switch (key) case KeyEvent.VK_DOWN:softDropAction();System.out.println(tetromino);break;case KeyEvent.VK_LEFT:moveLeftAction();break;case KeyEvent.VK_RIGHT:moveRightAction();break;case KeyEvent.VK_SPACE:hardDropAction();break;case KeyEvent.VK_UP:rotateAction();break;case KeyEvent.VK_P:pauseAction();break;repaint();5.2.4 图形的各种状态通过图片的坐标来控制各种图形的形状,代码如下:class T extends Tetrominopublic T()cells0=new Cell(0,4,Tetris.T);cells1=new Cell(0,3,Tetris.T);cells2=new Cell(0,5,Tetris.T);cells3=new Cell(1,4,Tetris.T);states=new State4;states0=new State(0,0,0,-1,0,1,1,0);states1=new State(0,0,-1,0,1,0,0,-1);states2=new State(0,0,0,1,0,-1,-1,0);states3=new State(0,0,1,0,-1,0,0,1);class I extends Tetrominopublic I()cells0=new Cell(0,4,Tetris.I);cells1=new Cell(0,3,Tetris.I);cells2=new Cell(0,5,Tetris.I);cells3=new Cell(0,6,Tetris.I);states = new State new State(0, 0, 0, -1, 0, 1, 0, 2), new State(0, 0, -1, 0, 1, 0, 2, 0) ;class S extends Tetrominopublic S()cells0=new Cell(0,4,Tetris.S);cells1=new Cell(0,5,Tetris.S);cells2=new Cell(1,3,Tetris.S);cells3=new Cell(1,4,Tetris.S);states = new State new State(0, 0, 0, -1, -1, 0, -1, 1), new State(0, 0, -1, 0, 0, 1, 1, 1) ;class Z extends Tetrominopublic Z()cells0=new Cell(1,4,Tetris.Z);cells1=new Cell(0,3,Tetris.Z);cells2=new Cell(0,4,Tetris.Z);cells3=new Cell(1,5,Tetris.Z);states = new State new State(0, 0, -1, -1, -1, 0, 0, 1), new State(0, 0, -1, 1, 0, 1, 1, 0) ;class L extends Tetrominopublic L()cells0=new Cell(0,4,Tetris.L);cells1=new Cell(0,3,Tetris.L);cells2=new Cell(0,5,Tetris.L);cells3=new Cell(1,3,Tetris.L);states = new State new State(0, 0, 0, 1, 0, -1, -1, 1), new State(0, 0, 1, 0, -1, 0, 1, 1), new State(0, 0, 0, -1, 0, 1, 1, -1), new State(0, 0, -1, 0, 1, 0, -1, -1) ;class J extends Tetrominopublic J()cells0=new Cell(0,4,Tetris.J);cells1=new Cell(0,3,Tetris.J);cells2=new Cell(0,5,Tetris.J);cells3=new Cell(1,5,Tetris.J);states = new State new State(0, 0, 0, -1, 0, 1, 1, 1), new State(0, 0, -1, 0, 1, 0, 1, -1), new State(0, 0, 0, 1, 0, -1, -1, -1), new State(0, 0, 1, 0, -1, 0, -1, 1) ;class O extends Tetrominopublic O()cells0=new Cell(0,4,Tetris.O);cells1=new Cell(0,5,Tetris.O);cells2=new Cell(1,4,Tetris.O);cells3=new Cell(1,5,Tetris.O);states = new State new State(0, 0, 0, 1, 1, 0, 1, 1), new State(0, 0, 0, 1, 1, 0, 1, 1) ;5.3 控制层(Controller)设计 控制层主要是实现图形工厂生产图形,图形按键事件的处理,方块、障碍物显示的控 制,图形自动下落和障碍物生成的控制,玩家操作有:旋转方块;以格子为单位左右移动方块;让方块加速落下。方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。当区域中某一行横向格子全部由方块填满,则该列会消失并成为玩家的得分。同时删除的行数越多,得分指数上升。当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。一般来说,游戏还会提示下一个要落下的方块 预先设置的随机发生器不断地输出单个方块到场地顶部,通过控制层这个大管家最终实现此俄罗斯方块 的按键事件的处理以及各种逻辑的处理。5.4 游戏演示 5.4.1 游戏界面显示 游戏界面是有图片实现,如图4-3所示:.图4-35.4.3 分数和销毁的行数 每销毁一行分数加1分,连续销毁23行加10分,销毁4行加20分,如图4-4所示:图4-45.4.4 结束界面当游戏结束是点击S可重新开始游戏,如图4-5所示:图4-5第六章 系统测试 6.1按键事件的功能测试 (1)方块移动测试游戏过程中,点击“左、右、下”方向键 输出:方块正常移动,不会移出边界 结果:正常 (2) 方块反转测试游戏过程中,点击向上方向键 输出:方块无边界和障碍物阻挡的情况下可反转 结果:正常 6.2 方块堆砌与消行测试 (1) 当方块下落到最底面或与障碍物接触时 输出:方块成功堆砌在底部 结果:正常 (2) 当出现满行现象时 输出:所有满行被消除,方块依次下移 结果:正常 6.3 测试结果分析 经过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。结 论 游戏设计与实践是一项复杂而且庞大的工作,在选题之后,我才意识到过程的艰难,因为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年会展策划与设计中级考试热点分析及模拟题详解
- 2025年生物质碳化专用炉项目发展计划
- 2025年电力测量仪表项目建议书
- 腕管综合征护理
- 2025年家畜良种胚胎生物工程制品项目合作计划书
- 安徽省A10联盟2025-2026学年高二上学期9月学情调研生物试卷(含答案)
- 2025年教具及类似用具项目发展计划
- 执业临床考试题及答案
- 2025学年北京市房山区高三语文上学期开学考试卷附答案解析
- 2025-2026学年云南省部分学校高二(上)联考数学试卷(8月份)含答案
- 保险法考试题型及答案
- 公司投标奖罚管理办法
- 支气管造影动脉栓塞术护理
- 老年肺炎的护理课件
- 开业活动湘菜活动方案
- 展会保险销售方案(3篇)
- 环保设备介绍
- 天气学原理和方法知识点梳理
- 麻醉期间体温监测
- 公司第三方回款管理制度
- 海上风电场集电线路方案的选择
评论
0/150
提交评论