资源描述:
《基于OpenGL的飞行射击游戏开发与设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
毕业设计(论文)基于OpenGL的飞行射击游戏开发与设计学院:计算机科学技术学院专业:软件工程姓名:XXX学号:XXX指导老师:职称:讲师中国·XXX二○一○年五月 XXXXXX理工大学XXX理工大学XXXXXX学院毕业设计XXX学院毕业设计诚信承诺书本人郑重承诺:本人郑重承诺:我所呈交的毕业设计《基于OpenGL的飞行射击游戏本人郑重承诺:开发与设计》是在指导教师的指导下,独立开展研究取得的成果,文中引用他人的观点和材料,均在文后按顺序列出其参考文献,论文使用的数据真实可靠。承诺人签名:日期:年月日 XXX理工大学XXX学院2010届本科生毕业论文基于OpenGL的飞行射击游戏开发与设计摘要国内的三维游戏开发技术正处于赶超国外的关键时期,以大型的游戏作为主流。但是,小游戏的制作,还是不断在扩展。大部分的电脑用户,都是闲暇时进行游戏,所以一个有乐趣的小游戏已经足够满足他们的需求。本游戏的开发目的,就是为了满足这部分的用户。大型游戏一个很重要吸引用户的地方,是能给用户拥有自己创造的人物模型,趋于这个目的,本游戏提供了一个能给用户制作人物模型的编辑器,大大吸引了用户。游戏和模型编辑器的模型运用的是自定义的数据结构,所以游戏能绘制编辑器编辑出来的模型。本游戏是基于OpenGL库的运用,结合面向对象方法开发的。OpenGL定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL的英文全称是“OpenGraphicsLibrary”,顾名思义,OpenGL便是“开放的图形程序接口”。OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。通过利用OpenGL的三维图形软件包,深入了解运用VisualC++制作一个拥有可供用户自行定义游戏关卡的3D飞行射击游戏。体现人机交互。充分运用项目开发、面向对象、算法等。关键词关键词:关键词OpenGL游戏设计VisualC++飞行射击I XXX理工大学XXX学院2010届本科生毕业论文OPENGLBASEDONTHEARCADE-STYLEGAMEDEVELOPMENTANDDESIGNSABSTRACTInthree-dimensionalspacedevelopmentoftechnologywascrucialinemulationofforeign,inlargegameasthemainstream.Butlittlegame,orindevelopingsteadily.themajorityofcomputerusers,itistimetogames,soafunlittlegameenoughtomeettheirrequirements.Thisgamedevelopmentpurposeistosatisfythepartoftheuser.Largegameaveryimportanttoattractusers,istogiveusershavecreatedamodel,tothisend,thisgameamodelformakingcharactersontheuser'seditor,hasgreatlyattractedtotheuser.Gameandthemodeleditormodelusingacustomdatastructureofthegame,soyoucandrawtheeditortoeditoutofthemodel.ThisgameisbasedonOpenGLthestorehousetheutilization,theobjectorientationofdevelopment.OpenGLdefinesaprogramminglanguage,andsteppedacrosstheprogrammaticinterfacetospecifications.Itisathree-dimensionalimage(2dalso).Openglisaprofessionalgraphicsapplications,isapowerfulcalltothegroundfloor,alibrary.openglenglishnameis"opengraphicslibrary,"suggests,is"openinterfacegraphicsprogram”.Openglonlywith3dgraphicsabletoreplacethemicrosofttechnologycompletecontroloftheAPI.OpenGLbyusing3-dgraphicspackage,theprobetousevisualcmakingadefinitionforusersonthestageofthe3darcade-stylegame.Thatinteractionfulluseoftheman-machinedevelopment,designingobject-orientedandalgorithms.Keywords:::OpenGLgamedesignVisualC++firepowerexII XXX理工大学XXX学院2010届本科生毕业论文目录摘要...............................................IABSTABSTRACTABSTRACTRACT............................................IRACTI1引言...............................................11.1系统开发背景.......................................11.2项目目的及意义.....................................11.3项目技术要求.......................................21.4开发工具及相关技术简介..............................21.4.1C++语言.........................................21.4.2OpenGL..........................................31.4.3STL.............................................31.4.4VC++............................................52可行性研究........................................72.1技术可行性.........................................72.2经济可行性.........................................72.3操作可行性.........................................72.4法律可行性.........................................73需求分析..........................................83.1需求分析的重要性...................................83.1.1目标游戏要求.....................................83.1.2系统运行环境.....................................8III XXX理工大学XXX学院2010届本科生毕业论文3.1.3系统开发工具.....................................83.1.4系统的性能要求...................................83.1.5系统的功能要求...................................83.1.6系统总体功能需求框架..............................93.2系统主要程序流程图与数据流图.......................103.2.1飞行射击游戏程序流程图与数据流图.................103.2.1.1开始游戏程序流程图与数据流图...................103.2.1.2模型选择流程与数据流图.........................113.2.1.3进行游戏流程与数据流图.........................133.2.1.4飞行射击游戏总业务流程与数据流图................153.2.2模型编辑器总程序流程图与数据流图.................164总体设计.........................................184.1概述.............................................184.2游戏目标..........................................194.3游戏结构设计......................................194.4游戏功能划分......................................194.4.1游戏子功能划分..................................194.5游戏功能描述......................................204.5.1开始菜单功能描述................................204.5.2模型选择功能描述................................204.5.3进行游戏功能描述................................204.5.3用户菜单功能描述................................21IV XXX理工大学XXX学院2010届本科生毕业论文4.6模型编辑器功能划分................................214.7模型编辑器描述....................................215详细设计与系统实现...............................225.1概述.............................................225.2游戏的实施........................................235.2.1主窗口创建(NewShow.cpp)........................265.2.2OpenGL窗口创建(OpenGL.h、OpenGL.cpp)...........265.2.3游戏控制器(Contral.h、Contral.cpp)..............265.2.4机体对象基本类(ObjData.h、ObjData.cpp)..........265.2.5敌机对象类(ObjBaseData.h、ObjBaseData.cpp)......265.2.6敌机对象控制器(AiObj.h、AiObj.cpp)..............265.2.7战机对象控制器(SelfObj.h、SelfObj.cpp)..........275.2.8子弹对象类(BulletObj.h、BulletObj.cpp)..........275.2.9子弹对象控制器(BulletMenager.h、BulletMenager.cpp)....................................................275.2.10文件读取控制器(FioMenager.h、FioMenager.cpp)....275.2.11文字显示类(CGLFont.h、CGLFont.cpp).............275.2.12火花对象类(Grain.h、Grain.cpp).................275.2.13火花对象控制器(GrainMenager.h、GrainMenager.cpp)285.2.14碰撞检测(Hitexamina.h、Hitexamina.cpp).........285.2.15模型控制器(modeMenager.h、modeMenager.cpp).....285.2.16游戏类图.......................................29V XXX理工大学XXX学院2010届本科生毕业论文5.3模型编辑器的实施..................................305.3.1MFC窗口(CMakeFlyModeDlg.h、CMakeFlyModeDlg.cpp)..305.3.2OpenGL窗口创建(OpenGL.h、OpenGL.cpp)............305.3.3子模型管理(BaseGraphics.h、BaseGraphics.cpp).....305.3.4子模型类(GraphicsObj.h、GraphicsObj.cpp)........315.3.5文件存取控制器(FioMenager.h、FioMenager.cpp).....315.3.5模型编辑器类图..................................315.4自定义数据结构....................................316测试与维护.......................................336.1测试的任务及目标..................................336.1.1测试的任务......................................336.1.2测试的目标......................................346.2测试方案..........................................346.2.1模块测试:......................................346.2.3验收测试........................................356.2.4平行运行........................................356.3系统维护..........................................357特点与技巧.......................................367.1游戏特点..........................................367.2代码技巧.........................................36参考文献............................................37附录..............................................38VI XXX理工大学XXX学院2010届本科生毕业论文谢辞..............................................45VII XXX理工大学XXX学院2010届本科生毕业论文1引言1.1系统开发背景软件系统名称:飞行射击游戏本项目是根据毕业设计的要求,经过本人实践及深思熟虑后提出,结合所学知识所作出的最终决定。OpenGL(全写OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRISGL。IRISGL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRISGL的基础上开发了OpenGL。OpenGL的英文全称是“OpenGraphicsLibrary”,顾名思义,OpenGL便是“开放的图形程序接口”。OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。由于Linux操作系统平台的大力推广,基于Linux的各种应用软件也不断壮大,因此基于跨平台图形库的跨平台三维游戏开发也越来越受重视。OpenGL(opengraphicslibrary)是一种独立的平台无关的三维图形开发库,在各种语言下进行主框架开发并结合应用OpenGL函数都可以开发出三维游戏。但是由于框架开发的平台相关性使游戏无法跨平台编译运行,因此glut+OpenGL的方式成了一种很好的选择。但是在对复杂框架和各种媒体的支持方面,glut并不理想。在Linux下可以采用FLTK等框架平台技术实现包括按钮在内的比较复杂的框架功能,但是需要专门的Linux开发环境,众多的Window环境下的KDE爱好者明显对此无法适从。相反,SDL(SimpleDirectMediaLayer)作为免费的跨平台多媒体应用编程接口,已经被人们广泛用于开发二维游戏,其优秀的消息框架支持、文件支持和声音支持等都使得它成为能与微软DirectX匹敌的最为成熟的技术之一。1.2项目目的及意义国内的三维游戏开发技术正处于赶超国外的关键时期,从创意、策划、研究开发与实现,到游戏的运营与维护,都有大量的知识值得学习和摸索。一个优秀的游戏,不但画面漂亮,游戏性能好,而且游戏有特色,娱乐性好。性能的好坏是基于良好的游戏架构跟算法,研究开发一个OpenGL游戏能更好的探索和巩固当中的奥秘。优秀的游戏给人带来娱乐,休闲之余带来更多的乐趣。对计算机要求低,可供更多的游戏玩家享乐。1 XXX理工大学XXX学院2010届本科生毕业论文通过利用OpenGL的三维图形软件包,深入了解运用VisualC++制作一个拥有可供用户自行定义游戏关卡的3D飞行射击游戏。体现人机交互。充分运用项目开发、面向对象、算法等的运用。1.3项目技术要求经过对某些游戏亲身体验,分析和研究后,运用计算机技术,结合飞行射击游戏的实际特点,开发了这飞行射击游戏。一个好的游戏,给人带来娱乐,休闲之余带来更多的乐趣。对计算机要求低,可供更多的游戏玩家享乐。玩家可以通过游戏附带的模型制造工具来制作自己喜爱的飞机模型。为了能让玩家可以制作模型,不需开发一个操作简单的游戏模型制作器,导出模型信息,并能被游戏识别。本游戏通过MicrosoftVisualC++6.0集成开发环境,使用C++语言及OpenGL库、STL库进行开发基本达到要求。1.4开发工具及相关技术简介1.4.1C++语言C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,“CPP”。它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。C语言之所以要起名为“C”,是因为它是主要参考那个时候的一门叫B的语言,它的设计者认为C语言是B语言的进步,所以就起名为C语言;但是B语言并不是因为之前还有个A语言,而是B语言的作者为了纪念他的妻子,他的妻子名字的第一个字母是B;当C语言发展到顶峰的时刻,出现了一个版本叫CwithClass,那就是C++最早的版本,在C语言中增加class和类,那个时候有很多版本的C都希望在C语言中增加类的概念;后来C标准委员会决定为这个版本的C起个新的名字,那个时候征集了很多种名字,最后采纳了其中一个人的意见,以C语言中的++运算符来体现它是C语言的进步,所以就叫C++,也成立了C++标准委员会;一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、RTTI、命名空间(namespace)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC1488-1998。C++是具有国际标准的编程语言,通常称作ANSI/ISOC++。1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2009年)2 XXX理工大学XXX学院2010届本科生毕业论文只有VisualC++2010CTP开发环境的编译器完全符合这个标准。另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《c++编程细想》(ThinkinginC++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。1.4.2OpenGLOpenGL-高性能图形算法行业标准OpenGL™是行业领域中最为广泛接纳的2D/3D图形API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™帮助程序员实现在PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。OpenGL的前身是SGI公司为其图形工作站开发的IRISGL。IRISGL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRISGL的基础上开发了OpenGL。OpenGL的英文全称是“OpenGraphicsLibrary”,顾名思义,OpenGL便是“开放的图形程序接口”。OpenGL是个与硬件无关的软件接口,可以在不同的平台如windows95、windowsNT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL的顶点数组。在OpenGL的基础上还有OpenInventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,OpenInventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。1.4.3STLSTL=StandardTemplateLibrary,标准模块库,惠普实验室开发的一系列软件的统称。它是由AlexanderStepanov、MengLee和DavidRMusser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。3 XXX理工大学XXX学院2010届本科生毕业论文STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。它被内建在你的编译器之内。在C++标准中,STL被组织为下面的13个头文件:、、、、、、