




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于win32游戏应用开发1 绪论1.1 研究背景游戏业已经发展成为21世纪最具潜力的朝阳产业,不过目前本土游戏的自主研发已经成为抑制国内游戏产业发展的瓶颈。现阶段最火爆的网络游戏大多是从国外引进,每年需要付大笔版权费,因此只有发展自己的核心技术,进行本土化研发,培养自己的游戏设计人才才能保证游戏产业在国内更大的发展。尽管自主研发已经成为国内游戏厂商最强烈的意愿,但目前国内游戏开发人员“在学习中开发、在研发中学习”的工作方式,远远赶不上网络游戏发展的国际潮流,也不能充分满足玩家的服务需求,因此,游戏精英人才的匮乏已成为制约中国本土化游戏产业发展的瓶颈。1电脑游戏是一种新兴的文化现象,也是一个新型的朝阳产业。作为这个文化类别的后来者,我们与发达国家、发达地区相比,无论是理论、开发、研究还是投入等方面都仍有一段不小的距离。2国内的游戏玩家们多年来已经见惯了华美的欧美游戏,随着审美观念的变化和审美趣味的提高,他们对一部游戏的评价标准也越来越高。因此,很多玩家已经不能容忍电脑游戏创作方面的平淡无奇、波澜不兴,这对国产游戏本身也是一种无形的压力,作为开发者,我们的责任任重道远。1.2 研究意义虽然市面上有很多基于一些成熟软件平台,运用各控件且采用高级语言来开发小游戏,可是开发人员往往忽略了底层开发的意义。基于win32的应用程序执行代码小,运行效率高,具有和windows操作系统的良好整合性,大大提高了软件的运行性能。本文在基于win32的环境下采用c、c+语言,直接使用windows API函数来开发游戏程序。通过对windows各控件及一些常用的API函数的使用,来更加熟练的掌握windows编程技术,更加清楚windows消息驱动的内在含义。1.3 研究内容本文将具体论述什么是windows程序,以及windows程序的特点和win32消息驱动机制,介绍stl技术在windows程序设计中的优势,通过设计和实现win32游戏系统具体展示stl在中windows程序中的应用,具体说明如何设计和实现基于win32的游戏应用程序。在此作为初步探索,主要研究windows平台上单机游戏的架构设计与开发。1.4 论文组织第1章 绪论:介绍了本文的研究背景和意义,并提出了本文的主要研究工作。第2章 技术背景介绍:通过介绍windows程序的特点以及一些消息机制,同时引入stl技术,接着介绍什么是stl,以及基于win32的程序应用模型。 第3章 基于win32游戏概要设计:主要解决实现程序整体功能的设计问题,包括概念上实现系统的分层结构、系统分成若干个模块、决定各个模块各个层之间的接口、传递的信息,以及数据结构、模块结构的设计等。第4章 基于win32游戏详细设计:主要确定应该如何具体地实现所要求的系统,主要的工作有:根据概要设计说明书所确定的处理流程、总体结构、层次结构和模块外部设计,设计软件系统的结构设计、逐个层次逐个模块的程序描述。2 技术背景介绍本章主要介绍windows程序的特点以及什么是消息驱动机制,同时还引入了STL技术。2.1 windows程序的特点(1)事件驱动的程序设计 传统MS-DOS程序主要采用:顺序的、关联的过程驱动的程序设计方法。3程序就是按预先定义好的一系列操作序列的组合,具有一定的开头、过程和结束。这样的程序设计方法是面向过程的而不是面向对象的,交互性差,用户界面不够友好。事件驱动的程序设计不是按事件的顺序来控制,而是由事件的发生来控制。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。3(2)消息循环与输入消息是一种报告事件发生的通知,事件驱动是靠消息循环机制来实现的。Windows应用程序的消息来源有以下四种:输入消息、控制消息、系统消息、用户消息。Windows操作系统三个内核基本元件:GDI(图形设备接口)、KERNEL、USER。GDI(图形设备接口)负责绘制像素、打印拷贝输出,绘制用户界面;系统内核KERNEL支持与操作系统密切相关的功能;USER为所有的用户界面对象提供支持,它用于接收和管理所有输入消息和系统消息并把它们发给相应的窗口的消息队列。(3)图形输出 windows程序的输入与输出都跟DOS有着很大不同:DOS程序独占整个显示屏幕,其他程序在后台等待;Windows程序的所有输出都是图形,字符也被作为图形来处理;windows下的应用程序使用GDI(图像接口设备)进行图形输出,GDI屏蔽了不同设备的差异,提供了windows下设备无关的图形输出能力。(4)GDI(图形设备接口) GDI提供两种基本服务:创建图形输出和存储图象。GDI提供了大量用于图形输出的函数,并根据当前使用设备调用相应的设备驱动程序,处理从应用程序接收的绘图请求、处理绘图数据产生绘图输出。这些绘图函数分为三类:一是文字输出;二是矢量图形函数,用于画线、圆等几何图形;三是光栅(位图)图形函数,用于绘制位图。3GDI识别四种类型的设备:显示屏幕、硬拷贝设备(打印机、绘图机)、位图和图元文件。(5)资源共享DOS程序运行时独占系统的全部资源,只有在程序结束时才释放资源,而Windows是一个多任务的操作系统,各个应用程序共享系统提供的资源。windows程序要求应用程序必须按一种能允许它共享windows资源的方式进行设计,共享资源的基本模式是:向Windows系统请求资源;使用该资源;释放该资源给Windows以供别的程序使用。应用程序一般不要直接访问内存或其他硬件设备,如键盘、鼠标、计数器、屏幕或串口、并口等。Windows系统要求绝对控制这些资源,以保证向所有的应用程序提供公平的不中断的运行。如要访问串并口,应当使用通过Windows提供的函数来安全的访问。32.2消息为基础事件驱动windows程序的进行依靠外部发生的事件驱动,即程序不断等待,等待任何可能的输入,然后做判断再做出适当的处理。输入是由操作系统捕捉到之后,以消息的形势(一种数据结构)进入程序之中。输入可分为由硬件装置所产生的消息(如鼠标移动或键盘被敲下),放在系统队列中,以及由windows系统或其它windows程序传送过来的消息,放在消息队列中。图2-1 消息驱动机制图片引自资料4Windows中有一个系统消息队列,对每一个正在执行的Windows应用程序,系统自动为其建立一个“消息队列”,即应用程序队列,这个消息队列用来存放该程序可能建立的各种不同窗口的消息。4程序中有一小段程序代码称作“消息循环”,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。有些消息直接发送给窗口消息处理程序,不用放入消息队列中。消息被分为“队列化的”和“非队列化的”。队列化消息被发送给消息队列,而非队列化消息则发送给窗口消息处理程序。队列化消息基本上是使用者输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP消息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。队列化消息还包含时钟消息(WM_TIMER)、更新消息(WM_PAINT)和退出消息(WM_QUIT)。非队列化消息来自呼叫特定的Windows函数,键盘或鼠标输入时发出的队列化消息信号,也能在非队列化消息中出现。例如,用键盘或鼠标选择了一个菜单项时,键盘或鼠标消息就是队列化的,而说明菜单项已选中的WM_COMMAND消息则可能就是非队列化的。任何情况下,窗口消息处理程序都将获得窗口所有的消息-包括队列化的和非队列化的。2.3基于win32程序模型windows程序包括“程序代码”和UI资源两大部分,最后两部分以RC编译器整合为一个完整的.EXE文件。UI资源就是指功能菜单、对话框外貌、程序图标、光标形状等东西。这些UI资源以各种扩展名的文件存在,如.ico、.bmp、.cur等,程序员在资源描述档中描述它们。RC编译器读取RC档的描述后将所有UI资源集中制作一个.RES文件,然后与程序代码结合在一起,最终形成了完整的Windows可执行档。 图2-2 Win32开发流程程序从WinMain()开始,然后进入一个消息队列,程序在这里等待发给它的所有消息然后一一处理,直到接收到WM_QUIT的消息的时候,消息队列终止,程序结束。在WinMain()函数中,程序所进行的最重要工作是注册窗口类,从而把自定义的窗口过程提供给Windows,然后程序调用Windows创建和显示窗口,由此启动同用户的交互过程。在消息循环中,程序不断取得消息,但并不进行处理,而是将其发回Windows,由Windows将消息发给相应的窗口过程。消息循环的作用在于控制生命期,如果没有消息循环,进程将立即结束。图2-3 Win32程序生命周期在较高层次上来看,一个可扩展的系统会给模块提供资源和自由,而模块应当配合系统的整体结构。程序执行时,Windows会为其创建进程,分配资源,并调用WinMain()。WinMain()是进程入口,也是进程出口,在此期间进程可以做任何事情,但是为了使用Windows提供的各种便利,它必须符合Windows程序模型,将自己的运行结合到Windows环境中。作为进程出口,WinMain()决定着程序生命期。一个提供窗口过程而等待Windows调用的程序如何维持和结束自己的生命期呢,应该由消息来决定。当进程没有要处理的消息时,它应该等待,所以WinMain()必须知道有没有消息,Windows发给窗口过程的消息不能绕过WinMain();当进程收到特定的消息时,它结束生命期,所以WinMain()还应该了解消息的内容。这正是GetMessage()所做的,如果取不到消息就阻塞,如果取到WM_QUIT消息就返回0,结束消息循环。5 程序的运行就是用户的外部操作不断产生事件,这些事件又被相应的对象的过程处理,一般的程序流程如图2-4所示。图2-4 win32程序流程一个窗口程序可能有很多窗口类,一些窗口类及其窗口过程是程序自定义的,另一些则是在Windows内部定义的,程序看不到其窗口过程,比如各种控件窗口。窗口程序运行起来以后,这些窗口类互相配合,它们通信的方式就是消息。由于消息指向的窗口过程可能是自定义的,也可能是Windows内部的,只有Windows才能把它们都送到目的地,并保持发送方式的一致性。所以WinMain()取到消息后,通过DispatchMessage()将其发回Windows,由Windows为其调用适当的窗口过程,直到窗口过程调用后返回Windows,DispatchMessage()才返回。52.4 STL技术的介绍几乎每过10年左右,就会出现新的程序设计思想和方法,上世纪70年代出现了结构化程序设计思想,80年代面向对象程序设计开始蓬勃发展,90年代中期泛型程序设计受到关注。面向过程的程序设计方法以函数为模块,忽略了数据和操作的内在联系,用这种方法设计出来的软件系统其解空间和问题空间的结构上并不一致,这不仅令人感到难于理解,同时软件的维护也相当的困难。而用面向对象方法设计的软件可复用性好,利用封装和继承机制,派生类不仅可以重用基类的数据机构和代码,而且面向对象方法中的多态性使这个方法更加灵活和高效。虽然面向对象程序设计领域占主导地位,但随着该方法的广泛应用,其自身固有一些不足和缺陷也显露出来。用面向对象方法设计出来的程序模块和软件组件,无法适用于程序设计语言中最简单的数据类型,大量基本类型不能被面向对象方法进行有效的抽象。泛型程序设计技术是对面向对象技术的超越,它在面向对象的组件技术基础上研究如何进一步对算法、数据结构和其他软件概念进行抽象和系统化组织。STL容器分为以下几部分:(1)容器部分,STL的一个重要组成部分,包括vector(类似于大小可动态增加的数组)、queue(队列)、stack(堆栈)。string也可以看作是一个容器,适用于容器的方法同样也适用于string。STL容器允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。(2)算法部分,STL的一个重要组成部分,提供了大约100个实现算法的模版函数用于操控各种容器,同时也可以操控内建数组。比如:find用于在容器中查找等于某个特定值的元素,for_each用于将某个函数应用到容器中的各个元素上,sort用于对容器中的元素排序。所有这些操作都是在保证执行效率的前提下进行的,所以,如果在你使用了这些算法之后程序变得效率底下,首先一定不要怀疑这些算法本身,仔细检查一下程序的其他地方。(3)迭代器部分,STL的一个重要组成部分,如果没有迭代器的撮合,容器和算法便无法结合的如此完美。迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。有效的利用已有的成果,将经典、优秀的算法标准化,模块化,不仅可以提高软件开发人员的劳动生产率和系统的质量,而且是软件工程追求的重要目标和软件产业化的需求。函数库是结构化程序设计阶段的产物,类库是面向对象思想的作品,C+的标准模板库STL是泛型思想下的完美典范作品,它比传统的函数库和类库有更好的代码复用性。3 基于win32游戏概要设计本章通过介绍一个具体实例来说明基于win32游戏的设计。在本系统的概要设计说明书中,主要解决实现程序整体功能的设计问题。包括概念上实现系统的分层结构、系统分成若干个模块、决定各个模块各个层之间的接口、传递的信息,以及数据结构、模块结构的设计等。3.1用例设计3.1.1 游戏玩家用例需求图 3-1 游戏玩家用例图用例IDPlayer_Play_Game用例名游戏者玩游戏用例用例体参与者(Actor)游戏者简要说明游戏者在游戏主界面找到2张通过1-2折线相连的相同图片前置条件游戏者已经设置好音效,难度,背景,并开始游戏主要事件流1. 屏幕上出现8*8张图片,玩家点击图片,用例开始;2游戏者等待系统的判定(判定图片是否能够消除),符合规则则图片消失,不然图片继续存在;3.64张图片全部被消除或者游戏时间到,游戏结束辅助事件流1.游戏者依次选择两张图片2.进入主要事件流2后置条件游戏者获得最后得分特别需求游戏者只能利用鼠标进行游戏注意和问题2张通过12折线相连的相同图片才能被消除图 3-1 游戏玩家用例描述表如图3-2所示,图片状态图是用来描述图片的生命周期。游戏刚开始时,玩家并未点击图片,一旦玩家点击任一图片,当前图片即被激活成活动状态,显示当前图片信息。第二次点击另一图片,该张图片被激活,显示图片信息,再判断是否与第一张图片相同且符合消去条件,符合消去条件两张图片生命周期结束,不符合则继续直到符合条件。图 3-2 图片状态图3.1.2 定时器用例需求图3-3 定时器用例图用例IDTimer_Case用例名定时器控制游戏时间用例用例体参与者(Actor)定时器简要说明用来控制游戏结束时间前置条件游戏已经开始主要事件流1.游戏开始,用例开始2.随着玩游戏的时间增加,“生命线”越短辅助事件流无后置条件游戏结束,获得分数注意和问题游戏开始,定时器开始计时 图 3-2 定时器用例描述表如图3-4所示,定时器状态图是用来描述图片的生命周期的。已进入游戏界面,即马上激活定时器成活动状态,在玩游戏过程中定时器的时间慢慢减少。在规定时间内图片全部消去或者定时器时间全部用完,则定时器成消亡状态,也就是生命周期结束。图 3-4 定时器状态图3.2系统功能设计功能设计包括玩家功能设计和系统功能设计。其中玩家功能有开始游戏、系统设置、音量调节、查看帮助、退出游戏;系统功能有计算得分、消牌、随机发牌、时间限制、分数排名、图片简介。玩家功能系统设置开始游戏退出游戏查看帮助音量调节图3-5 玩家功能图系统功能随机发牌消牌图片简介分数排名时间限制计算得分图3-6 系统功能图3.3总体结构设计3.3.1程序总体结构图3-7 程序结构图3.3.2基本设计概念和处理流程首先,游戏玩家进入系统主界面,玩家可以直接进入游戏,也可以进行游戏设置(包括音量设置、游戏难度设置、游戏背景设置、)和查看游戏帮助以便对游戏的操作有一定的了解,让玩家可以更轻松的玩,体会到游戏的乐趣。当然,游戏玩家也可以不玩游戏,直接选择退出游戏。进入游戏后,系统会根据不同的游戏级别为游戏玩家初始化游戏界面。游戏启动时,定时器开始计时,并根据游戏级别的难度来安排时间条“跑动”的快慢,难度越高时间条跑得越快,即时间扣得越多。程序会根据游戏玩家个人当前的游戏情况来计算当前的得分,显示在屏幕右上方。当游戏玩家结束一局游戏或系统倒计时结束时,系统会为游戏玩家提供游戏分数和排名情况的界面,并根据玩家的游戏得分跟历史玩家的得分的对比来得出当前的游戏玩家排名,得分高的排前面。游戏玩家可以选择返回主界面。图3-8 系统过程流程图3.4系统数据结构设计3.4.1 数据结构逻辑设计变量标题类型备注Icon_IDInt图标IDPicture_IDInt图片IDIcon_PathString图标路径Picture_PathString图片路径Picture_ItroString图片介绍表3-3图片类变量标题类型备注ScoreInt用户总得分OrderInt排名TimeString系统时间Gamer_NameString用户姓名表3-4玩家类变量标题类型备注TimerString定时器变量Game_StepString游戏等级表3-5计时器变量标题类型备注Music_NameString音乐名Current_VolString当前音量表3-6 音乐音量3.4.2 数据结构物理设计在本项目中用到的图片统一采用动物图片,各个图片路径、名称、动物描述信息以及对应的动物名称存储在AnimalData.xml 文件中, 以上各数据在代码中全是存储在vector中。文件结构信息如下: Icon 的路径 JPG 的路径 动物的名称 动物的描述信息例如:PackageChinese AnimalIcon01.bmpPackageChinese AnimalPicture01.bmp 梅花鹿 别名花鹿、鹿,属于鹿科。梅花鹿是一种中型鹿,遍布鲜明的白色梅花斑点,生活于森林边缘或山地草原地区。产于东北、安徽、江西和四川。GamerOrder.xml存放前十名玩家的排名信息,包括玩家名、得分和系统时间,以上各数据在代码中全是存储在vector中。文件信息如下: 电脑名 游戏得分 当前系统时间 例如: CDC2D5FA319242A 32 01/12/10-20:13:48 Config.ini存放游戏运行的三个级别的时间,声音的最大,最小和当前值,音效的最大,最小和当前值,以上各数据在代码中全是存储在vector中。具体结构如下:SoundVolumeRangeVolumeLeast=声音最小值VolumeBiggest=声音最大值VolumeCurrent=声音当前值 LevelEasyLevel=容易等级时间CommonLevel=正常等级时间DifficultyLevel=困难等级时间3.5用户界面设计本系统总共有三个界面:初始界面、游戏界面和排行榜界面。在进入连连看游戏时的初始界面,主要提供用户的功能有:选择游戏的难度级别、设置游戏界面背景、背景音乐音量的大小的调节、游戏帮助文档、开始游戏功能。要求界面美观且符合大众操作习惯。 图 3-9 游戏初始主窗体界面图如图3-10,游戏界面左边显示的是64张随机生成的待消图片,图片呈8*8方正的形势排列在界面左边。界面右边是当前游戏得分和游戏剩余时间的显示,随着消去图片的增加得分会越来越高,时间确实逐渐减少,在时间条下方是当前点击的图片的大图和文字介绍。图3-10 游戏主界面图排行榜界面主要是提供给用户了解自己玩游戏的得分和别人的得分的高低差异以及自己的排名状况,得分最高的排在最上面,由上往下依次列出每个玩家的信息包括玩家名字(默认为电脑名)、得分和时间。 图 3-11 游戏排行榜界面4 基于win32游戏详细设计在本章中,确定应该如何具体地实现所要求的系统,以便在编码阶段可以把这个描述直接翻译成具体程序语言书写的程序。主要的工作有:根据概要设计说明书所确定的处理流程、总体结构、层次结构和模块外部设计,设计软件系统的结构设计、逐个层次逐个模块的程序描述。4.1 程序系统结构连连看系统数据文件存储游戏时间控制游戏设置界面设置显示排名信息游戏主控模块图4-1 系统总体模块结构图连连看游戏系统模块名称功能备注ID标识名称1DataStore数据文件存储模块存储相关数据1.1AnimalData图片数据存储模块存储个图片路径、名称、动物描述信息以及对应的动物名称读取相应参数并映射到相关类,由Vector向量统一管理这些数据1.2GamerOrder游戏分数存储模块存储游戏者玩游戏的分数读取相应参数并映射到相关类,由Vector向量统一管理这些数据2TimeControl游戏时间控制模块控制游戏的总时间,当游戏总时间一到游戏结束(在图片没有在规定时间消完的前提下)。3GamerConfig游戏设置模块选择游戏难易度、背景音乐景的选择级别有3种,背景有3种4InterfaceConfig界面设置模块给玩家提供接口和游戏交互“生命值”提示游戏结束时间5DisplayOrder显示排名信息模块显示游戏者玩游戏的分数及排名6GameControl游戏主控模块图片加载,消图和画线,图片随机分布,显示大图和动物信息表4-1连连看系统功能一览表4.2 数据文件存储模块AnimalData.xml存放动物icon的路径,jpg的路径,动物名称,动物描述信息,系统中将Animaldata存放在Vector中,对Animaldata的主要操作是读跟写操作。GamerOrder.xml存放前十名玩家的排名信息,包括玩家名和得分,系统中将玩家排名信息存放在Vector中,对读者信息的主要操作主要是读跟写操作。Config.ini存放游戏运行的三个级别的时间,声音的最大,最小和当前值,音效的最大,最小和当前值,对Config.ini的主要操作是读操作。系统初始化读取AnimalData.xmlAnimalData 类Vector图4-2 AnimalData.xml 文件的操作读取数据到GamerOrder 类GamerOrdre.xml写入到xml文件中Vector重新排名更改相关数据图4-3 GamerOrder.xml 文件的操作4.3 时间控制模块游戏一开始,定时器就开始计时,依照游戏总时间来控制游戏玩家的游戏时间,当游戏总时间一到游戏结束(图片没有在规定时间消完的前提下)。单击游戏主界面“开始”按钮,定时器开始计时,随着玩游戏的时间增加“生命值”减少,当生命值为0的时候,程序自动跳到结束界面。当选择不同的模式关卡,所用的时间是不相同的,反应在时间进度条消失的快慢程度。时间长短是按照简单、一般和困难三种模式分别进行设置,根据游戏级别的不同,设定不同的游戏时间:简单为5分钟;一般为4分钟;困难为1分钟。控制玩家游戏时间,并进行倒计时。如图4-4,计时器的逻辑流程。当玩家点击开始游戏按钮后,开始进行倒计时。随着游戏的进行,游戏限制时间逐渐减少;当倒计时结束时,回触发定时器,之后定时器发送消息到消息队列,系统接收消息后,强制玩家退出游戏,显示游戏分数界面。 图4-4 计时器逻辑流程4.4 游戏配置模块游戏配置游戏难度选择游戏声音设计游戏背景选择游戏帮助图4-5 游戏配置模块构造图(1)改变游戏难易度:通过下拉列表的不同选项来控制进度条的改变速度,当进度条的值变为零时,隐藏游戏窗体弹出排名榜窗体。(2)背景音乐的设计:分别设计两个滚动条,分别把两个滚动条的值对应到游戏环境的背景音乐和音效,只要改变滚动条的值就可以改变音量的大小和音效,背景音乐也只能是后缀名为 .wav 的声音文件。(3)游戏背景的选择:玩家可以选择自己喜欢的图片来改变游戏的背景,当点击背景图片按钮,就会弹出打开文件对话框,玩家可以选择图片所在的路径加载到游戏里,背景图片只能选择后缀名 .bmp 的位图文件。(4)游戏规则说明书:当点击游戏说明按钮时,就会调用函数system()来直接打开游戏说明书所在的位置。4.5 排行榜模块游戏结束后,弹出该模块所在的窗体,自上而下,从第一名开始一直往下显示,最多显示10条已排序的玩家信息。显示的信息有名次,得分,玩家名称,游戏结束时间。 一次游戏结束,显示当前用户游戏的排名状况。一次游戏结束后一条包括玩家名称,玩家得分,游戏结束时间的信息和数据文件GamerOrder.xml 中先前的排行信息作为输入项,将分数进行比较,如果能入排行榜,就将其插入相应的位置,存入GamerOrder.xml文件中。如图4-6逻辑流程:获得当前游戏玩家的游戏分数;将当前玩家分数与历史前10名游戏玩家分数进行比较(游戏之初,将历史前10名玩家的分数设为0,其他信息为空);若当前游戏玩家分数大于历史前10名任意一名,则删除最后一名游戏玩家信息,将当前玩家信息插入到相应位置;显示分数及排名的前10,若排名不在前10,则不显示排名。图4-6 逻辑流程图4.6 游戏主控模块4.6.1主控模块构成游戏主控模块图片加载图片随机分布消去相同图片显示图片信息图4-7 主控模块构造图该模块是程序的最主要部分,进行加载游戏图片且随机分布到窗口上,然后响应玩家的鼠标点击,在玩家的鼠标位置的小图片上画光圈,并同时显示鼠标最后一次点击的图片的大图和相关图片信息。当玩家的鼠标的相邻两次点击的图片可消时,两图片消去,若不能则光标定位在最后一次点击的图片上。4.6.2加载图片算法和消图算法(1)加载图片算法从xml文件中获取图片信息的文件,包括小图的路径名,名称,大图的路径名,图片简介都放入VECTOR中。初始化游戏界面的游戏区域,由系统随机排列图片。当玩家开始游戏后,系统可以随机产生一组图片来初始化游戏界面来供玩家进行游戏。先将等级对应的图片总数从xml文件中读入到AnimalData类(图库类)的对象中申请64个AnimalData类前32个随机从AnimalData类对象中取数据,后32位等于前32位值;流程逻辑:将游戏区位置平均一分为二,从图片中选择图片按位置顺序依次放入前1/2位置,后1/2位置图片按顺序从前1/2位置中随机选择图片进行填充,前1/2位置的图片不能被多次选择。(2)消图算法图4-8 消图方式首先将界面划分成N行N列格子(N为偶数),再随机产生(N-2)*(N-2)/2对图片帖界面中去(除了首行首列末行末列),将每张图片所处位置用一个点来代替,有图片的点设置位1,无图片的点设置位0 ,假设点击的两张图片分别为p1、p2,用pWayBeg代表路径起始点,pWayCor1代表转第一个转折点,pWayCor2代表第二个转折点,pWayEnd代表终点,本算法分为3个大的步骤:(1) 相邻的两张图片(如图4-8方式一):首先要判断2个点是否相邻,相邻的2张图片肯定可以连通,将路径坐标设置为pWayBeg=p1, pWayEnd=p2,pWayCor1=pWayCor2=0;(2) 在直线上连通(如图4-8方式二):首先判断2个点是否再一条线上,分为水平和垂直2种。用一个循坏来判断2个点之间的点是否为0。并记录下路径点,如果不能连通则应该转为折线连通;(3) 折线连通(如图4-8方式三):首先得判断点击的2张图片不是同一张图片,然后判断折线相同,折线相同包括两种方式分别为:先纵向后横向:第一:从0列开始判断,从点p1.y+1到p2.y-1是否可以连通,可以的话转向第二步(不可以转向第三步);第二:判断当前2个点不空且不为p1、p2点,就跳出循环(转向第三),否则:就从第0列p1.y和p2.y这2个点分别向点击的(p1.x,p1.y)和(p2.x,p2.y)慢慢靠拢判断中间的点是否为0,如果不为0,则转向第三;第三:列数+1,再转向第一步,一直到列数为N-1;先横向后纵向:第一:从0列开始判断,从点p1.x+1到p2.x-1是否可以连通,可以的话转向第二步(不可以转向第三步);第二:判断当前2个点不空且不为p1、p2点,就跳出循环(转向第三),否则:就从第0行p1.x和p2.x这2个点分别向点击的(p1.x,p1.y)和(p2.x,p2.y)慢慢靠拢判断中间的点是否为0,如果不为0,则转向第三;第三:行数+1,再转向第一步,一直到行数为N-1。图4-9 逻辑流程结束语本文通过基于win32的游戏程序的设计和实现具体论述了什么是windows程序开发,以及如何在windows程序开发中使用stl技术。具体的工作如下:(1)通过实践详细探究什么是windows程序设计及其特点,对这项程序设计技术做出比较直观的分析和展望;(2)通过设计和实现基于win32的游戏应用开发,比较直观的展现windows程序设计。本文通过实例连连游戏的设计和实现在数据文件存储、时间控制、游戏配置、游戏主控等模块中,通过对windows各控件及一些常用的API函数的使用,来更加熟练的掌握windows编程技术,更加清楚windows消息驱动的内在含义。在数据存取模块中,通过利用stl技术在数据读取方面,使数据读取更加安全、快速。通过设计和实现基于win32的游戏应用开发,直接使用win32 API函数进行程序设计,采用C+面向对象语言对其进行良好的设计和封装,作者深深的体会到windows程序设计在设计图形界面的优势,以及如何使用STL技术在对数据读取的方面更加的方便、安全。由于时间仓促及能力有限,在研究基于win32的游戏应用时没有对网络编程方面进行研究。因此,本课题研究的下一步工作展望是,考虑连连看游戏的联机对战,以及如何提高游戏的可玩性。参考文献1 佚名.网络游戏开发师前景与现状EB/OL./edu/zygh/101662.html2 佚名.单机游戏的发展史EB/OL./redirect.php?tid=2288986&goto=lastpost3 佚名.WINDOWS程序设计的特点EB/OL./question/2243443.html4 佚名.windows消息机制EB/OL. /mzty/archive/2006/11/24/15619.html5 佚名.Win32程序模型EB/OL./zliner/archive/2007/04/22/1574464.aspx6 田宝军基于C+的STL编程思想J. 信息技术,2007年31卷12版7 葛建芳.c+模板库和代码重用J.南通大学学报:自然科学版,2006年5卷2期8 美Charles Petzold.windows程序设计M.北京:北京大学出版社,2004.9 王淑玲.C+STL程序员开发指南M.中国铁道出版社,200410 美Stanley B.Lippman.C+ PrimerM. 北京:人民邮电出版社,200611 美Bruce Eckel.C+ 编程思想M.机械工业出版社,200212 MSDN library .Microsoft Visual Studio 2005 Documentation13 Jim Beveridge & Robert Wiener .Microsoft Win32程序参考大全M.14 陈立鹏.基于Win32的单机游戏架构设计D:硕士学位论文.谢辞在本文即将结束之际,本人要由衷地感谢在我毕业设计阶段,乃至本科四年学习生活中帮助过本人的老师,同学和朋友们。本人要首先感谢导师黄昉菀老师。在整整一学期的学习、科研、设计中,黄昉菀老师给予了本人极大的关心和帮助。老师平易近人、治学严谨、知识渊博、诲人不倦,为课题的顺利进行作出很多贡献,在学术和为人上都作出了榜样。在老师的帮助下,本人的课题研究才能顺利开展,并取得一定阶段性成果。在此,本人要向她表示最真挚的感谢!本人还要感谢在暑期实习期间,厦门万策置业的邹峥工程师的热心指导,让本人在公司中学习了不少基础知识,为研究本课题奠定了基础。也感谢韦金志、陶其磊同学在实习期间的陪伴,正是因为你们本人才能拥有一个愉快而又有所得的实习经验。同时也完成了多个实践项目,正是大家的共同努力、互相帮助,才使本人毕业设计的研究有所成果。感谢福州大学图书馆的丰富资源,它的馆藏资源和电子资源是本文参考资料的及其重要的参考资料。在此也感谢Baidu强大的搜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高二物理教学经验总结与反思
- 银行高管绩效考核评定标准解读
- 宠物直播教育创新创业项目商业计划书
- 社区共享厨房与烹饪体验创新创业项目商业计划书
- 精密电子秤企业制定与实施新质生产力项目商业计划书
- 小学英语竞赛题库及模拟试题
- 木材初级加工废弃物无害化处理创新创业项目商业计划书
- 电商第三方电子签名创新创业项目商业计划书-20250415-181248
- 外架劳务分包合同与外架劳务分包合同范本6篇
- 2025年高考第二次模拟考试化学湖北卷参考答案
- 2025内初班语文试卷及答案
- 2025年甘肃省酒泉市瓜州县招聘村副职干部30人考试参考试题及答案解析
- 文库发布:《青鸟》课件
- (2025)时事政治试题库附答案详解
- 支行日常巡检方案
- 网络安全威胁建模规范
- 2025年西藏自治区事业单位招聘《公共基础》考试题库及答案解析
- 安全生产检查考核办法
- 员工考勤及请休假制度(2025新版)
- 石刻牌坊施工方案
- 2025中数联物流科技(上海)有限公司招聘考试参考题库及答案解析
评论
0/150
提交评论