基于Win32游戏应用开发.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《基于Win32游戏应用开发.pdf》由会员分享,可在线阅读,更多相关《基于Win32游戏应用开发.pdf(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、基于 win32 游戏应用开发 1 1 绪论 1.1 研究背景 游戏业已经发展成为 21 世纪最具潜力的朝阳产业,不过目前本土游戏的自主研发已经成为抑制国内游戏产业发展的瓶颈。现阶段最火爆的网络游戏大多是从国外引进,每年需要付大笔版权费,因此只有发展自己的核心技术,进行本土化研发,培养自己的游戏设计人才才能保证游戏产业在国内更大的发展。尽管自主研发已经成为国内游戏厂商最强烈的意愿,但目前国内游戏开发人员“在学习中开发、在研发中学习”的工作方式,远远赶不上网络游戏发展的国际潮流,也不能充分满足玩家的服务需求,因此,游戏精英人才的匮乏已成为制约中国本土化游戏产业发展的瓶颈。1 电脑游戏是一种新兴的
2、文化现象,也是一个新型的朝阳产业。作为这个文化类别的后来者,我们与发达国家、发达地区相比,无论是理论、开发、研究还是投入等方面都仍有一段不小的距离。2国内的游戏玩家们多年来已经见惯了华美的欧美游戏,随着审美观念的变化和审美趣味的提高,他们对一部游戏的评价标准也越来越高。因此,很多玩家已经不能容忍电脑游戏创作方面的平淡无奇、波澜不兴,这对国产游戏本身也是一种无形的压力,作为开发者,我们的责任任重道远。1.2 研究意义 虽然市面上有很多基于一些成熟软件平台,运用各控件且采用高级语言来开发小游戏,可是开发人员往往忽略了底层开发的意义。基于 win32的应用程序执行代码小,运行效率高,具有和 wind
3、ows操作系统的良好整合性,大大提高了软件的运行性能。本文在基于 win32的环境下采用 c、c+语言,直接使用 windows API函数来开发游戏程序。通过对 windows各控件及一些常用的 API函数的使用,来更加熟练的掌握 windows编程技术,更加清楚 windows消息驱动的内在含义。1.3 研究内容 本文将具体论述什么是 windows程序,以及 windows程序的特点和 win32消息驱动机制,介绍 stl技术在 windows程序设计中的优势,通过设计和实现 win32游戏系统具体展示 stl在中 windows程序中的应用,具体说明如何设计和实现基于 win32的游戏
4、应用程序。在此作为初步探索,主要研究 windows 平台上单机游戏的架构设计与开发。福州大学至诚学院本科生毕业设计(论文)2 1.4 论文组织 第 1章 绪论:介绍了本文的研究背景和意义,并提出了本文的主要研究工作。第 2 章 技术背景介绍:通过介绍 windows 程序的特点以及一些消息机制,同时引入 stl 技术,接着介绍什么是 stl,以及基于 win32 的程序应用模型。第 3 章 基于 win32游戏概要设计:主要解决实现程序整体功能的设计问题,包括概念上实现系统的分层结构、系统分成若干个模块、决定各个模块各个层之间的接口、传递的信息,以及数据结构、模块结构的设计等。第 4 章 基
5、于 win32游戏详细设计:主要确定应该如何具体地实现所要求的系统,主要的工作有:根据概要设计说明书所确定的处理流程、总体结构、层次结构和模块外部设计,设计软件系统的结构设计、逐个层次逐个模块的程序描述。基于 win32 游戏应用开发 3 2 技术背景介绍 本章主要介绍 windows程序的特点以及什么是消息驱动机制,同时还引入了STL技术。2.1 windows程序的特点(1)事件驱动的程序设计 传统 MS-DOS 程序主要采用:顺序的、关联的过程驱动的程序设计方法。3程序就是按预先定义好的一系列操作序列的组合,具有一定的开头、过程和结束。这样的程序设计方法是面向过程的而不是面向对象的,交互
6、性差,用户界面不够友好。事件驱动的程序设计不是按事件的顺序来控制,而是由事件的发生来控制。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。3(2)消息循环与输入 消息是一种报告事件发生的通知,事件驱动是靠消息循环机制来实现的。Windows 应用程序的消息来源有以下四种:输入消息、控制消息、系统消息、用户消息。Windows 操作系统三个内核基本元件:GDI(图形设备接口)、KERNEL、USER。GDI(图形设备接口)负责绘制像素、打印拷贝输出,绘制用户界面;系统内核 KERNEL 支持与操作系统密切相关
7、的功能;USER 为所有的用户界面对象提供支持,它用于接收和管理所有输入消息和系统消息并把它们发给相应的窗口的消息队列。(3)图形输出 windows 程序的输入与输出都跟 DOS 有着很大不同:DOS 程序独占整个显示屏幕,其他程序在后台等待;Windows 程序的所有输出都是图形,字符也被作为图形来处理;windows 下的应用程序使用 GDI(图像接口设备)进行图形输出,GDI 屏蔽了不同设备的差异,提供了 windows 下设备无关的图形输出能力。(4)GDI(图形设备接口)GDI 提供两种基本服务:创建图形输出和存储图象。GDI 提供了大量用于图形输出的函数,并根据当前使用设备调用相
8、应的设备驱动程序,处理从应用程序福州大学至诚学院本科生毕业设计(论文)4 接收的绘图请求、处理绘图数据产生绘图输出。这些绘图函数分为三类:一是文字输出;二是矢量图形函数,用于画线、圆等几何图形;三是光栅(位图)图形函数,用于绘制位图。3GDI 识别四种类型的设备:显示屏幕、硬拷贝设备(打印机、绘图机)、位图和图元文件。(5)资源共享 DOS 程序运行时独占系统的全部资源,只有在程序结束时才释放资源,而Windows 是一个多任务的操作系统,各个应用程序共享系统提供的资源。windows程序要求应用程序必须按一种能允许它共享 windows 资源的方式进行设计,共享资源的基本模式是:1 向 Wi
9、ndows 系统请求资源;2 使用该资源;3 释放该资源给 Windows 以供别的程序使用。应用程序一般不要直接访问内存或其他硬件设备,如键盘、鼠标、计数器、屏幕或串口、并口等。Windows 系统要求绝对控制这些资源,以保证向所有的应用程序提供公平的不中断的运行。如要访问串并口,应当使用通过 Windows 提供的函数来安全的访问。3 2.2消息为基础事件驱动 windows程序的进行依靠外部发生的事件驱动,即程序不断等待,等待任何可能的输入,然后做判断再做出适当的处理。输入是由操作系统捕捉到之后,以消息的形势(一种数据结构)进入程序之中。输入可分为由硬件装置所产生的消息(如鼠标移动或键盘
10、被敲下),放在系统队列中,以及由 windows系统或其它windows程序传送过来的消息,放在消息队列中。图 2-1 消息驱动机制 图片引自资料4 Windows中有一个系统消息队列,对每一个正在执行的 Windows 应用程序,系统自动为其建立一个“消息队列”,即应用程序队列,这个消息队列用来存放基于 win32 游戏应用开发 5 该程序可能建立的各种不同窗口的消息。4程序中有一小段程序代码称作“消息循环”,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。有些消息直接发送给窗口消息处理程序,不用放入消息队列中。消息被分为“队列化的”和“非队列化的”。队列化消息被发送给消息队列,
11、而非队列化消息则发送给窗口消息处理程序。队列化消息基本上是使用者输入的结果,以击键(如 WM_KEYDOWN和 WM_KEYUP消息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。队列化消息还包含时钟消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)。非队列化消息来自呼叫特定的 Windows 函数,键盘或鼠标输入时发出的队列化消息信号,也能在非队列化消息中出现。例如,用键盘或鼠标选择了一个菜单项时,键盘或鼠标消息就是队列化的,而说明菜单项已选中的 WM_COMMAND消息则可能就是
12、非队列化的。任何情况下,窗口消息处理程序都将获得窗口所有的消息-包括队列化的和非队列化的。2.3基于 win32程序模型 windows 程序包括“程序代码”和 UI 资源两大部分,最后两部分以 RC 编译器整合为一个完整的.EXE 文件。UI 资源就是指功能菜单、对话框外貌、程序图标、光标形状等东西。这些 UI 资源以各种扩展名的文件存在,如.ico、.bmp、.cur等,程序员在资源描述档中描述它们。RC 编译器读取 RC 档的描述后将所有 UI资源集中制作一个.RES 文件,然后与程序代码结合在一起,最终形成了完整的Windows 可执行档。图 2-2 Win32 开发流程 程序从 Wi
13、nMain()开始,然后进入一个消息队列,程序在这里等待发给它的福州大学至诚学院本科生毕业设计(论文)6 所有消息然后一一处理,直到接收到 WM_QUIT 的消息的时候,消息队列终止,程序结束。在 WinMain()函数中,程序所进行的最重要工作是注册窗口类,从而把自定义的窗口过程提供给 Windows,然后程序调用 Windows 创建和显示窗口,由此启动同用户的交互过程。在消息循环中,程序不断取得消息,但并不进行处理,而是将其发回 Windows,由 Windows 将消息发给相应的窗口过程。消息循环的作用在于控制生命期,如果没有消息循环,进程将立即结束。图 2-3 Win32 程序生命周
14、期 在较高层次上来看,一个可扩展的系统会给模块提供资源和自由,而模块应当配合系统的整体结构。程序执行时,Windows 会为其创建进程,分配资源,并调用 WinMain()。WinMain()是进程入口,也是进程出口,在此期间进程可以做任何事情,但是为了使用Windows 提供的各种便利,它必须符合 Windows 程序模型,将自己的运行结合到 Windows 环境中。作为进程出口,WinMain()决定着程序生命期。一个提供窗口过程而等待 Windows 调用的程序如何维持和结束自己的生命期呢,应该由消息来决定。当进程没有要处理的消息时,它应该等待,所以 WinMain()必须知道有没有消息
15、,Windows 发给窗口过程的消息不能绕过基于 win32 游戏应用开发 7 WinMain();当进程收到特定的消息时,它结束生命期,所以 WinMain()还应该了解消息的内容。这正是 GetMessage()所做的,如果取不到消息就阻塞,如果取到 WM_QUIT 消息就返回 0,结束消息循环。5 程序的运行就是用户的外部操作不断产生事件,这些事件又被相应的对象的过程处理,一般的程序流程如图 2-4所示。图 2-4 win32 程序流程 一个窗口程序可能有很多窗口类,一些窗口类及其窗口过程是程序自定义的,另一些则是在 Windows 内部定义的,程序看不到其窗口过程,比如各种控件窗口。窗
16、口程序运行起来以后,这些窗口类互相配合,它们通信的方式就是消息。由于消息指向的窗口过程可能是自定义的,也可能是 Windows 内部的,只有Windows才能把它们都送到目的地,并保持发送方式的一致性。所以WinMain()取到消息后,通过 DispatchMessage()将其发回 Windows,由 Windows 为其调用适当的窗口过程,直到窗口过程调用后返回 Windows,DispatchMessage()才返回。5 2.4 STL技术的介绍 几乎每过 10 年左右,就会出现新的程序设计思想和方法,上世纪 70 年代出现了结构化程序设计思想,80 年代面向对象程序设计开始蓬勃发展,9
17、0 年代中期泛型程序设计受到关注。面向过程的程序设计方法以函数为模块,忽略了数据和操作的内在联系,用这种方法设计出来的软件系统其解空间和问题空间的结构上并不一致,这不仅令人感到难于理解,同时软件的维护也相当的困难。而用面福州大学至诚学院本科生毕业设计(论文)8 向对象方法设计的软件可复用性好,利用封装和继承机制,派生类不仅可以重用基类的数据机构和代码,而且面向对象方法中的多态性使这个方法更加灵活和高效。虽然面向对象程序设计领域占主导地位,但随着该方法的广泛应用,其自身固有一些不足和缺陷也显露出来。用面向对象方法设计出来的程序模块和软件组件,无法适用于程序设计语言中最简单的数据类型,大量基本类型
18、不能被面向对象方法进行有效的抽象。泛型程序设计技术是对面向对象技术的超越,它在面向对象的组件技术基础上研究如何进一步对算法、数据结构和其他软件概念进行抽象和系统化组织。STL 容器分为以下几部分:(1)容器部分,STL 的一个重要组成部分,包括 vector(类似于大小可动态增加的数组)、queue(队列)、stack(堆栈)。string 也可以看作是一个容器,适用于容器的方法同样也适用于 string。STL 容器允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL 容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们
19、许多重复而乏味的工作简化。(2)算法部分,STL 的一个重要组成部分,提供了大约 100 个实现算法的模版函数用于操控各种容器,同时也可以操控内建数组。比如:find 用于在容器中查找等于某个特定值的元素,for_each 用于将某个函数应用到容器中的各个元素上,sort 用于对容器中的元素排序。所有这些操作都是在保证执行效率的前提下进行的,所以,如果在你使用了这些算法之后程序变得效率底下,首先一定不要怀疑这些算法本身,仔细检查一下程序的其他地方。(3)迭代器部分,STL 的一个重要组成部分,如果没有迭代器的撮合,容器和算法便无法结合的如此完美。迭代器在 STL 中用来将算法和容器联系起来,起
20、着一种黏和剂的作用。几乎 STL 提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。有效的利用已有的成果,将经典、优秀的算法标准化,模块化,不仅可以提高软件开发人员的劳动生产率和系统的质量,而且是软件工程追求的重要目标和软件产业化的需求。函数库是结构化程序设计阶段的产物,类库是面向对象思想的作品,C+的标准模板库 STL是泛型思想下的完美典范作品,它比传统的函数库和类库有更好的代码复用性。基于 win32 游戏应用开发 9 3 基于 win32 游戏概要设计 本章通过介绍一个具体实例来说明基于 win32 游戏的设计。在本系统的概
21、要设计说明书中,主要解决实现程序整体功能的设计问题。包括概念上实现系统的分层结构、系统分成若干个模块、决定各个模块各个层之间的接口、传递的信息,以及数据结构、模块结构的设计等。3.1用例设计 3.1.1 游戏玩家用例需求 游戏者玩游戏 图 3-1 游戏玩家用例图 用例 ID Player_Play_Game 用例名 游戏者玩游戏用例 用例体 参与者(Actor)游戏者 简要说明 游戏者在游戏主界面找到2 张通过 1-2折线相连的相同图片 前置条件 游戏者已经设置好音效,难度,背景,并开始游戏 主要事件流 1.屏幕上出现 8*8张图片,玩家点击图片,用例开始;2 游戏者等待系统的判定(判定图片是
22、否能够消除),符合规则则图片消失,不然图片继续存在;3.64张图片全部被消除或者游戏时间到,游戏结束 辅助事件流 1.游戏者依次选择两张图片 2.进入主要事件流 2 后置条件 游戏者获得最后得分 特别需求 游戏者只能利用鼠标进行游戏 注意和问题 2 张通过 12折线相连的相同图片才能被消除 图 3-1 游戏玩家用例描述表 福州大学至诚学院本科生毕业设计(论文)10 如图 3-2 所示,图片状态图是用来描述图片的生命周期。游戏刚开始时,玩家并未点击图片,一旦玩家点击任一图片,当前图片即被激活成活动状态,显示当前图片信息。第二次点击另一图片,该张图片被激活,显示图片信息,再判断是否与第一张图片相同
23、且符合消去条件,符合消去条件两张图片生命周期结束,不符合则继续直到符合条件。显示第二次点击的图片上的动物描述信息图片上的动物描述信息不变消去两张图片,动物描述信息不变点击任意图片(active)显示该图片上动物描述信息第二次点击任意图片两次图片不同两次图片相同两张图片可消去两张图片不可消去 图 3-2 图片状态图 3.1.2 定时器用例需求 定时器控制游戏时间 图 3-3 定时器用例图 基于 win32 游戏应用开发 11 用例 ID Timer_Case 用例名 定时器控制游戏时间用例 用例体 参与者(Actor)定时器 简要说明 用来控制游戏结束时间 前置条件 游戏已经开始 主要事件流 1
24、.游戏开始,用例开始 2.随着玩游戏的时间增加,“生命线”越短 辅助事件流 无 后置条件 游戏结束,获得分数 注意和问题 游戏开始,定时器开始计时 图 3-2 定时器用例描述表 如图 3-4所示,定时器状态图是用来描述图片的生命周期的。已进入游戏界面,即马上激活定时器成活动状态,在玩游戏过程中定时器的时间慢慢减少。在规定时间内图片全部消去或者定时器时间全部用完,则定时器成消亡状态,也就是生命周期结束。游戏一开始,计时器即开始计时随着玩的时间增加,“生命”减少图片没消失完,时间用完图片消失完,时间未用完 图 3-4 定时器状态图 福州大学至诚学院本科生毕业设计(论文)12 3.2系统功能设计 功
25、能设计包括玩家功能设计和系统功能设计。其中玩家功能有开始游戏、系统设置、音量调节、查看帮助、退出游戏;系统功能有计算得分、消牌、随机发牌、时间限制、分数排名、图片简介。图 3-5 玩家功能图 图 3-6 系统功能图 3.3总体结构设计 系统功能 随机发牌 消牌 图片简介 分数排名 时间限制 计算得分 玩家功能 系统设置 开始游戏 退出游戏 查看帮助 音量调节 基于 win32 游戏应用开发 13 3.3.1程序总体结构 图 3-7 程序结构图 3.3.2基本设计概念和处理流程 首先,游戏玩家进入系统主界面,玩家可以直接进入游戏,也可以进行游戏设置(包括音量设置、游戏难度设置、游戏背景设置、)和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Win32 游戏 应用 开发
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内