




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
雷电小游戏的设计与开发毕业论文目 录1 绪论11.1 开发背景11.2 开发的目的和意义11.3 国内外研究现状及发展趋势21.3.1 2D雷电游戏 雷电321.3.2 3D雷电游戏 AirStrike3D II Gulf31.4 本文主要研究内容和章节安排42 游戏开发的关键技术和开发工具52.1 游戏开发的关键技术DirectX52.2 游戏的开发工具72.2.1 Delphi 简介72.2.2 Delphi 7 的特性83 游戏的功能模块设计和游戏内容设计103.1 游戏的功能模块设计103.2 游戏内容设计103.2.1 游戏规则103.2.2 游戏地图和游戏元素113.2.3 游戏的操作方法144 游戏的详细设计与具体实现154.1 游戏的详细设计154.1.1 地图部分154.1.2 角色部分154.1.3 数据结构的表达154.2 游戏的具体实现164.2.1 图像的滚动164.2.2 角色的处理194.2.3 碰撞检测的认定204.2.4 爆炸效果的处理214.2.5 键盘控制的实现224.2.6 地图编辑器及地图的载入235 总结与展望26参考文献27致谢28291 绪论1.1 开发背景这是一个经济社会快速发展的年代,人们的生活节奏越来越快,生活中的各种压力也越来越大。而电子游戏的出现,则为身处重重压力下的现代人提供了一种很好的娱乐休闲方式。近年来,我国的游戏产业取得了长足的进步,获得了比较快的发展。中国游戏产业总体上朝着一个更加健康、更加快速和有序的方向发展,产业规模、市场规模进一步扩大,游戏产业的自主创新能力不断增强,行业活力盎然。2009年中国游戏产业报告相关数据显示:2009年中国网络游戏实际销售收入为256.2亿元,比2008年增长了39.4%,为相关产业带来的直接收入达555亿元。中国自主研发的民族网络游戏实际销售收入为165.25亿元,比2008年增长了50.1%,占我国网络游戏实际销售收入的 64.5%。2009年,共有29家中国企业自主研发的64款网络游戏进入海外40多个国家和地区,实现销售收入1.09亿美元,比2008年增长了 53.9%。此外,2009年手机网络游戏实际销售收入为6.4 亿元,比2008年增长了25%。小游戏作为电子游戏家族中的一个独特的成员,在其中扮演着重要的角色。小游戏是相对于那些体积庞大、动辄需要几百兆甚至几个G安装空间,需要较高的CPU、内存、显卡性能支持的大型单机游戏或者大型网络游戏而言的,泛指所有体积较小,玩法比较简单,对计算机性能要求比较低的游戏,通常这类游戏以休闲益智类为主,主要分为单机版和网页版。近年来,小游戏产业发展迅速,各种新颖的小游戏层出不穷,形式五花八门,广受各个年龄段的用户的欢迎,玩家群迅速增加。本次开发的雷电是属于单机版的射击类小游戏,正是迎合了当前游戏产业特别是小游戏产业蓬勃发展的机遇,具备很好的发展前景。1.2 开发的目的和意义我们这批80年代中后期出生的人想必都对“任天堂”红白机、“小霸王”游戏机等名词不会太陌生,因为这些儿时的游戏曾给我们带来了不少童年的快乐,这些游戏机上诞生了无数经典的游戏:超级马里奥、坦克大战、走迷宫、热血足球、华容道、推箱子、魂斗罗、沙罗曼蛇这些游戏既是历史的经典,同时也是现在不少好玩的游戏的雏形。此次开发的雷电小游戏也是早就有了街机等各种平台上的版本,此次在PC平台上进行重新开发,意图也是推陈出新,既希望能继承原来已有版本的游戏的精华,同时也希望能够取得一定的突破。之所以选择来开发雷电这款小游戏,主要是由其射击类游戏的自身特点所决定的。射击类的游戏通常是玩家控制武器,来对敌方目标进行射击,击落敌机得分进而闯关晋级的过程。射击过程中的迅捷的速度、激烈的碰撞、惨烈的爆炸效果等都令许多玩家陶醉在其中,享受游戏的激情与快感。在紧张的学习和工作之余,射击类的游戏更能让玩家放松身心,达到娱乐的目的。因此,我选择了开发这款雷电小游戏。1.3 国内外研究现状及发展趋势1.3.1 2D雷电游戏 雷电3类似雷电的直向卷轴射击游戏在街机以及任天堂的红白机时代就已经非常流行。继移植到PS2版上后,雷电3也在PC上登场了。完整收录了PS2版各个有特色的游戏模式,PC版雷电3不但能与好友合作射击,也更忠实地将大型电玩的感觉呈现给玩家。雷电游戏是由日本TAITO株式会社开发的。雷电3的游戏效果如图1.1所示。图1.1 雷电3游戏效果图到目前为止,雷电游戏已经有了街机版、家用机和掌机版,还登录了PC平台和PS2平台等,除了官方版本之外,还出了许多同人版,因此可以说已经被在各个平台以多种形式开发和使用。目前,雷电的版本已经有了V4.0版,但这里主要还是介绍一下比较常见的雷电3。在游戏的画面方面,雷电3给人一种艳丽的感觉,无论是海洋基地、荒漠要塞、还是太空堡垒等关卡场景都更有一种立体的感觉了,各种武器攻击和爆炸的光影效果同样非常华丽炫目。音乐方面,因为雷电3的关卡不多,而且流程比较短,最主要还是以冲击分数,挑战操作极限的目的为主,因此,游戏的音乐曲目比较少,而且显得比较单调,这和场景多以太空为主的情况有些相似,音效部分同样如此。在游戏模式上,除了七大关的流程关卡外,雷电3还提供了以追求得分高为目标,可以任由玩家选择关卡的Score Attack模式;如果玩家对自己在游戏中某一局的表现相当满意,可以将自己的过关流程进行保存,以便在Replay模式中进行回放欣赏。总的说来,雷电3还是继承了前作那简单,爽快和刺激的手感,依然是射击类游戏中的佼佼者。1.3.2 3D雷电游戏 AirStrike3D II GulfDivoGames出品的一款画面非常精美的三维空中射击游戏,AirStrike 3D的姊妹篇,游戏采用强劲的3D游戏设计引擎,为玩家带来如同好莱坞特技般惊人的视觉体验,游戏共有20个关卡,超过100种不同的敌人角色,5种地形,3个强大的敌军首领,10种特性不同的直升机供你驾驶,10种强力的武器装备,每种武器都有5种威力级别,再加上昼夜和天气的变化,逼真的音效,动感激荡的音乐,为玩家带来视觉和听觉的强力冲击。游戏中的武器超过100种,如冶炼车、重型直升机、潜水艇、驱逐舰、 航空母舰、高速快艇。任务场景有水上、陆地、高山、人口密集区。支持1人或2人游戏模式。AirStrike3D II Gulf的游戏效果如图1.2所示。玩家将要在众多的地形中,驾驶着先进且武力十分强大的战斗直升机与许多的敌人周旋。本游戏的声光效果很棒,尤其在一些关卡是在黑夜进行,当击中敌机或是敌方建筑,爆炸的场景会突然亮起来,效果十分显著。而一些武器炮火的呈现也是相当精彩。画面的各种地形变化与敌人的种类众多,也是表现十分杰出。敌人方面除了有战斗机与战斗直升机之外,还有船舰与航空母舰的攻击,以及地面猛烈的炮火。在敌人的炮火交叉攻击中,玩家必须依靠灵巧的双手来避开这些攻击。游戏中一开始会有简单的任务介绍,增加与玩家的互动,也让游戏内容能更丰富。游戏中也提供了多种武器,让玩家能有更好的装备来对抗这些庞大的敌人。游戏中有困难度的选择,玩家可以选择适合自己的难度来玩,即使不是射击高手也可以愉快地玩本游戏。游戏画面的左上角有显示玩家的战机装甲值,当降到底将会损失生命值,所以玩家要利用游戏中出现的宝物来补充生命值。另外左上角也有显示玩家目前所拥有的武器,而右上角则显示目前玩家所得的分数。图1.2 AirStrike3D II Gulf游戏效果图1.4 本文主要研究内容和章节安排本次雷电小游戏开发采用Delphi 7,主要使用其图形图像编程的功能部分。开发重点是游戏射击功能模块和升级闯关及加载地图功能模块。本文的研究内容包括五章:第1章为绪论,主要阐述了雷电小游戏的开发背景、开发目的和意义以及国内外研究现状及发展趋势等。第2章为游戏开发的关键技术和开发工具,主要阐述了此次开发雷电小游戏的相关技术基础和开发所要使用的开发工具。第3章为游戏的功能模块设计和游戏内容设计,主要阐述了雷电小游戏的各个功能模块的划分、游戏的规则、游戏地图、游戏的元素以及游戏的操作方法。第4章为游戏的详细设计与具体实现,主要阐述了游戏系统的设计思路、数据结构的表达方式,以及游戏的关键功能模块的实现等。第5章为总结与展望,主要总结了本次开发工作取得的成果和存在的问题,并对下一步改进工作做了展望。2 游戏开发的关键技术和开发工具2.1 游戏开发的关键技术DirectXWindows操作系统下的GDl(Graphics Device Interface,图形设备接口)减轻了图形编程的很多工作。利用GDI编程,可以不考虑硬件的具体特性,直接调用WindowsAPI中的图形处理函数处理当前DC即可。这虽然很方便,但却是以降低处理速度为代价的。因为它不能直接访问硬件,需要通过操作系统间接访问,这就相当与转了个大弯才到达目的地,很浪费时间。这对要求速度的游戏程序来说,是远远不够的。这是看到了GDI在游戏设计中的不足,Microsoft为迎合市场需求,让游戏可以在Windows下顺畅的运行,推出了多媒体开发技术DirectX。它不但可以像Windows GDI一样方便的使用,又可以直接对硬件抽象层(HAL)进行操作,速度比GDI快得多。DirectX一经问世就受到开发商的大力支持,迅速成为游戏和多媒体开发市场上的工业标准。Directx的内容包括了DirectDraw、Direct3D、DirectSound、DirectMusic、DirectPlay、Directlnput和DirectSetup等部分,它们分别主要应用在图形程序、声音程序等方面。DirectX结构及其与win 32的关系如图2.1所示。图2.1 DirectX结构及其与Win32的关系下面分别介绍DitectX的各个部分:(1)DirectDrawDirectDraw是一种DirectXAPI。它允许用户直接地操作显存,支持硬件覆盖、内存与显存反转。DirectDraw在提供这些功能的同时并支持基于MicrosoftWindows的应用程序和设备驱动。DirectDraw作为一种软件接口,支持Windows的GDI(图像设备接口),并提供直接操作显示设备的功能。它提供了与设备无关的游戏、Windows子系统等软件开发方式。它还能够支持许多种显示硬件,包括从简单的SVGA显示器到高级硬件性能(支持图像剪切、延伸和非RGB颜色格式)。接口的设计使应用程序能够知道所使用硬件的特性,从而可以支持它们的硬件加速功能。(2)Direct3DDirect3D提供了与硬件无关的的3D视频硬件操作方式。可以在两种模式(立即模式和保留模式)中选择其中之一使用。立即模式较保留模式是一个低层的3D API,后者建构于前者之上。立即模式适合于开发高品质的多媒体应用程序,它在底层与加速硬件进行通讯。保留模式应用于对3D场景进行实时的操纵。(3)DirectSoundMicrosoft DirectSound的API是DirectX平台软件开发工具程序员指南的声音组件。DirectSound提供了硬件加速、对声音设备的直接操作。在提供这些功能的同时,它还保持了与当前设备驱动的兼容性。DirectSound是通过“硬件抽象层(HAI)”来操作声音硬件的,这是一个由声音设备驱动来实现的接口。HAL提供了以下功能:要求和释放对声音硬件的控制;描述声音硬件的特性;在硬件允许的条件下实现特定的操作;在硬件不允许的时候报告操作失败。DirectSound能够自动地利用硬件加速,包括硬件混音和硬件声音缓冲。应用程序无须查询硬件和程序特性,而可以在运行期部分查询DirectSound来获得对声音设备特性的充分描述,然后根据各个特性的存在或缺少来使用不同的方法进行优化。还可以指定接受硬件加速的声音缓冲区。(4)DirectInputDirectInput用以支持包括鼠标、键盘和游戏杆等在内的输入设备,甚至还有力度反馈的高级输入/输出设备。DirectInput对象由输入设备提供数据。每一个相应设备都有所谓“对象实例”,即个别的控件,如按键、按钮和游戏杆的轴向等。键盘上的每一个按键都可以作为键盘对象的一个对象实例。即使程序在后台运行,DirectOnput也能够对输入设备做出响应。(5)DirectPlayDirectPlay的主要作用在于使应用程序间通讯方式得以简单化。DirectPlay的技术不仅提供了一个方案,实现了通讯与传送协议及在线服务的无关性,而且还实现了与传输服务器和游戏服务器的无关性。万一所基于的网络不支持某一方式,DirectPlay包含了必要的代码来仿效它。DirectPlay的service provider结构使应用程序与网络隔绝开来。应用程序通过查询DirectPlay来获得所基于网络功能特性(例如延迟、带宽等),从而相应地调整通讯方式。使用DirectPlay的第一步是选择使用哪一种service provider,它决定了将用于通讯的网络或协议。协议可以是遍布Internet的TCP/IP、局域网中的IPX或两台计算机间的连接电缆。DirectPlay提供了两种很有用的连接管理方式:IDirectPlay3:EnumConnections列举了应用程序可以获得的所有连接;IDirectPlay3:InitializeConnection初始化一种特定的连接。(6)DirectSetupDirectSetup控制DirectX自动安装,只有正确安装了DirectX后,它才能正常使用。2.2 游戏的开发工具2.2.1 Delphi 简介Delphi,是Windows平台下著名的快速应用程序开发工具(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“BorlandTurbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为Anders Hejlsberg。经过数年的发展,此产品也转移至Embarcadero公司旗下。从产品名称上就可以知道,Turbo Pascal使用的是Pascal语言。 从Turbo Pascal 5.5版开始,Borland公司在传统Pascal的基础上加入了面向对象的功能。Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面(Graphical User Interface,简称GUI)为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。Delphi所编译的可运行档,虽然容量较大,但效能上却比较快。除了使用数据库的程序之外,不需安装即可运行,在使用上相当方便。Delphi在本质上应该归类为软件开发工具,而非程序语言,但由于Delphi几乎是目前市场上唯一使用 Pascal,并持续推出新版本的商业产品。因此,有时人们会把Delphi视为Object Pascal的代名词。Borland公司因而把Object Pascal改称为Delphi。2006年,Borland把开发工具产品线独立出来,成立了一家新的公司CodeGear,并把产品线交由此公司负责。原本的Delphi,亦曾一度因此被命名为Turbo Delphi。但是在新的版本中,除了Delphi for Win32(原有的Delphi版本)之外,还有一个新产品“Delphi for PHP”。在CodeGear的发展规划中,或许“Delphi”不再是Object Pascal的专属IDE名称,而是将之提升到通用IDE品牌的层次。2008年5月7日,Embarcadero Technologies(易博龙)公司宣布以2300万美元的价格收购CodeGear公司,从而把Delphi收入囊中。2009年5月6 日,Micro Focus宣布以7500万美元收购Borland。Delphi目前的最新版本是2010。2.2.2 Delphi 7 的特性(1)Code Complete(代码完成)Code Complete功能在Delphi 5中就已经加入了,这项功能非常受程序员的欢迎,因为Code Complete可以大幅度地减少程序员需要键入的程序代码,并且减少键入错误。Delphi 7的Code Complete功能在原有的基础上继续改善,新的Code Complete窗口不但可以由程序员自行调整大小,而且可以使用不同的颜色代表不同的对象,例如变量、方法和特性等。Delphi 7的Code Complete窗口加入了色彩分析,以及对对象分门别类的能力。此外,新的Code Complete窗口也会更聪明地过滤对象能够使用的PME,避免了以往Delphi 5的Code Complete窗口无法显示一些PME的困窘。另外,程序员在新的Code Complete窗口中选择使用某个方法之后,Code Complete会自动地在方法名称之后加上“();”字符,把光标停在圆括号之中,并且自动显示这个方法需要的所有参数,Delphi的确比以前更聪明更方便了。(2)Object TreeView(对象树视图)另外一个新功能就是Delphi 7的Object TreeView窗口。这个新的窗口除了可以显示窗体中所有的对象之外,也可以以分层方式表达组件之间的关系。当程序员在Object TreeView窗口中单击了一个组件之后,这个组件会立刻出现在对象查看器之中,这时程序员可以改变这个对象的特性值和事件处理程序。当窗体复杂,拥有大量的组件时,Object TreeView窗口可以让用户迅速找到这个组件,并且知道与当前组件相关的组件,非常方便。此外Delphi 7的编辑器也强化了Class Complete的功能,让程序员在定义类别程序代码时拥有更大的弹性,并且加强了Interface Complete的功能,让程序员在撰写接口程序代码时也能够享有Code Complete功能。(3)可定制的View窗口Delphi 7最强劲的集成开发环境功能应该要算是新的可定制的View窗口了。在Delphi 7中,编辑器不但可以让程序员观看和编辑Object Pascal的程序代码,而且如果程序员编辑的是Web应用程序,那么还可以直接在编辑器中查看HTML程序代码、脚本语言程序代码,预览Web应用程序执行结果的画面以及Web应用程序产生的HTML程序代码。3 游戏的功能模块设计和游戏内容设计3.1 游戏的功能模块设计(1)游戏射击功能模块玩家发射子弹:玩家发射的子弹分为常规武器和大威力武器,其中常规武器的伤害度可以随着杀敌数的增加而增加,大威力武器有数量限制。敌机发射子弹的功能:敌人发射的子弹威力和种类固定,超出屏幕范围的敌机失去作用;玩家控制的飞机和敌机均具有一定的生命值,生命值为0时视为被击落,玩家控制的飞机生命数有限,敌机的数量固定。玩家一方的飞机以及敌方飞机被击中时均产生爆炸效果。(2)升级闯关和地图加载功能模块当玩家完成某一级别的关卡时,自动升入下一级,加载下一级的地图,同时敌机的威胁度增加;当玩家完成某一级别的关卡时,系统自动保存或者玩家可以手动保存当前游戏进度,下次当玩家再次玩游戏时可以从该保存点继续展开游戏。玩家可以手动载入地图并设定地图的级别。(3)游戏设置功能模块显示设置:设定游戏窗口的大小,分辨率等。声音设置:设定游戏的背景音乐、音效以及音量设置等。控制设置:设定键盘的控制键或者手柄的控制键等。难度设置:设定难度系数,由玩家选择。(4)帮助信息功能模块提供游戏玩法的介绍以及开发者等的信息,让玩家更好的了解这款游戏。3.2 游戏内容设计3.2.1 游戏规则雷电小游戏的游戏规则非常简单,此次开发的雷电小游戏一共有三个关卡,在每一关卡中要击落一定数量的敌机,同时要确保玩家控制的飞机剩余生命数要大于0,即玩家处于活动状态,若完成某一关卡任务后玩家仍然处于活动状态则升级进入下一关。当玩家完成全部3个关卡的任务后显示Congratulations,即游戏成功,并显示玩家的游戏得分;当玩家1未完成全部的3个关卡但剩余生命数为0时,显示Game Over,即游戏结束,并显示玩家的游戏得分。3.2.2 游戏地图和游戏元素(1)游戏地图游戏地图如图3.1、图3.2、图3.3所示:图3.1 第1关的地图图3.2 第2关的地图图3.3 第3关的地图(2)游戏元素玩家控制的飞机玩家控制的飞机如图3.4所示,玩家控制的飞机有5条生命,每条生命的生命值为100,当一条生命的生命值减为0时失去该条生命。玩家控制的飞机可以发射常规武器(一般子弹)和大威力武器(炸弹),常规武器无数量限制,大威力武器有数量限制,每条生命限制可以使用3次大威力武器。图3.4 玩家控制的飞机玩家发射的常规武器(一般子弹)玩家发射的常规武器为亮黄色的五角星形状,在运行过程中会伴随图形的滚动。常规武器的发射无数量限制,常规武器的威力值为20,即每次击中敌机会给敌机带来20点生命值的伤害。玩家发射的大威力武器(炸弹)玩家发射的大威力武器为分别向上、下、左、右四个方向呈发散射线状飞行的四个褐色五角星图形,运行到设定的距离后发生爆炸,造成所有在屏幕范围内的敌机和敌机发射的子弹爆炸。大威力武器有数量限制,即每条生命只能使用3次大威力武器。大威力武器的威力值为无限,即每次使用会摧毁当前所有处于活动状态的敌机。小型敌机小型敌机如图3.5所示,机身较小,从屏幕上方出现,然后自上向下移动,移动过程中发射子弹,运行到屏幕的最下端后消失。飞机队列编排方式分3种:一排五架、前排三架后排两架、前排两架后排三架。小型敌机的生命值为20。图3.5 小型敌机中型敌机中型敌机如图3.6所示,机身适中,从屏幕上方出现,然后自上向下移动,移动过程中发射子弹,运行到屏幕的最下端后消失。飞机队列编排方式分3种:一排五架、前排三架后排两架、前排两架后排三架。中型敌机的生命值为40。图3.6 中型敌机大型敌机大型敌机如图3.7所示,机身较大,从屏幕上方出现,然后自上向下移动,移动过程中发射子弹,运行到屏幕的最下端后消失。飞机队列编排方式分3种:一排五架、前排三架后排两架、前排两架后排三架。大型敌机的生命值为60。图3.7 大型敌机敌机发射的子弹敌机发射的子弹为亮黄色的圆形小点。敌机子弹的发射无数量限制,威力值为20,即每次击中玩家控制的飞机会给玩家控制的飞机带来20点生命值的伤害。3.2.3 游戏的操作方法(1)运行程序,依次选择“文件”、“开始”进行游戏;(2)可以选择“任务”,选择某一关卡直接开始游戏;(3)可以选择“任务”,然后选择加载地图,再按“开始” 进行游戏;(4)飞机移动为上下左右四个方向键,按CTRL键射击,按空格键释放大威力(炸弹);(5)可以按“声音”,选择“音效开”或者“音效关”;(6)可以按“帮助”,查看使用说明和开发者信息。4 游戏的详细设计与具体实现4.1 游戏的详细设计整个雷电小游戏可以分为两个部分,地图部分和角色部分,在合适的数据结构的基础上,两者同时运行,方能达到游戏的效果。4.1.1 地图部分地图部分包括地图编辑器和已经编辑好的地图(以.map后缀名存储)。地图编辑器是一个独立运行的程序,用户可以在一张基本的背景图案上使用素材图提供的基本素材编辑地图,编辑完成后可以保存生成一张地图,素材图可由用户选择导入。编辑好的地图保存在专门的文件夹里,用户进行游戏时从该文件夹导入相应的地图。4.1.2 角色部分游戏中玩家控制的飞机、各种敌机、玩家控制的飞机发射的常规武器和大威力武器以及敌机发射的子弹等都是作为角色来管理的。所以说本质上他们都是具有不同属性的一些角色而已。该部分的主要功能包括角色的创建、角色的激活、角色的出现、角色的移动以及角色的碰撞等。4.1.3 数据结构的表达(1)地图地图的数据结构是一个Byte类型的二维数组Bigmap,数组的单个元素值代表了该区域的图形在素材图中的编号(0255)。编辑地图实际上是将选中的素材图形的编号写入到Bigmap数组的操作,而游戏运行时装载地图实际上是根据Bigmap中该区域的元素值找到素材图上对应编号的图形并将其画在背景图案上的操作。(2)角色角色的基本数据结构是一种Record(记录)类型,具体结构如下:type TRole = record /角色管理的记录类型 0表示不在使用,其他状态表示各种运行状态 Used: Byte; /角色的状态 Sban: Byte; /角色的图样的编号 Xpos: Integer; /角色的X坐标 Ypos: Integer; /角色的Y坐标 Smov: ShortInt; /角色移动的步长 HP: Integer; /角色的生命值 Score: Integer; /角色的分值 end;各个角色是存储在一个TRole类型的一维数组Role中的,该数组划分成了很多片断用来分别存储各种类型的角色,其中01中是供玩家使用的,26是供敌机使用的,718是供玩家1发射的子弹使用的,1930是供玩家2发射的子弹使用的,3142是供敌机发射的子弹使用的,4346是供玩家1释放的大威力武器(炸弹)使用的。对任一角色来说,当其Used属性为非零值时,表示其正在使用中,否则,表示该角色处于空闲状态。因此,可以实现角色的重复利用,节省了存储空间。(3)角色的图形各个角色对应的图形的文件路径是存储在一个TBitmap类型的一维数组Role_Bmap中的,而角色对应的图形文件是存储在一个专门的文件夹pic中的,这样就建立了数组的下标和具体角色图形之间的索引关系。Role_Bmap数组也是分成多个片断来使用的,其中01是玩家的飞机对应的图形,24是敌机对应的图形,5是敌机发射的子弹对应的图形,613是小型爆炸效果对应的图形,1421是大型爆炸效果对应的图形。(4)各个关卡敌机队列出现的批次数量各个关卡中敌机队列出现的批次数量定义在一个Byte类型的一维数组EnemyQueueCount中,每一关卡中敌机队列出现的批次数量用来判断是否要继续生成敌机以及玩家时候已经完成该关卡的全部任务。(5)各个关卡敌机队列出现的序列各个关卡中敌机队列依次出现的序列定义在一个Byte类型的二维数组EnemeyQueue中,数组的元素值是各种敌机对应的图形在数组Role_Bmap中的编号,从而实现敌机按照预先制定好的序列依次出现的效果。4.2 游戏的具体实现4.2.1 图像的滚动(1)各种滚动图像的滚动有各种形式,无法一概而论。比如,小星星落下、立体物体的流动、道路从后方消逝等等在程序设计上都是滚动处理的一环。在连续移动的背景中,反复操作“画面OUT-画面IN”的情形统称为滚动。而基本型为将连续的图案画面移动的“平面滚动”。基本型主要分为以下几种:4个方向(以上)任意滚动封闭型图像 只在四边形的图像内滚动。程序设计成图像的边界处背景滚动停止,并且只有人物(主角)的位置能够移动。4个方向(以上)任意滚动连接型图像将四边形图像向上下左右无止境的连续滚动。这种滚动方式出项在战场型RPG上。2个方向任意滚动封闭型图像只向上下或者只向左右滚动。有的也可以朝基本方向以外的方向滚动,但其范围有限制。这种滚动方式与卷起来的物体最接近,而滚动操作如超出图像的范围便告停止。1个方向强制滚动封闭/连接型图像本类滚动主要适用于射击类游戏,图像本身为封闭型,但多与下一个场景(别的图像)连接。(2)滚动的条件滚动方向设为上下左右等4个方向;方向的改变以每16点(图案大小)为单位;图像大小为256256图案;滚动的单位为2点(一般为2的整数倍)。(3)滚动算法初始设置将绘制用的点阵图(Make_Bmap)的大小设定成比显示画面纵横多2个图案;将初始显示用的图案(先设置在画面中央)制作成绘制用的点阵图;初始数据MapX:109.MapX坐标(暂定)MapY:114.MapY坐标(暂定)DX:16.位移的X坐标的点数DY: 16.位移的Y坐标的点数Dir:0.滚动方向(04 = 停止、上、下、左、右)NextD:0.下次的滚动方向滚动处理增加或减少各个方向的偏移值(DX 或 DY);将绘制用的点阵图(Make_Bmap)由左上角开始移动位移值所示的距离,并显示在表格上(CopyRect);位移值(DX或DY)= 130时,程序即告结束;位移值(DX或DY)=0 或 31时,即欲复制至表格的图案位于绘制用点阵图的边界时,需移动图案(CopyRect),以使位移坐标能到16(Make_Bmap的中央);在移动后所留下的空间上绘制新的图案;将NextD(新的移动方向)代入Dir,并将位移值设为中央(16,16)。(4)图像滚动在该游戏中的运用本游戏中背景图像的滚动方式是向上滚动,即1个方向的强制滚动连接型图像的类型,整个图像的形状是一个矩形,适用上述滚动算法,主要代码如下所示: /将背景分割并绘制在指定的点阵图上 Make_Bmap.Canvas.CopyMode := cmSrcCopy; if Spoint = 16 then begin Rect_S := Rect(0, Spoint, GmenX, GmenY + Spoint); Rect_D := Rect(0, 16, GmenX, GmenY + 16); Make_Bmap.Canvas.CopyRect(Rect_D, Back_Bmap.Canvas, Rect_S); end else begin Rect_S := Rect(0, Spoint, GmenX, GmenY + 16); Rect_D := Rect(0, 16, GmenX, GmenY + 32 - Spoint); Make_Bmap.Canvas.CopyRect(Rect_D, Back_Bmap.Canvas, Rect_S); Rect_S := Rect(0, 0, GmenX, Spoint - 16); Rect_D := Rect(0, GmenY + 32 - Spoint, GmenX, GmenY + 16); Make_Bmap.Canvas.CopyRect(Rect_D, Back_Bmap.Canvas, Rect_S); end; /卷动16点後新绘制1列横向点阵图 Spoint := Spoint - Mdot; Ypoint := Ypoint - Mdot; if Spoint 0 then Spoint := GmenY + 16 - Mdot; if Ypoint 0 then Ypoint := GmenY + 16 - Mdot; if (Spoint and 15) = 0 then begin for X := 0 to (Horizontal - 1) do begin PtFull := 256; PatDi(BigmapX, Mpoint, X * 16, Ypoint, Back_Bmap); ptFull := 16; end; Mpoint := Mpoint + 1; if Mpoint = MaxMap then Mpoint := 0; end;4.2.2 角色的处理(1)游戏中的各种角色的处理游戏软件中经常会出现很多的角色,这些角色都各有各的特性与功能,但所有成员的行动并不是一直都受到掌控的,例如:射击游戏中陆续来袭的敌机在出现于画面之前是不存在的。角色的坐标是可以位于画面外侧的,因此理论上来说,这些敌机的角色在出现于画面之前是可以行动的。但若是这样做的话,电脑会因为需要持续见识成千上万的敌机、敌人炮弹而影响CPU 的处理速度,更会消耗大量的存储器空间。因此,现实中是不可能这样做的。所以就产生了一种变通的办法,那就是在角色出现在画面之前,先将角色登录起来,当角色移动至画面之外时再将此登陆去除。当然在设计游戏时会预想登录角色再回到画面的情况而预留一些空间,但已经被去除的敌军角色不再登录,就不会再度出现在画面上。这种角色登录去除的方法掌握了角色大量出现的关键。这是因为角色出现在画面时,一旦将工作区(管理角色行动的数组)存储起来后,就好比将存储器用完即抛弃一样。这样,电脑不会因为在何时存储器空间不足而崩溃。(2)角色处理在该游戏中的运用本游戏使用了一个TRole类型的一维数组Role来管理各个角色,该数组划分成了很多片断,其中01中是供玩家使用的,26是供敌机使用的,718是供玩家1发射的子弹使用的,1930是供玩家2发射的子弹使用的,3142是供敌机发射的子弹使用的,4346是供玩家1释放的大威力武器(炸弹)使用的。每次需要使用某个角色时只需将其Used属性值设置为相应的行动编号,该角色在程序执行时便会按照行动编号执行相应的动作。当角色消失时只需将其Used属性设置为0即可,从而实现了使用较少的存储空间产生大量的角色的效果。角色处理的在本游戏中的主要实现代码如下所示:1: /降落中 begin Rolei.Ypos := Rolei.Ypos + Rolei.Smov; if Random(500) = Form1.Height ) then begin Rolei.Used := 0; end; end;4.2.3 碰撞检测的认定(1)碰撞检测的主要算法“碰撞”是指两个以上物体接触,然后碰撞。在现实世界中,接触与碰撞并不相同,在游戏世界中,这两者也是有区别的。进行碰撞检测的算法主要包括以下两种:矩形和矩形进行碰撞检测算法一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。我们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1;矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2。在检测时,数学上可以处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。下面是数学表达式:x方向:| (x1 + w1 / 2) (x2 + w2/2) | |(w1 + w2) / 2|y方向:| (y1 + h1 / 2) (y2 + h2/2) | |(h1 + h2) / 2|但是矩形碰撞只是一种比较粗糙的碰撞检测算法,因为很多实际的物体可能不是一个规则的矩形。圆形和圆形的碰撞检测算法圆形和圆形的碰撞应该说是一种最简单的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2。因为MIDP1.0中没有浮点数,而且浮点数的运算比较慢,所以我们将条件做一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。下面是数学表达式:(x1 x2)2 + (y1 y2)2 (r1 + r2)2(2)碰撞检测在该游戏中的运用本游戏中的各个角色对应的图形多为矩形,因此主要采用上述的两种碰撞检测算法中的第一种,即矩形和矩形的碰撞检测算法。为了更好地实现良好的碰撞效果,设置了碰撞缓冲区,通常位于参与碰撞的两个角色中面积较大者上,形状为角色图形外周围的一个方框。假设参与碰撞的两个角色中面积较大者为A,面积较小者为B,碰撞缓冲区长度为h,则满足下面的条件时认为是发生了碰撞:-(A的边长 h)= A的坐标- B的坐标 = - (Role_BmapRolei.Sban.Width - HitBuffer) ) and ( X = - (Role_BmapRolei.Sban.Height - HitBuffer) ) and (Y 0) then begin Rolej.Used := 255; Rolej.Sban := 5; Rolei.HP := Rolei.HP - Rolej.HP; if(Rolei.HP = 0) then begin Rolei.Sban := 13; Rolei.Used := 255; end; end; end; end;4.2.4 爆炸效果的处理(1)实现爆炸效果的主要方法爆炸具有不规则的几何外形和内在的不确定性,它不同于静态景物,具有产生、发展和消灭的历程。对此,计算机图形学采用粒子系统来描述。粒子系统根据粒子的产生、变化和消灭来描述导弹爆炸碎片的不规则变化,用粒子系统来表现能够达到很好的逼真效果。粒子系统的基本原理是用赋于某种属性的微小粒子的随机过程来描述动态景物的特征。粒了系统方法是由Reevs VT于1983年首次提出的,现已广泛应用于模糊景物的模拟,如火焰,瀑布,雪花等。粒子系统方法的基本思想是用许多形状简单且斌于生命的微小粒子作为基本无素,把物体定义为许多不规则、随机分布的粒子,而每个粒子均有一定的生命期。随着时间的推移,旧的粒子不断消失,新的粒子不断加入,同时,与粒子有关的每个参数均受列一个随机过程的控制,以规定粒子在系统中的形状特征和运动。利用粒子系统方法描述事物,首先对所在描述的对象特性进行分析,包括对象的静态属性和动态属性;其次要对粒子系统进行绘制。具体步骤:在系统中产生新粒子,赋于每个粒子一定的静态属性,删除在系统中已存在但超过其生命期的粒子;根据剩余粒子的动态属性进行移动和变换;显示具有生命的粒子所组成的图形(2) 爆炸效果在该游戏中的运用爆炸场景是“射击游戏的生命”,因此良好的爆炸效果也是决定该游戏能否成功的关键。本游戏制作爆炸效果是用一种比较初级的方法,其原理与早期的制作动画片相似,即在很短的时间内画出几张连续的图像。在小爆炸效果中将小爆炸对应的8张连续的图片执行一遍,在大爆炸效果中将大爆炸对应的8张连续的图片执行一遍,从而实现爆炸的动画效果。爆炸效果如图4.1所示:图4.1 爆炸效果图4.2.5 键盘控制的实现在本游戏中键盘控制游戏是通过将WM_KEYDOWN消息赋值给tagMSG类型的变量实现的。在Win32 SDK中消息本身是作为一个结构体记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。这个记录类型叫做MSG,它在window中是这样声明的:typedef struct tagMSG / msgHWND hwnd; /窗口句柄
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 双方协议离婚合同范本:幽默诙谐的家庭关系终结书
- 离婚诉讼财产清算、分割及子女抚养权协议示范
- 2025合同能源托管模式
- 国际竹藤草产业投资分析-洞察及研究
- 煤炭批发市场潜力分析-洞察及研究
- 2025-2030复合调味料产品感官评价体系标准化建设指南
- 2025-2030固态电池管理芯片行业技术演进与商业模式创新研究
- 2025-2030固态电池电解质材料研发进展与量产工艺优化路径分析报告
- 2025-2030固态电池核心材料供应链安全评估及替代方案研究
- 2025-2030固态电池技术突破方向及产业链投资价值研究报告
- 浙江省宁波市鄞州区曙光中学2024-2025学年九年级上学期10月月考科学试卷(1-3章)
- 2026年全年日历表带农历(A4可编辑可直接打印)预留备注位置
- 载人航天术语
- 2024年高考英语训练动词(谓语、非谓语)单句语法填空50题
- 旅游项目可行性分析报告
- 招商代理及商业运营服务 投标方案(技术方案)
- 中心静脉深静脉导管维护操作评分标准
- 舞蹈鉴赏芭蕾舞剧吉赛尔
- 眼部麻醉的注意事项及护理
- 导尿术操作护理课件
- 脊柱侧弯的中医治疗研究
评论
0/150
提交评论