![[精品论文]JAVA俄罗斯方块毕业论文正文_第1页](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a1.gif)
![[精品论文]JAVA俄罗斯方块毕业论文正文_第2页](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a2.gif)
![[精品论文]JAVA俄罗斯方块毕业论文正文_第3页](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a3.gif)
![[精品论文]JAVA俄罗斯方块毕业论文正文_第4页](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a4.gif)
![[精品论文]JAVA俄罗斯方块毕业论文正文_第5页](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a5.gif)
已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计课程定做 QQ1714879127第1章 绪论1.1 游戏的历史游戏是人类生活的重要组成部分,从第一个电子游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。1.1.1 从头谈起真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机DEC公司的PDP10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说一千零一夜在Apple平台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。1986年,任天堂公司发售了一款真正的游戏巨作超级马里奥。20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。1.1.2 图形硬件的革命图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。在所谓的GPU(图形处理器)概念出现以前,特殊的图形硬件只出现在诸如SGI和E&S系统里面,这些硬件价格太昂贵,不过这些公司提供了第一代基于硬件的顶点变换和纹理映射的解决方案。1.2游戏的意义与内涵游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。1.2.1 游戏的组成要素“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容, “游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素。行为模式:“游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做“猜拳游戏” 吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”。1.3 俄罗斯方块游戏俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。但是经过时代的变迁,当初简单却变化无穷的俄罗斯方块游戏如今却已失去了它的市场,究其原因,主要是因为游戏硬件以及技术的革新使得优秀的游戏接二连三地推出,而俄罗斯方块游戏作为一款形式、内容过于简单的游戏势必经受不住时间的冲击的。现在作者将改写这个固定的游戏模式,通过增加一系列的新功能,开发出一种全新的俄罗斯方块游戏,使游戏用户重新燃起对俄罗斯方块游戏的热爱。毕业设计课程定做 QQ1714879127沈阳工程学院毕业论文 第2章 可行性研究第2章 可行性研究2.1 设计目的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。2.2 可行性研究前提基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性,及适当的功能扩展。主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,并通过此次软件开发过程全面提高自身的综合素质。可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个有一定可玩性的游戏软件。评价尺度:本游戏尽量追求游戏操作的合理性及正确性,但是仍不排除会出现一些偶然性的错误;同时游戏也尽量追求界面的美观性及功能的丰富性,但是基于时间的关系,可能会有极少数的拓展功能不能实现。2.3 可行性分析管理可行性: 本游戏设计的目的只在于提高自身实践水平,并不对外发布,因此完全具有管理可行性。经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台电脑便可,所以不用考虑到经济问题。技术可行性:可用与本游戏的编程语言有VB,VC,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择JAVA作为编程语言。需要对图形界面设计、事件处理、多媒体、网络编程等有一定了解。社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。2.4 结论综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写沈阳工程学院毕业论文 第3章 需求分析第3章 需求分析3.1 引言对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。3.2 游戏功能需求3.2.1 游戏界面需求良好的用户界面设计。本游戏主要有三个界面,一是用于主游戏区的游戏画布,用来显示游戏时运动和落下去的方块,二是用于控制游戏的各种控件以及显现游戏信息的一些组件,这是一个面板,三是进行网络对战时用以显示对方游戏信息的面板。3.2.2 游戏控制需求方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。3.2.3 图形显示需求随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,一共设置十关,每关方块下落的速度不同,游戏中先结束的一方为本局输家,十关过后,胜出局数多的为赢家。3.2.4 音乐播放需求本游戏,应该具备播放背景音乐和发生相应操作时的音效的功能,比如,方块落下、满行消除时的音效。3.2.5 道具使用需求本游戏,可以具备几种道具的使用功能,比如,这些道具可以是某些特殊的方块,比如,可以定义一种旋转的方块,也可以定义一种炸弹,能够炸毁一定数量的方块,以增强游戏的趣味性。3.2.6 网络对战需求本游戏,具备网络对战功能,所以要求玩家能够看到对方的游戏信息。3.3 运行环境及系统性能的需求 本游戏对运行环境及系统性能的需求如表3.1所示:表3.1 游戏对运行环境及系统性能需求分析表操作系统Windows98/me/2000/XP/2003内存容量64MB显卡要求8M声卡要求支持DirectX 8.0 声卡交互工具键盘/鼠标CPU奔腾133以上光驱8倍速以上硬盘空间400MB显示器VGA以上显示器开发及运行软件JDK1.5以上版本3.4 接口需求本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对方块进行移动变形,要使用键盘的接口事件。3.5 方案论证可用于较好地实现俄罗斯方块的语言有C+、VB、JAVA,所以客观上说来,可用Jave,VB和C+这三种语言编写俄罗斯方块程序。下面结合自身实际情况分别论述三种语言的优缺点并从中选择一种适合的编写语言。3.6.1 VB的特点VB是完全中文化的环境使用,语句生成器和快速提示帮助使用户不必记忆成千上万的属性和方法,在较短的时间内就能开发出功能强大的应用程序。Internet应用程序的开发功能更加强大和容易,支持动态HTML技术的应用程序。种类繁多,功能强大的多媒体控件,能帮助用户在较短的时间内用较少的语句编写出图文声像并茂的多媒体程序。能对多种数据库进行读写操作。它所提供的可视化数据管理器能帮助用户构造多种类型的数据库。用户自定义类型可以作为参数或作为公共属性和方法的返回值,函数可以返回数组变量,动态数组可以赋值,文件系统对象,按名调用,增强创建对象函数和StrConv函数。应用程序安装向导能帮助用户自动生成具有一定功能的应用程序,加快了程序的开发速度。3.6.2 C+的特点C+是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:从SIMULA 67中吸取了类,从ALGOL 68中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了Ada的类属和Clu的模块特点,从BCPL中吸取异常处理,从BCPL中吸取了用/表示注释。C+保持了C的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风范的支持主要通过虚拟函数。C+既有数据抽象和面向对象能力,语言运行性能高多,加上C语言的普及,而从C至C+的过渡较为平滑,以及C+与C的兼容程度可使数据巨大的C程序能方便地在C+环境中重用。尽管C+当初的设计本意是帮助管理大型程序,但其用途并不仅限于此。C+的面向对象的特性可有效地用于实际的程序设计工作。C+常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。而且,由于C+共享C的效率,所以用C+可以构成很多高性能的系统软件。3.6.3 Java的特点Java是定义位于网络计算的计算机语言,它几乎所有的特点也是围绕着这一中心展开的并为之服务的,这些特点使得Java语言特别适全于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java也集中体现和充分利用了若于当代软件技术新成果,如面向对象、多线程等,这些也都在它的特点中有所反映。平台无关性:如前所述,Java语言独特的运行机制使得它具有良好的可移植性,利用Java,开发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。面向对象:Java是纯面向对象的编程语言。面向对象技术较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。多线程机制:多线程是当今软件技术的又一重要成果,已成功应用在操作系统、应用开发等多个领域。多程序技术允许同一个程序有两个执行线索,即同时做两件事情,满足了一些复杂软件的需求。Java不但内置多线程功能,而且提供语言级的多线程支持,即定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。简单易学:如前所述,衍生自C+的Java语言,出于安全稳定性的考虑,去除了C+中不容不得易理解和掌握的部分,如最典型的指针操作等,降低了学习的难度;同时Java还有一个特点就是它的基本语法部分与C语言几乎一模一样。这样,无论是学过Java再学C,还是已经掌握了C语言再业学Java,都会感到易于入门。3.6.方案选择面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。C+和Java在面向对象这方面比VB要强,所以我排除了用VB做的可能性。但是C+主观上在校期间学校并没有这方面的授课内容,虽然自学了一些内容,对C+也有一定了解,但是若用C+实现,必定是基于windows应用程序的Visual C+设计,对于windows编程,我还有待提高,而我对JAVA的掌握,相对而言,比较熟悉,综合考虑,决定采用Java语言编写俄罗斯方块。沈阳工程学院毕业论文 第4章 概要设计第4章 概要设计4.1 游戏设计所要遵循的规范一个良好的程序,在编写之前,必须要制定各种编写规范,以便组内各成员协调工作。当然,本游戏只是一个小程序,过多的规范制定显得没有必要,但是,也必须制定一个对于变量的命名规则,这有利于设计出一个可读性高的程序。本程序变量的命名规则为:所有变量一律使用相应的英文单词命名如果同一类中需要创建多个同一类型,功能相似的变量,变量的前缀应使用统一的英文单词,后缀为下划线“_”加数字。比如,从JButton对象创建开始按钮,可以命名为:startbutton。再如,创建多个道具按钮,可以命名为toolbutton_1,toolbutton_2等等。方法命名尽量使用能够描述本方法功能的英文单词比如,游戏初始化可以用gameinitial。类名字命名也应当使用能够描述本类功能的英文单词。如方块类,可以用class block。4.2 游戏总体设计分析Java为纯面向对象(Object-Oriented,OO)的程序语言,它的诸多优点在此就不作论述了。从面向对象的观念出发,本程序主要可分为以下几个模块:l 客户端GUI模块l 方块及地图数据模块l 音频文件播放模块l 道具使用模块l 网络传输模块分析对象的技巧在于它的功能的扩展性及维护效率。试想,如果因为外部环境或者用户需求的变化需要对程序进行功能扩展或者维护,就要对代码作大幅度的更动甚至重写,这样就失去了面向对象的优势,所以在本程序分析时将独立性高的模块作为一个对象,以提高程序的可扩展性和可维护性。4.3 各模块的算法设计4.3.1客户端接口的设计 “客户端控制器”是指游戏界面上显示游戏相关信息及排布游戏控件的面板。游戏客户端控制器上集合了游戏的各种事件处理,包括游戏定时控制,键盘控制,道具控制,音乐播放,选择网络对战等各种控制命令。本模块是程序的主模块,其它四个模块都由本模块进行控制。1 客户端接口的结构,如图4.1所示: 关客户端控制器程 序 运 行网 络对 战背景音 乐游戏暂 停道具使 用游戏开始图4.1 客户端结构图2 客户端接口的实现一个程序,在追求程序性能的同时,应该同时注重GUI的美观度,基于此,本游戏应该采用JAVA中swing组件包,swing组件是一组完全由JAVA语言编写的轻量级组件,没有本地代码,不依赖本机操作系统的支持,所以swing比AWI具有更强的实用性,比起AWI组件,swing组件在美观度和控制性能方面具有如下几方面的优点:可插入的外观感觉在AWI组件中,犹豫控制组件外形恶对等类与具体平台相关,使得AWI组件总是只有与本机相关的单一的L&F。swing对PL&F的支持改变了单一图形界面的观感,即实现了在任意平台上运行同一个swing程序能有不同恶L&F。变成人员可以在GUI程序设计中加入相应的开关,使得程序运行时可以根据喜好选择不同的L&F,呈现不同个性化界面。设置边框可以使用相应的方法为swing组件设置一个或多个边框。Swing中提供了各种各样的边框供用户选用,也能够给通过变成人员的组合来设计个性边框。充分利用边框设计,可以协助布局管理器对组件进行合理的布局。使用图标此特性使得swing组件较之AWI组件具有更强的外观感受。与AWT组件不同,许多swing组件如按钮、标签,不仅可以使用文字,还可以使用图标来加强外观效果。支持键盘操作在swing组件中,使用Jcomponent类的registerKeyboardAction方法,能使用户通过键盘操作来替代鼠标驱动GUI上swing组件的相应动作。可存取性支持所有swing组件都实现了可存取性接口,提供对可存取性的支持,使得辅助功能如屏幕阅读器、语音识别系统,能十分方便地从swing组件中得到信息。MVC体系结构Swing组件设置三个通讯对象:模型、视图和控件,并将模型与视图奋力开来,这样可以方便用户直接通过模型管理数据,实现基于一种模型的多种视图处理。基于swing组件的优点,结合本程序的设计目标,程序的界面将使用swing组件实现。4.3.2方块及地图数据模块的设计这是俄罗斯方块游戏最基本的功能模块,本游戏的设计思想是只要有客户端控制器及方块地图数据模块,就能实现游戏的基本功能。本模块其实可以分开为方块和地图两个模块,但考虑到二者联系紧密,需要共享数据结构,属于公共耦合,耦合性过高,将二者分开也有悖于作者设计的游戏算法,增加了程序的编写难度,故把它们并作了一个对象。1方块数据方块数据存储了七种不同形态的方块,以及每个方块的四种形态,可用一个7x4x4x4的四维数组表示,例如,定义一个四维数组block7444,数组block的第一维表示七种不同形态的方块,第二维代表方块的四种不同翻转状态。数组的第三维和第四维代表某一种形态的方块的某一状态。假定,block00ij的值如以下:1,1,0,0 0,1,0,0 0,1,0,0 0,0,0,0则,block00ij代表“7”字型的方块。当方块翻转时,只需改变第二维的下标即可,即,block00ij变为block01ij。而如果更改方块形态,就改变数组第一维坐标。 2地图数据本游戏的游戏地图为25x15格,故应当用一个25行15列的二维数组存储游戏地图数据,但是考虑到本游戏嵌入了方块越界自动纠正功能,而方块越界,实际上就是游戏地图数组越界。假定,方块数据有以下数据模式,代表长条形的一种方块:0,0,0,10,0,0,10,0,0,10,0,0,1当以上数据模式所代表的方块处在游戏的左边界区,并且发生翻转时,方块可能翻出游戏地图外,在这种情况下,就发生了游戏地图数组越界,JAVA异常处理系统会抛出ArrayIndexOutOfBoundsException,为避免这种情况的发生,游戏地图数组应当适当增大,故本游戏将地图数组长度和宽度各扩大了三个单位,定义成为28x18模式的数组。3建立游戏的坐标系统俄罗斯方块,最终是要将方块绘到游戏地图中,如何确定方块在地图上的位置,就需要一个方块数组与游戏地图数组的映射关系。建立一个合理的坐标系统,对于游戏的设计有莫大的方便。结合JAVA的坐标系统,综合游戏设计上的考虑,本程序最终确定了将游戏地图的左上角坐标表示为(0,0),同样,方块在游戏地图中表示为记录方块左上角在游戏地图中的坐标。4对方块数据和游戏数据的操作确定了方块数据与地图数据的映射关系,对方块和游戏数据的操作就变得简便了。对方块的操作包括方块的左移、右移、下移等,当方块左移时,只需将方块数组左上角的坐标往左方向移动一个单位即可,同理,方块右移、下移时,只需将坐标往右、往下移动一个单位。如果以X代表方块左上角的横坐标,以Y代表纵坐标,方块左移,执行的操作是X-,方块右移,执行的操作是X+,方块下落,执行的操作是Y+。5游戏绘图俄罗斯方块具有七种不同形态的方块,而方块又分别有正在下落和已经落下固定两种不同状态,如何在游戏地图中实现静态和动态地绘制出七种不同形态的方块,具有一定的挑战性。经过反复思考论证,本游戏决定采用不同的绘制模式来分别实现绘制动态和静态方块。遍历方块数组绘制动态方块假定调用Graphics类中的fill3DRect(int x,int y,int width,int height,Boolean raised)方法绘制方块,再假定方块数组左上角在地图中的坐标为x和y,则绘制动态方块可采用如下方式实现。for(int i=0;i=3;i+) for(int j=0;j=3;j+) if(Blockblocktypeturnstateij=1)g.fill3DRect(y+j)*width,(x+i)*width,width,width,raised);这种绘制方式的原理是每一次绘制一个单位长度的正方形格子,在将这些格子组合成某一种的形态方块。这里面,某一种形态的方块是由方块数组中的参数i和j决定的,具体是哪种形态的方块,方块的哪一种翻转状态,是由参数blocktype和turnstate决定的。而参数y+j表示的当前格子的左上角在游戏地图中的横坐标,x+i表示的是小格子的纵坐标。遍历游戏地图数组实现坠下方块的消行绘制当坠下的方块有满行需要重新绘制时,需要进行消行绘制。首先,可用一个数值代表游戏地图数组的某一个区域是否有方块填充,假定这个数值是2,即如果地图数组中某一个元素的值为2,则表示这个元素所代表的地图区域存在方块。进行消行绘制时需要判断地图数组的某一行是否全为2,如果全为2,则可以认为这行被方块填满,需要进行消行,然后再继续往下判断下一行,直到所有满行被消除为止。开始结束否地图数组某一行是否全为2是消去这一行图4.2 消行流程图4.3.3音乐播放模块的设计音频文件的播放涉及到IO操作,不管是何种系统,对于IO操作,都是比较慢的,如果当程序运行到需要播放音效时,再从文件中取得音频数据,然后播放,很可能会造成一种“卡”的感觉,影响用户体验。基于此,经过反复论证,本游戏决定采用以剪辑的方式来播放音频文件。JAVA语言中的剪辑Clip,是一种在播放之前就提前加载于内存中的特殊的音频数据流,当需要用时,只需直接从内存中调出即可,省去了IO读取所需的大量时间,而且剪辑播放完毕后,仍旧存储在内存中,对于游戏的背景音乐及音效这类需要反复多次播放的音频,这种方式是非常有用的。单单采用剪辑还是不够的,音频文件的播放,应当另外开启线程来控制,这样既可以更方便地控制音频的播放、暂停等操作,也不会程序执行其它的操作。1音效播放在游戏开始、暂停,方块落下及消行时添加相应的音效既可以提醒用户发生某种变化,又能增强程序的表现效果。音效,相对来说是比较小的音频文件,对于音效,可选取wav格式的音频文件,不但音频质量好,在系统支持、存储性方面也占有优势。根据多线程及剪辑的思想,首先在程序初始化时应该把音效载入内存,游戏开始后开启一个线程,当满足音效播放的条件时,即播放音效,音效播放完毕后,应当将相应的音频文件的剪辑位置重新置为开始处。2背景音乐播放同音效的播放,背景音乐的播放也应当采用剪辑的形式,以方便音乐的循环多次播放,同样,背景音乐播放可能是贯穿于整个游戏过程,背景音乐的播放必须采用单独的线程控制,以不影响程序执行其它操作。因为背景音乐采用单独线程播放,这里面会出现一个问题,当用户选择暂停背景音乐播放时,背景音乐播放线程是进入wait状态还是以另一种方式实现暂停?如果背景音乐进入wait状态,则当用户取消暂停播放时,必须再创建一个线程去唤醒它,新建一个线程只是控制背景音乐播放,不免浪费资源,而且也增加程序编写难度。考虑到背景音乐极可能在玩家的整个游戏过程中都处在播放状态,当暂停时,玩家也随时会取消暂停,故而在游戏结束之前,本程序会将背景音乐播放线程一直处在执行状态,如果玩家暂停音乐播放,则让线程转去处理检测玩家是否取消暂停,当检测到暂停取消后,继续播放音乐。4.3.4道具使用模块目前已经存在的俄罗斯方块游戏鲜有能够使用道具的,开发一款能够使用道具功能的俄罗斯方块游戏具有一定挑战度,因为道具的开发不仅涉及到游戏策划等创意性的内容,也与图形图像处理等美工技术息息相关,而作者对美工却是不擅长的,基于此,本游戏最初版本的道具可能只有一个,但是为了将来版本提升的方便,本程序另外预留了三种道具的使用接口。本游戏一共设计了五种道具,旋转方块、炸弹、地雷、仙女、恶魔,这四种道具是程序现今或将来版本提升后要使用到的,暂时,本游戏将只实现旋转方块和炸弹两种道具。1旋转方块旋转方块是一种增加游戏难度的道具,它本身其实就是方块,和正常的方块的不同之处就在于,正常方块在下落时,如果没有接受到用户的控制命令是不会旋转的,而旋转方块则会不断地旋转下降。这样,用户便很难控制旋转方块下坠到指定的位置。对于旋转方块的定时下落,可以借用方块控制线程,但是旋转方块的定时旋转,则只能依靠另一个线程实现。2炸弹本游戏定义的炸弹能够像方块一样从地图的顶部坠落,当下坠到地图下部与堆积的方块碰撞时会发生“爆炸”,爆炸将炸毁一定数量的方块。炸弹的视图模型以现成的方块模型为依据,即除了添加的“炸弹”标记,它和七种方块在外形上是没有任何区别的。炸弹,可以看成是一种特殊类型的方块。对于炸弹的杀伤力,有一个规则,如果炸弹能够没入已经坠下的方块中,则可以将这个“炸弹”所占的行数全部炸毁,并增加相应的积分,如果本身已经能够消行,则额外再奖励一倍的积分。否则,炸弹将只炸毁它左右各两个格子范围内的方块。4.3.5网络对战模块目前的俄罗斯方块游戏中,也鲜有具备网络对战功能的,这是因为此类小游戏不具备在网络对战方面的可玩性,当然,如果能够利用道具进行网络对攻,那就另当别论了。就如QQ上的火并俄罗斯方块一样,要实现利用道具进行网络对攻,其中一方玩家必须能够看到他的对手的游戏信息,但这并限于看到对手的道具数量,下一个方块预告。所以,本游戏要求将游戏地图中方块的实时信息远程传输到另一方玩家的显示平台。图像的远程传输首先要求将游戏地图中的方块信息转化为图像资源,然后将图像资源转化成基于某种图片格式的数据流,进行打包发送,在接收端上,再把图像数据从数据包上提取出来,进行解码,生成相应的图像,然后再把图像绘制到游戏画布中。进行网络传输,首先应当选定一种网络传输协议。TCP套接字协议和UDP数据报协议二者中前者传输速率慢,但是提供可靠性保证,准确率高,后者传输速率快,但是并提供可靠性保证。对于游戏的网络对战来说,对网络传输的实时性要求比较高,一方玩家必须能够看到另一方玩家游戏状况的实时信息,这就要求图像的传输速率必须要快,同样因为它的实时性,即使某一次传输错误,后面一帧图像也会马上覆盖前面的图像,人的肉眼基本上不能辨别出这种错误,基于此,本游戏的网络对战传输方式应该采用基于UDP的用户数据报协议。4.4 可靠性设计游戏在设计时应当尽量注意降低各个模块之间的耦合性,增强模块的独立性,以便将来需求时进行游戏版本的提升以及相关维护。4.5 概要设计评审经过反复论证,上面提出的设计方案,尤其是游戏设计的各个功能模块间的算法确实可行,因此,本游戏可进入详细设计阶段。沈阳工程学院毕业论文 第5章 详细设计第5章 详细设计5.1 客户端设计客户端是游戏非常重要的一部分,它是所有游戏功能的开关,上面集合了许多的图像用户接口,客户端的实现应该确定一种合理的组织架构。图5.1是客户端的组织结构图:游戏客户端网络对战开 关背景音乐开 关游戏控制器游戏开 关道具控制器游戏定时控 制键盘控 制音效控制器图5.1 客户端的组织架构图游戏客户端采用swing组件开发,并且向其注册监听器,以实现各种控制功能,综合游戏前面的设计,客户端上至少要注册三个监听器,分别是窗口监听器(WindowListener)、动作监听器(ActionListener)、键盘监听器(KeyListener)、选项监听器(ItemListener)。根据初步设计,可以确定客户端上所要用到的Swing组件对象有JFrame对象、JPanel对象,JLabel对象、JButton对象、JMenuBar对象、JMenu对象、JMenuItem对象、JTextField对象、JTextArea对象、JDialog对象、JRadioButton对象、JTabbedPane对象,至少十二个swing组件对象。JFrame用以创建窗体,考虑到本游戏具备单机和网络对战,JFrame对象的大小并不是不变的,在单机游戏和网络对战时,JFrame对象分别会呈现出不同大小,以适应不同的游戏环境需求。在主界面上,可以确定有四个JPanel对象。第一个JPanel对象是用来绘制方块的游戏地图,第二个JPanel对象是用来排列其它各种组件的容器组件,做游戏信息显示面板,可以放在游戏地图的左边,第三个JPanel对象是用来显示NEXT方块的,应该画在第二个JPanel对象上,第三个JPanel对象是当网络对战时,用来绘制另一方玩家游戏地图的绘图面板,放在游戏信息显示面板的右边。可以确定,主界面上,本游戏的按钮有五个,一个“开始游戏”按钮,四个道具按钮,排列在游戏信息显示面板上,可以将“开始游戏”按钮放在顶端,当按下“开始游戏”按钮后,应该改变“开始游戏”按钮的文本内容为“暂停游戏”,按下“暂停游戏”按钮后,再将其文本内容重新设置为“开始游戏”。至于四个道具按钮,可以放在信息显示面板的中部位置。JTextArea对象用来显示游戏时的相关信息,比如网络对战时显示双方玩家的比分等信息。JTextArea应该放在游戏信息面板的底部。JTextField对象至少应该有两个,用来显示双方玩家的分数信息,考虑到对战时的局时设置,还应该增加一个文本框用来计时,计时的文本框最好放在JTextArea对象的上方,这样,两个分数文本框则布置在道具按钮和计时文本框之间。本游戏主界面上的JLabel对象至少应该有四个。首先,应该为NEXT方块画布添加一个标签,然后在四个道具按钮上也应该添加一个道具标签,最后,在两个显示分数的文本框上方也应该添加一个标签最后,在游戏主界面的顶端要添加一个菜单栏,菜单栏上添加几个菜单对象。综合以上信息,可以大概确定本游戏的主界面,如图5.2所示:图5.2 游戏界面图5.2音效播放控制模块设计本游戏的音效播放采用剪辑及多线程的方式实现。音频播放需要用到JAVA中的sound包。首先,利用AudioSystem这个音频工厂的getAudioInputstream()方法从音频文件中取得一个音频输入流,其次,从这个音频输入流创建一个Clip,然后打开这个Clip。这样,当需要时,就可以利用Clip中的start()方法播放这个剪辑,重复播放,可以用setFramePosition(0)这个方法将剪辑的位置重新置为0。音效剪辑的播放控制流程图如图5.3所示:开始满足音效播放条件Notify音效播放线程,游戏线程进入wait状态播放音效Notify游戏线程,音效播放线程进入wait状态结束图5.3 音效播放流程图5.3背景音乐播放控制模块设计同音效的播放,背景音乐的播放也应当采用剪辑的形式,以方便音乐的循环多次播放,同样,背景音乐播放也要单独的线程进行控制。前面概要设计提出了一个问题。因为背景音乐采用单独线程播放,当用户选择暂停背景音乐播放时,背景音乐播放线程如果以进入wait状态来暂停的话,则当用户取消暂停时必须还需要一个线程来唤醒它,额外增加一个线程的话,不免浪费系统资源,而且也会增加编写的难度。从另一个角度来说,背景音乐极可能在玩家的整个游戏过程中都处在播放状态,当暂停时,玩家也随时会取消暂停,因此,可以让背景音乐线程从游戏开始后就一直处在执行状态,如果用户暂停播放,可以让线程转去循环处理检测用户是否取消暂停,当检测到用户取消暂停时,继续播放音乐。背景音乐播放控制的算法流程如图5.4所示:开始否背景音乐播放控制线程是否接受到恢复信息是否处在暂停状态是否是播放背景音乐接受到暂停信息暂停播放结束图5.4 背景音乐播放控制流程图5.4网络对战模块设计如图5.2游戏界面图所示,可以在菜单栏中“游戏”菜单项中添加一个“网络对战”菜单选项,当用户单击“网络对战”菜单选项后,弹出一个对话框,提示用户输入要连接的主机的IP地址,用户输入IP地址后,程序会记录下这个IP地址,当用户开启游戏后,数据传输线程会将数据发送到这个IP地址的指定端口号上。对于实现网络传输的技术,可以用UDP数据报传输方式。首先从AWT包中的Robot创建一个实例,这个类的实例是有关本机屏幕资源的信息,它有一个createScreenCapture()方法,可以用它来创建屏幕上指定坐标位置,指定大小的一副图像。当然,在此之前,我们还需要获得游戏地图所在屏幕的坐标。Component类中提供了一个获取组件屏幕坐标的方法getLocationOnScreen(),我们可以利用这个方法获取组件在屏幕上的坐标,然后把这个坐标赋给一个Point对象,再从Rectangle类中创建一个指定屏幕坐标位置,指定宽和高的矩形,然后就可以用createScreenCapture()创建一副包含游戏地图区域的图像了。创建图像信息以后,可以利用imageio包ImageIO类中的write(RenderedImageim, StringformatName, OutputStreamoutput)方法将图像文件写入到一个输出流中,然后可以用toByteArray()从输出流中取得数据,最后就是将数据打包发送了。对于接收端接收到的数据包,可以先从数据包中将图像字节数据提出出来放到一个字节数组中,然后利用Toolkit包中的createImage(byte imagedata)方法将图像字节数据转化成图像,最后将图像画到游戏画布中即可。相应的算法流程如图5.5所示:开始开始确定游戏地图在屏幕上的坐标构造一个指定坐标大小的Rectangle对象从指定的端口号接收数据包将Rectangle对象指定的屏幕区域转化为图像资源从数据包中取得字节数据将此图像资源以某种格式写入输出流以此字节数据创建一副图像从输出流获取字节数据将图像绘制到游戏画布中将字节数据打包发送结束结束(a) 图像发送流程 (b) 图像接收流程图5.5 图像发送和接收流程图5.5道具模块设计5.5.1旋转方块的设计旋转方块的出现是随机的,而随着游戏级别的提升,每一关出现的旋转方块的数量也会不同,对于七种方块来说,它们在任何一段时间内出现的概率都是一致的,再者,旋转方块需要两个定时器,定时下落和定时旋转。旋转方块的这个性质要求它必须要两个线程才能控制,但是为了充分利用资源,我们可以利用方块控制线程去控制旋转方块定时下落,然后只需再创建一个线程控制它定时旋转即可。确定了两个线程共同控制旋转方块,就会出现一个线程协调工作的问题。如果一个新方块出现的时机正好也是旋转方块出现的时机,程序就会出现紊乱,所以必须保证,在同一时间,正常方块和旋转方块只能出现一个。因为两个线程需要共同控制旋转方块,所以不能用wait()和notify()这两个方法去协调线程,而应当利用其它条件去协调两个线程。首先,游戏开始后,旋转方块控制线程可以随机休眠一定时间(这个休眠时间应该是随着游戏级别的提升而缩短的)。休眠时间结束后,循环检测正常方块是否已经落下,当检测到方块落下后,马上得到一个新方块,然后开启一个循环,在方块没有落下之前让它按一定的时间频率旋转,成为一个旋转方块。对于方块控制线程,在方块落下时应该休眠一定数量的时间,以让旋转方块控制线程有得到旋转方块的机会,如果超出这个休眠时间,旋转方块控制线程还没有得到新方块,则可以认为旋转方块控制线程还处在休眠中,方块控制线程得到一个新方块。相应的算法流程如图5.6和图5.7所示:休眠时间结束随机休眠一定时间检测现有方块是否已经落下是否能够消行方块是否已经落下是否能够消行休眠一定时间否是得到新方块休眠一定时间旋转方块否是游戏是否结束是否能够消行是否开始结束图5.6 旋转方块控制线程工作图休眠一定时间,让旋转方块控制线程有得到方块的机会检测方块是否已经落下是否能够消行是休眠时间结束旋转方块控制线程是否得到新方块是否能够消行是否否得到新方块方块下落开始结束图5.7 方块控制线程对旋转方块的控制示意图5.5.2炸弹的设计道具的出现是随机的。本游戏中要实现的道具“炸弹”和方块一样,从游戏地图顶部降落,每隔一个时间间隔,会自动降落一格。对于炸弹的控制,可以添加到道具(旋转方块)控制线程中。炸弹控制的算法流程如图5.8所示:休眠时间结束随机休眠一定时间检测现有方块是否已经落下是否能够消行是否能够消行是否能够消行休眠一定时间否是产生一个炸弹炸弹落下否否是否完全没入了方块中炸毁左右各两个格子范围内的方块格子炸毁所占行数的方块,增加相应积分,再额外增加所能消行的相应分数炸毁所占行数的方块,增加相应积分是否是是开始结束图5.8 炸
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司现金支取管理制度
- 公司落实安全管理制度
- 江苏开放大学2025年春大学英语(A)复习题3参考答案
- 2025房产买卖合同与购房协议
- 河南省2024~2025学年 高二下册第一次质量检测数学试卷附解析
- 广东省惠州市2024-2025学年高一下册数学期末考试模拟卷附解析
- 神秘传承的考验基础知识点归纳
- 产权顾问工作简历模板
- 社区社区服务社会学研究管理基础知识点归纳
- 上饶市市直学校遴选教师笔试真题2024
- 肝性脑病昏迷后的护理
- 合伙开快递合同范本
- TCAMIE 19-2024 城镇污水处理厂全过程除臭技术规程
- 2025年贵州贵安新区产业发展控股集团有限公司招聘笔试参考题库附带答案详解
- 2023-2024学年广东省深圳市罗湖区八年级下学期期末数学试题
- 神经损伤康复的未来趋势与挑战分析
- 宏观经济学知到智慧树章节测试课后答案2024年秋浙江大学
- 火灾解封申请书
- 国家安全青年有责
- 整体施工劳务服务方案
- DBJT13-119-2010 福建省住宅工程质量分户验收规程
评论
0/150
提交评论