前言-IV-摘要本设计是一款2D射击类游戏,它是通过DirectX进行实现的。除此之外本设计还有一个地图编辑器,它是通过Win32SDK开发的并负责编辑游戏地图的工具。本设计主要由两部分组成,第一部分:游戏逻辑;第二部分:地图编辑器。游戏逻辑主要包括:处理玩家的输入;玩家飞机的运动动画;玩家的火力系统;敌机的路点系统;敌机的火力系统;地图系统;碰撞检测系统。其中玩家飞机的火力系统和敌机的路点系统是最复杂和最难做的部分,但同时这两部分所产生的效果也是最丰富和最具趣味兴的。其中敌机的路点系统是与地图编辑器部分紧密联系在一起的,即敌机的路点等参数设置是由地图编辑器完成的。地图编辑器是专为本设计制做的一款工具,它可以进行游戏中各种参数的设置,除了路点的设置外还包括地图编辑,敌机生命值、火力、速度等参数的设置。关键词:DirectX地图编辑器2D射击类游戏ABSTRACTThisdesignisa2Dshootinggame,itisimplementedbytheDirectX.Inaddition,thisgamehaveamapeditorwhichisdevelopedbytheWin32SDKandisresponsibleforeditingthegamemap.Thisdesignmainlyiscomposedbytwoparts,Firstpart:Gamelogic;Secondpart:Mapeditor.Gamelogicmainlyincludes:Processingplayer’sinput;Themovementanimationoftheplayer’sairplane;Player'sfirepowersystem;Theroad-spotsystemoftheenemyairplanes;Firepowersystemofenemyairplanes;Mapsystem;Examiningcollisionsystem.Theplayer’sfirepowersystemandtheroad-spotsystemoftheenemyplanesarethemostcomplexandmostdifficulttodo,butsimultaneouslythesetwopartproducetheeffectalsoisrichestandmostinteresting.Theroadspotsystemoftheenemyairplanesismostrelatedwiththemapeditor,videlicettheroad-spotparameterandothersmustbesettingbythemapeditor.Themapeditorisatoolwhichisspeciallydesignedforthisgame,itcansetseveralparametersofthegame.Besidestheroad-spotthemapeditor’ssettingincludeseditingmap,live-valueoftheenemyplanes,firepower,speedandotherparameters.KeyWords:DirectXMapeditor2Dshootinggame目录前言当我们还是儿童时,飞机格、捉迷藏等是我们常玩的游戏;年纪大些后又出现了俄罗斯方块掌机、任天堂红白机、街机;直到最近几年出现的异常火爆的电脑游戏。这一切说明了人类从来就没有停止过对游戏的追逐,但大多数人在电子游戏面前扮演的都是玩家的角色,只有极少数人才能去制做游戏,因此这部分人往往给人一种非常神秘和高不可攀的感觉。然而世界总是在向前进步的,当大部分电子游戏被转移到PC(Personal前言-IV-Computer,个人电脑)平台后,普通人去制作游戏便成为了可能,由于PC机是为普通人设计的电脑,所以只要肯努力,在它上面你可以做任何你想做的事情,包括制做游戏,有些人学习编程的动机就是要制作自己的游戏,因此也产生了一些天才的游戏程序员。计算机游戏主要是指视频游戏,它又有2D与3D之分,而大型3D游戏又是极其复杂的软件,目前市场上的一些比较流行的3D游戏都是由几十人的大团队进行制做的,只依靠一个人的能力就去进军游戏市场的时代已经一去不复返了。但是很多学习编程的人,总是以编写游戏做为自己的第一个程序,或者以编写游戏而去展示自己的水平。其实在一个游戏中你可以融合进很多元素。比如,如果你擅长美术,你可以将你的游戏画面设计的更华丽;如果你富于想象,你可以使游戏的情节更曲折,以增加可玩性;如果你擅长音乐,你可以为你的游戏制作一些更优美的MIDI音乐。当然这一切都要有比较好的计算机技术做为基础才能实现,因此,对于一个学习计算机的学生,制作一款游戏,融合一些其它的元素,这样的作品是非常有意义的,也是非常值得记念的。黑龙江省八一农垦大学毕业设计(论文)—1—1绪论1.1课题背景说起计算机游戏,我们可追溯到第一台大型计算机在20世纪60年代问世的时候,那时的大型计算机上就已经开始有了计算机游戏的身影。而当70年代飞逝而去的时候,全世界的大型和小型计算机上已有了为数不少的冒险类游戏,它们大多数基于文字和对话。在之后的半个世纪里,计算机产业得到了前所未有的迅猛发展,而计算机游戏也进行了多次地改头换面,发展到了如今的3D游戏、网络游戏。我国的游戏产业发展相对比较晚,但从无到有、从起步到蓬勃发展的短短五年,游戏产业市场总体收入已从2001年的不到3亿元跃居为现在的40多亿元,占互联网收入总额的三成多,在网络游戏、搜索、即时通讯、网络广告、电子商务平台、电子邮件等六大应用中居首位。另据赛迪网调查报告称,未来5年中国网络游戏市场将保持41%的年均复合增长率,预计2010年市场销售额将达到227亿元。1.2DirectX简述早期的Windows系统并不适合游戏开发,反而微软初期的DOS平台更受游戏开发人员的喜爱。之后随着微软对于游戏市场的重视,便有了DirectX的问世,它的最初几个版本设计的不是很好,直到DirectX5.0之后,游戏程序员们才渐渐地接受了它。DirectX实际上是一种抽象出视频、音频、输入、网络以及安装等内容的软件系统,它是微软与众多硬件厂商相互合作的产物,在其中微软提出了一套协义—内容包括函数、变量、数据结构等等,硬件商必须遵守这套协义才能开发出与硬件通信的驱动程序。只要这套协义被遵守,用户就不用关心硬件上的细节问题,只要你向DirectX发出命令,它就会帮你处理所有细节问题,无论是视频卡、音频卡、输入设备、网卡还是其它硬件,只要是支持DirectX的硬件,就可以被你的程序所利用。DirectX是用COM技术实现的(关于COM的知识可参考其它资料),它包括很多组件,而我的游戏中只是简单地使用了其中的几个部分:DirectDraw、DirectSound、DirectInput。DirectDraw是控制视频显示的2D位图引擎。所有图形绘制都必须通过它,因此它也是所有DirectX组件中最重要的一个。DirectDraw对象代表系统中的视频卡。DirectSound是DirectX里的声音组件,而DirectInput组件用于处理输入设备。本设计主要还是针对DirectDraw的应用。另外注意要尽量使用DriectX中的功能,因为它们一般都能利用硬件加速,即当前的硬件实现了此功能,它就不用自己去用软件实现了。1.3游戏循环结构黑龙江省八一农垦大学毕业设计(论文)—2—上图表示的是本设计的主要工作流程,并且大部分的视频游戏也都与此流程相似。第一步是游戏的视始化操作,如内存分配、资源加载等等;第二步程序运行到了游戏的主循环体内部。此时各种操作开始运行,运行持续到用户退出主循环为止;第三步玩家的输入信息被处理,以备下一步的游戏逻辑使用;第四步执行游戏的主要逻辑,这一部分的代码是游戏的主体部分,比如执行碰撞检测、物理系统等等,其结果用于渲染下一帧图像。第五步玩家的输入和游戏逻辑的执行结果,被用来产生下一帧动画图像,这个图像通常存放在不可见的缓冲区中,所以玩家通常不会看到它逐渐被渲染的过程。随后该图像被迅速拷贝到显示存储器中并显示出来。第六步由于机器的不同所以运算速度就会有快有慢,因此每次渲染时所用的时间也不会相同,这样就产生了帧画面的同步问题。这里是用延迟时间的方法进行解决的,一般能达到30帧/秒;第七步循环;第八步退出并释放游戏所用资源。以上是本设计的循环结构流程图,为了便于更好的理解游戏循环,下面给出了它的状态转换图:退出?初始化分配内存载入文件主事件循环调用Windows函数初始化计时器获取玩家输入主要逻辑碰撞检测物理将下一帧渲染到离屏缓冲中将离屏缓冲中图像拷贝到显示器时间同步锁定在30FPS清理重分配关闭文件退出到操作系统处理窗口消息图1游戏循环结构流图黑龙江省八一农垦大学毕业设计(论文)—3—1.4小结本章简单地介绍了有关游戏领域的背景知识,随后又对DirectX进行了相关的说明,最后用图形的方式描述了本设计游戏循环的主体结构。从下一章开始就进入了本设计的总体设计和详细实现部分。2游戏总体设计本章是游戏开发的总体设计部分,主要内容有游戏的基本类图、离屏表面、t3dlib游戏引擎的BOB部分、还有位图基本知识的介绍。2.1游戏问题域类图游戏初始化游戏菜单开始游戏运行游戏重新开始游戏退出游戏图2游戏循环结构状态图黑龙江省八一农垦大学毕业设计(论文)—4—+开火()+爆炸()+吃食物()-生命值玩家飞机+开火()+爆炸()-生命值-速度敌机+追加()+遍历()-敌机链表敌机容器+追加()+遍历()-食物链表食物管理器+追加()+遍历()-炮火链表敌机炮火容器+追加()+遍历()-炮火链表玩家炮火容器+追加()+遍历()-路点链表路点容器+滚动()+加载()-范围-地图矩阵地图管理1*1111+计数()-向量-模长-是否开火路点1*+爆炸()-杀伤力-速度-运动角度炮火+计时()-类型-存活时间食物1*+搜索目标()+跟踪()+爆炸()-杀伤力导弹111*1*1*以上是本设计总体设计中的问题域类图,它描述了本设计各元素之间的相互关系,下面我按照从上到下,从左到右的顺序对其一一加以说明。首先要介绍的是敌机容器,它是所有敌机的栖身之所,它做为容器包含一个敌机链表,还有对此链表进行追加和遍历的操作。下面的敌机是敌机容器管理的对象,它做为一类飞机包含生命值、速度等基本属性和开火、爆炸等基本方法,除此之外,它还拥有一个容器,叫路点容器。所有容器功能都很相似,所以就不在过多介绍。接着我要介绍的是路点,路点可以想象成屏幕上的一个一个的点,它代表的是敌机运动的轨迹(后面会有对路点的详细讨论)。做为飞机,不论是敌机还是玩家飞机,它们都有炮火系统,所以就都有管理炮火的容器,为了便于实现,它们的炮火我设计成了一个类,杀伤力、速度、运动角度是它们的共有属性,爆炸是它们的共有方法。有的敌机爆炸死亡后会有食物产生,做为玩家可以吃掉该食物,所以玩家飞机要有吃食物的动作。另外玩家飞机除了拥有普通炮火之外,还拥有跟踪式图3游戏类图黑龙江省八一农垦大学毕业设计(论文)—5—导弹,它的杀伤力较大,而且有自动搜索目标的能力,根据目标它可以调整自己的角度进行跟踪,当撞到目标时便会爆炸,因此它还要有爆炸动作。刚才提到食物,那么相应的就应该有对它进行管理的容器。食物也有几种类型,它们代表不同的火力,同时它还有存活时间的属性,即如果玩家飞机长时间不吃掉该食物后,它就会自动死亡。最后还有管理地图的管理器,它可以加载地图文件(该文件可由地图编辑器进行生成)并对其进行滚动。这个问题域类图从整体上对这个游戏进行了比较细致的说明,但要完成游戏还有很多琐碎的知识需要了解,下面就从离屏表面开始一一地介绍它们。2.2离屏表面离屏表面的介绍要从计算机显示图像的过程开始说起。当某个程序(或者操作系统)决定要将什么东西显示到显示器上时,它就会将相应的带有颜