网络 游戏开发的灵魂 数据结构 与算法 转.docVIP

网络 游戏开发的灵魂 数据结构 与算法 转.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络 游戏开发的灵魂 数据结构 与算法 转 文章来源:电脑报【2007年17期】文章标题:网络游戏开发的灵魂--数据结构与算法 一、游戏程序的灵魂--算法 本系列文章的主题是网络游戏的程序开发,那么,程序是什么呢?一条著名的公式给了我们答案: 程序=数据结构+算法 程序语言(如C++)是一种工具,而算法是程序的灵魂。 数据结构和算法在游戏程序中应用得很广,可以说无处不在。而且一般游戏对程序的效率要求很高,因此能否成为出色的游戏程序员很大程度取决于能否编写出高效的算法。以《魔兽世界》为例,在游戏中,猎人的宠物跟敌人一碰上,战斗便一触即发。在程序里是利用碰撞算法来判断是否有碰撞发生的。当然,像《魔兽世界》这类游戏不需要精确的碰撞检测,只要很简单的碰撞算法就能应付了,但像一些飞行模拟游戏就需要精确的碰撞检测了;现在换一个场景,你在如画的游戏世界里休闲地散步,很不幸,一只妖怪盯上了你,而且它足够聪明,它会选择一条最短的路径向你杀过去。为什么这只妖怪那么聪明?这就是A*(读A星)算法的魔力,A*算法是一种寻找最短的路径的寻路算法。这类例子在游戏中比比皆是,大家在玩游戏时可以多加留意。 目前为止,被设计出来而又应用广泛的算法有很多,如贪婪算法、遗传算法和一些常用的排序算法等等。下面,向大家介绍游戏中用得最多的算法--排序算法。 我们知道,在游戏场景里,在近处的游戏角色会遮挡住远处的角色。要做到这一点,一种方法是可以把所有的角色按它们的坐标值进行排序,然后以远到近把玩家放入到游戏场景里。常用的排序算法有四种:选择排序、冒泡排序、插入排序和快速排序。以下我们仅以最简单的冒泡排序法为例来加深大家对算法的理解。 对一组有N个元素的数组,我们把它的每一个元素想象成一个泡泡。从最底部的元素开始,将各相邻的元素进行比较,若下面的元素大于上面的元素时,则把它们的值进行交换,即较大的元素将往上冒泡。如此类推,我们将要进行N-1次的冒泡。templateclassT voidbubbli_sort(Ta,intn) { inti,j,last_pos; i=n-1; while(i0) { last_pos=0; for(j=0;ji;j++) { if(a[j+1]a[j]){ Ttemp=a[j]; a[j]=a[j+1]; a[j+1]=temp; last_pos=j; } } i=last_pos;}} 二、游戏数据的大管家--数据结构 数据结构是什么呢?这是一个很抽象的概念,没有统一的名词解释。你可以把它理解为数据在计算机中的组织形式。经典的数据结构,在网络游戏中都能得到体现。下面我们为大家举例并介绍。 1.道具包管理--线性表 在任何网络游戏中,你的道具包里也会放着许多珍贵的道具。在程序中需要把这些数据组织起来,方便管理。使用线性表可以简单方便地做到。线性表是一组元素以线性的结构组织起来,如(e1,e2,…en)。线性表一般分为数组与链表两类。 数组里的元素以连续的内存空间存放,因此可以用内存地址检索到对应的数据元素,访问元素很方便。但如果要进行插入/删除数据元素,就要做一些内存移动了,效率比较低。而链表的数据元素存放在任意的物理内存位置,相邻的元素以指针作为链扣串连起来。如单向链表,元素e1有一个指针指向它的后继节点e2,这个指针就是它们之间的链扣。当进行插入/删除数据元素时,只要改变相应的链扣就可以,不需要做内存移动,效率相对于数组要高。 2.任务管理--队列与堆栈 我在开始玩《梦幻西游》时,在城里走了几圈就接了满身的任务。这让我很烦恼,不知从哪个任务开始做起,这时我想到了队列。队列是一种先进先出(first-in-firstout,FIFO)的数据结构。就好像是在银行里排队,排在前面的先服务。每次接到任务就把该任务压进任务队列里,要做任务时就从任务队列里取出一个任务,这样哪个任务先接到就先做哪个任务。 也许你不喜欢这样方式,你想做一个赏金猎人,哪个任务报酬多的就先做哪个任务。这样普通的队列就满足不了你的需求了,你需要的是优先级队列。优先级队列在插入元素时,优先高的元素插入队列前面。把任务的报酬设成是优先级数据,那么你每次在任务队列里取出任务时,就能保证这个任务是你现接的任务里报酬最高的。 堆和栈在概念上不大一样,这里所说的堆栈是指栈(stack)。栈是一种先进后出的数据结构。就好像是叠盘子,叠在最上面的盘子最先拿来使用。队列和堆栈可能是使用频率最高的数据结构了。在匹配表达式应用中,堆栈发挥了巨大的作用。还有经典的汉诺塔问题,如果没有堆栈的帮助,你可不知道要搬碟子搬到什么时候了。这里我想举一个Word的例子,这个例子比较形象。谁都会有失误,在Word里发生了误操作一点也不需要惊慌,因为Word有撤消的功能,可以撤消你之前的操作。把用户的操

文档评论(0)

beifanglei + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档