赖勇浩(恋花蝶)的博客

Life is short , you need python .

用户操作
[即时聊天] [发私信] [加为好友]
赖勇浩ID:lanphaday
328602次访问,排名162好友190人,关注者233
网络游戏程序员,略懂python、C++;不太懂网络编程、数据库编程;不懂C语言、3D。
lanphaday的文章
原创 61 篇
翻译 17 篇
转载 12 篇
评论 590 篇
赖勇浩的公告
Google
最近评论
kernel1983:温习温习
肉包:前两天才看了developWorks上一篇关于元类的文章,快晕了。
沈崴:啊, 好翻译。
zhengyun_ustc:不错,__metaclass__
Test:Just tools.
文章分类
收藏
    相册
    MetaWeblog API
    编程语言
    TIOBE 流行度
    性能排名
    我创建的开源项目
    VisualPyTune
    友情链接
    CP(图形学)
    DarkSpy
    一刀
    丫头
    沈公,仙人也!
    超哥之奋起版
    风干的绿叶
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 游戏程序员谈GameAI收藏

    新一篇: 2008年游戏人工智能的5大趋势与预言 | 旧一篇: AIPU——游戏人工智能专用处理器

     

    游戏程序员谈GameAI
    本文选自《游戏软件设计与开发大揭秘》第九章,作者为:(美)Marc Saltzman 译者:何健辉 应光光 陈志远等。此书由清华大学出版社在2000年9月出版,现在已经不能在网上买到啦,无论是当当、卓越还是蔚蓝。有兴趣了解一下内容的,可以访问这个页面:http://product.dangdang.com/product.aspx?product_id=132644
     
    人工智能,简称AI,是指用计算机来模拟人的思维和行动。应用计算机或家庭游戏机游戏中,就会使玩家感到他所面对的敌人是同现实中一样拥有智能的。当然,这也是游戏编程中极具挑战性的问题之一。因此,本章内容仅仅是针对AI的,并不涉及程序设计一章中的所提到的其他问题。
      把AI单独设为一章的另一个理由就是应该对单人游戏引起足够的重视。随着多人游戏的不断发展,许多玩家担心制作者把大量的时间,财力和精力花费在如何协调游戏对多人游戏对多个人的支持的问题上,而不是去尽力的提高游戏的AI。但是如果游戏中的人工智能是可以预料的,或者做的一团糟的话,那么多数玩家宁愿在网上与真人对站了。游戏的关键就是要既能多人对战,又具有真实的AI,这样才能引起那些不能上网或更愿意独自战斗的玩家的兴趣。
      接下来是一些AI方面的专家,他们都在不同的方面有所研究,在他们的指导下,本章将讨论各种类型的AI以及游戏设计者应该如何逐步解决这个问题。
    1.     Firaxis Games公司的 Brian Reynolds
      Brian Reynolds 是 Sid Meier的高徒,他一直致力于PC上的热门策略游戏的开发,例如Colonization 和 Civilization2。现在,他在Firaxis Games公司任软件开发部的副经理。Reynolds的最新成果是Firaxis Games公司的Alpha Centauri第一版。“与通常的观点截然相反,要为电脑游戏做AI并不需要具有魔法,”Reynold这样说道,“你不需要有新奇的算法,不需要有网上的那些最新资料。你需要的只是一点创造力和恒久的毅力。”接下来将讲述他最喜欢的一些技巧与经验。
    不断重复的设计过程
      在游戏AI的设计中,首先要用到“交互设计过程”,以一种惯用的方式开始你的程序设计,例如让你的游戏中敌人的部队可以移动,尽管这样使用的算法也许会很简单。然后开始玩这个游戏,让它和你的AI进行对抗,由此观察它的动作。直到他做了一些蠢事(开始时应该用不了多长时间),接着就考虑以下问题:a.电脑做了什么蠢事------不如说,让坦克慢慢的穿过森林,或者只建造炮兵,其他什么都不做;b.如果是你的话,会怎样做(让坦克沿着公路走;建造一个完整的军队,包括步兵,炮兵,装甲兵以及空军);c.是什么样的信息使(或帮助)你做这样的决定的(进入公路费用最小;你已经有了一个炮兵部队,但是没有步兵)。之后返回去重新设计算法来组合这些数据。
      现在,再次开始你的游戏,观察其AI;直到他做了其他的蠢事,然后重复这个过程。不断的重复,再重复,这样这个游戏的AI就会变得越来越好的。“AI就是通过纠正错误不断学习的”,这是可怜人的名言。在你不断玩游戏和修改它的过程中,AI实际上是在积累经验以便在游戏中表现的越来越好。
      为了说明他的观点,Reynolds向我们讲述了他的一件轶事。那时他还是一个年轻的程序员,正在设计他的第一个游戏(Colonization)。他回忆道:
      第一次开始面临制作AI时,我有一点害怕。我的意思是,我的这个游戏,你会玩,知道如何移动部队,但是AI不知道怎样去做。我应该从哪里开始呢?我还记得Sid Meier建议我:我先教它如何玩一个回合开始。然后教它如何玩两个小时,再后来就该考虑教它如何玩10个回合了。
    从简单的开始
      从构造一些简单的模块开始。例如,策略游戏中一个非常有用的算法是告诉一个部队怎样从A点到B点,这叫做找路或过路算法。过去算法是一个非常适合于作为开始的工作,所要做的只是教一个部队从这里到那里,以后再考虑怎样决定目的地的真实位置。我并不是说写一个出色的移动算法是很简单的,只是说它是一个非常适合开始时做的一个简单的却也有足够难度的程序,这样使你以自己的方式来做以后那些更复杂的工作。一旦你完成过去算法的程序,你便可以做另一段程序了,用以决定部队应该移动到场景的什么地方,但不必担心他们将怎样到达那里。
      注释:找路指的是一个或几个部队从A点移动到B点,应该走哪条路径才能到达那里。像我们曾经注意到的那样,在较老的一些即时战略游戏中,部队有时会堵在某些地方,而有时他们会选了一条较长的或不合逻辑的路才到达目的地。
    加倍或减半某些值
      当刚开始做游戏时我还从Sid Meier那里学到了另一个精巧的技巧(就像我们所有的技巧一样,它既适合游戏设计,也适合AI),它是这样的:如果你有一个值或效果,需要调整,那么就将其加倍就减半吧。举个例子来说,比如你认为坦克的建造费用太便宜了,就将这个费用加倍。不要把费用从10加到11,然后使自己陷入根本无法辨别前后两者区别的苦恼中,从中解放出来吧。把它加到20,虽然这看起来有些荒谬,但是游戏中就这样做。这种方法会让你对效果的变化有非常清晰的感受,同时也显示出坦克费用变贵时游戏的变化。如果这时坦克费用显得太贵了,就把它调整到15。如果你认为电脑AI建造了太多的步兵部队时,就把它的建造能力减半。我记得我对某些东西不多的次数做了加倍与减半,本来认为这样的变化过大了,但是当再次加倍或减半后我竟然得到了我想要的效果。所有这一切又一次归功于使用了上面所讲的交互的过程。
      Reynolds以一个简单的建议来结束这次讲解:“试着运行游戏,看它如何运转,修改再重复这个过程。”
    2.     Ensemble Studios公司的Mario Grimani
      在去Ensemble Studios公司之前,Mario Grimani曾在Dominion的第7版:Storm Over Gift3中做某些方面的工作。现在,他即将推出的Age of Empires 2:The Age of Kings的常任AI专家。对一个AI专家来说,最重要的是什么呢?Grimani作了回答:
      ◆ 永远要记住,在做AI时的工作量并不总是直接和用户所感受到的成比例。
      ◆ 用重复的过程来完善AI。先实现一个大致可以运行的系统,测试它,改进它做的最差的方面。
      ◆ 使设计具有灵活性。如果你想不断的完善正在为游戏所做的AI,那么你必须能在这个过程中修改它。
      Age of EmpiresⅡ:Age of Kings的 AI允许通过一种易于使用的外部语言来控制计算机玩家的行为。计算机玩家能够与人对抗,也能够相互对抗。这样在游戏设计阶段让我么在修改AI的行为上有了更大的灵活性。也使得可以把AI的特色加入到最新发展阶段中。
      Grimani论述了几种不同的AI和在编程中遇到的一些问题:
      在游戏术语中,AI大致上是用来描述一类问题很广的解决方法,这类问题即可以是角色扮演类游戏(RPG)中去模拟人作为某个角色的行为,也可以是即时战略游戏(RTS)中的找路算法。在RTS类游戏中的主要的AI问题除了找路,团体AI和计算机对手的AI外,还有部队找路和部队的AI。计算机对手的AI本身也有好几部分:策略AI,战术AI,建筑布置,危险估计,地形分析等多方面。(注:我补充了部队编制,战术步骤,利益捕捉等。)
      一些AI的问题是非常具有挑战性的。任何一个有明确的数学解决的问题,都要比那种仅仅基于概念和抽象的问题更容易解决。不幸的是,人类的想法更像是去寻找那些能解决基于抽象问题的答案。
      Grimani用一个在制作RTS游戏中常见的障碍作为例子:
      对于人来说,判断一块地区时候容易防守简直是轻而易举的,对计算机玩家却不是一个小问题。然而计算机玩家能记住每个独立的部队的踪迹,而且它的统计能力远远高于人类。
      那么Grimani是不是认为基于万维网或局域网的游戏的发展会降低人们对更好的AI的需要呢?他是这样回答的:
      多人游戏正在飞速发展。这是因为现在越来越多的人能够享受到快速的因特网。但是并不意味着多人游戏将会取代AI。这实际上是两种不同的游戏体验。我个人很喜欢多人游戏,而且已经玩了好几年了。然而,这并没有使我对单人游戏失去兴趣。
      Grimani和Ensemble Studios公司的其他成员正在为Age of EmpiresⅡ:Age of Kings在2000年冬天即将发行的版本做准备。
    3.     CyberLife Technology公司的Toby Simpson
      Toby Simpson是CyberLife Technology的创意主管,负责所有的Creatures游戏的设计。CyberLife Technology的总部在英国剑桥。作为1号主角,2号主角以及3号主角的制作人,他做过各种各样的AI,因为动物系列的整个重点就在于如何支持并教导这些虚拟的宠物。一直想弄清楚动物中的那些可爱的小精灵为什么如此逼真,以至于每一个都有着不同的个性,具有如常人般的感情和要求?下面就是Simpson为这本书所写的关于人工智能方面的一些观点。在文中,他详细讨论了成功地为无精神的物体赋予生命的四个原则:
      最重要的一点是要突破那种把“AI规则化”的思维框架。以黑箱式的操作来实现的AI是非常肤浅的,同时也充满了矛盾和错误。在娱乐产品中要建立起合适的系统就必须以一套全新的方式来解决这种问题。无论如何,为了把这套思想精炼成为可以记住的方法,我的建议如下:
    建模,而不是仿效
      建模与仿效是两种模拟的方式,但却是对解决同一问题的两种截然不同的方式。仿效是试图使其看起来非常想另一种事物,而建模则是试图使其就是那种事物。一个模型能够抓住一个系统内在的基本结构和运转机制。建模和仿效的最终目的的是相同的,但建模有其独特的优势:
      ◆ 在仿效的系统中,智能与自动化几乎没有任何区别,也就是说,系统中的参数和所表现出来的行为之间没有任何逻辑关系。
      ◆ 模型提供了“命令的随意性”,因为它并不是一个系统的抽象表示;例如,模型系统的构造是基于内部,而仿效系统的构造则是基于内部,因此它永远都不可能是一个很真实的模拟方式。
      ◆ 模型是可变的,其组件是可交换的,并且它们均能被打碎而用一种新的方式进行重组,这在仿效系统中是不可能实现的。
    构思结构,而不是行为
      尝试着不用自上而下的方式来看待问题。把你希望出现的行为放在结构上所允许的地方。这样,即使你不是完全理解系统何如工作的,也能完成它的功能!当你把计算机看作一个机械的容器而不是数据的处理机时,你就已向正确的方向迈出了坚实的一步。现在很多人从一开始就在构造基于“自动管理”的游戏引擎(显然管理这个词现在常被滥用,一种面向对象的设计方法的延伸),因此,他们把重心从代码转移到数据上。人们普遍认识到要建立一个供娱乐的复杂虚拟世界的话,不改变制作方法实际上是不可能的。
    大自然会给你极大的帮助
      到现在为止,我们这个星球上拥有最惊人的计算能力莫过于人脑。人脑能用一套独一无二的方法解决问题,还能归纳和直接从正反两类行为的区别中进行学习,这是从来没有在计算机中出现过的。而且经过研究,人脑是非常简单的,有具有100,000种遗传因子的十万亿个基本细胞组成。我们了解这些细胞,但却无法了解为什么他们按照某种方式安排后,就能让我们成为有感觉,有思维的人。十万亿个简单的细胞协同合作就产生了知觉,这种大规模的复杂组合是前所未有的。但是却没有一个具体的细胞负责这种组织活动。这不是“有主导统”。单从这里我们就有太多的东西可以学习!试想一个如果我们能建造一座桥或一个坦克的模型,那我们就能为生物上的一些模块建造模型,接着用这些模块就可以制作出真正的人工生物。你想要制作虚拟世界中近乎真实的人工角色,为生物的过程和结构建模也许是能够达到那种复杂程度的唯一途径了。我没有对我们的大自然母亲37亿年的历史进行过研究,手头也没有一个精妙的程序可以去再造一个大自然,使它像我们已有的这个一样。
    思考并使自己专业化
      没有专业软件开发实践经验的话,你是不可能开发出专业游戏的!如果你的工程因某些问题而停下来,大多数时候你是更本找不到一种简洁的或最佳的方法来解决它的。一定要专业!如果你还没有一个QMS(质量管理系统),就自己定义一个。把计划,模块,测试,效果设计和规范的文档全包含在内。坚持工作,不要设法去抄近路,要知道那些跳过的问题会经常回到你的面前的。
      还有很多关于Toby Simpson和他们正在制作计算机生物和AI方面的资料,因此记得一定要来访问下面的站点:www.cyberlife.co.ukwww.creatures.co.ukwww.creatures2.comwww.cyberbiology.org
    4.     EA Sports公司的Scott Orr
      作为EA Sports公司的制作主管,Scott Orr不仅协助Madden足球系列产品在8年前一举成功,而且参与了其他著名的EA Sports产品的开发,例如NHL Hockey,Andretti Racing,NASCAR Racing,NCAA College Football,March Madness和Knockout Kings。在准备本章的过程中,Orr的名字无数次被当作“AI首席专家”的代名词。
    真实感
      “首先要记住AI需要的是真实感,”Orr提醒道。我这样说是因为玩家在游戏中的一举一动都希望尽可能贴近现实生活。这也是为什么EA Sports游戏的玩家不管是智能,速度还是投掷,追捕能力都有不同的级别供选择。我们也愿意与职业选手或教练合作,正是这些伙伴给了我们真实的感觉。我无法记住有多少次John Madden来查看我们的游戏制作情况,然后认真地走到白板前画图来告诉我们实际运动中是什么样子的。
      就是这种一丝不苟的精神使EA Sports的游戏在独树一帜,相信Orr吧,如果一个人没有钱,没有得到像John Madden那些的建议,没有现在这些职业运动员,怎会做出如此真实的体育游戏呢?他接下来的两个观点并不涉及任何专业的技术。
    真实与娱乐
      “另一个你必须记住的是要在游戏的娱乐性和真实感中找到一个平衡点。”Orr说道。随着计算机AI的飞速发展,实际上我们已经能够使计算机是无敌的了。当然这样就使游戏极具挑战性,却失去了娱乐性,我们也因此失去用户。很多设计者使用一些欺骗技巧使计算机更具有竞争力。他们能知道玩家如何移动,从而使计算机玩家可以比人移动得更快。而EA Sports的游戏则永远不会用那种手段来达到目的。
    简化AI编程
      最后还有一点,就是从代码方面来看,当你设计计算机AI应该保证其简洁性。Orr告诫我们:“你用的计算越多,那么处理器的压力就会越大。”究竟游戏会受到什么影响呢?
      这会降低游戏中帧的频率从而累及整个游戏的吸引力。要使用索引表来管理数据以便加快游戏速度。最终,你会发觉游戏更具活力,而且AI也更加完善了。
      体育游戏的AI编起来会比其他游戏更困难吗?Orr是这样回答的“从AI的角度来看,体育游戏比其他游戏更难却也更简单。”原因如下:
      我们设计游戏时是基于已知的规则和已有队员的行为,因此从某些方面来说,更容易去确定我们需要做的样子。但从另一方面来说,用户都很了解真实的活动,他们的期望当然很高,这就使得在设计AI的工作方式时比其他的游戏更难的多。你不可能因为无法让游戏正常运转而干脆把计算机玩家的行为简单化。只要“真实”比赛有的,就必须在游戏中出现,否则,玩家们会感到比赛总是缺了点什么。当我们使用更快的处理器时,AI的能力会得到提高。相对与仅仅5年前的水平来说,不论是在游戏调度上还是在与队员的默契合作上,现在计算机玩家所能做到都是十分惊人的。如果我们有更好的硬件设计和更多的有关游戏制作的经验的话,制作的AI就会更好。
      我们提醒Orr ,这本书针对那些刚出道的游戏设计者,他们也许想用共软件,自由软件甚至是零售的不知名软件来编AI。当问及如何用C++来设计AI时,Orr给我们一些建议:
      我所说的就是通过实践来进行完善。尝试不同的方法并不断测试。最后,你会找到一种比你刚开始时做的要好得多的方式。开发一个常用的程序库,通过这个库(希望这些程序是高效而又简洁的)能够更快地完成以往的那些工作,同时如果要保证帧的速率和游戏的速度,不要忘记使用索引表,其好处是能大大减少运算量。
    5.     Marc Aubanel
      Marc Aubanel也在EA Sports公司工作,它具有着最佳销售业绩的国际足球游戏FIFA系列产品的制作者(包括World Cup)
      Aubanel认为在团体体育游戏中,AI方面是非常容易使用骗术的,因为这个程序要同一时间控制很多队员(一个足球场上有22名球员)。“人类有着与生俱来的直觉,使他们知道该做什么,” Aubanel说道,“计算机却无论如何也不会有这样的直觉,因为你只能教它如何去模拟。” Aubanel认为给棒球游戏编写AI是所有体育游戏中最难的,因为:
      首先,用户总是下意识地对球员当时应做的行为有一个预想,如果AI所作的与预想的不同,那么AI就会被认为是最失败的。例如,球被球员打向左外野,外场手一旦得球后必须做出不同的决定,该如何处理这个球呢?打向本垒?二垒?三垒?还是更本不抛出去了呢?其次,编程时就需要做出各种不同的决定,很多因素都要考虑进来,像垒上有多少人,多少人出局了,等等。
      “而足球,” Aubanel说道,“所有的过程,空间,一切行为都是为了唯一的目标。”虽然他坚持认为编制足球AI同样也有很多困难,但是足球游戏的智能通常会比棒球游戏更容易模拟。在谈到FIFA系列中AI的能力时,例如在FIFA99中,Aubanel说调试过程中一种方式就是让球员对着守门员射门,然后统计有哪些该守住的球却射进球门,有哪些该射进的球却守住了。
      (空气注:我的思路是这样,可以换一个角度考虑,根据守门员的具体能力和当时的比赛状况让其做一个扑救行为,利用这个生成的扑救行为的具体参数与来球做一个物理接触生成结果。也可根据大量的实验生成一组经验数据用以实际模拟,这减少了处理器运算量,也增加了可行性。这个模型应该是更为合理的。)经过仔细的考虑就能确定出更真实的折衷方案。把足球队员放在场上相应的位置并不难,但难的是让他们知道为什么在那个位置(空气注:球员职责------AI决定进攻时该干什么,防守时该干什么,有球时该干什么,无球该干什么,位处球前方该干什么,位处球后方该干什么等等------一系列行为的总结系列表),什么时候坚守这个位置,什么应该用什么战术,通俗一点说,就是让球员们有一种位置感(空气注:位置、思考、行为)
      当场上出现了红牌时,会有队员被罚下场,这时AI的另一个挑战就是让球员来弥补这个损失。“他们必须响应地调整自己的位置,来补上这个空缺。” Aubanel说。
      编写AI的最好方法是在一个测试环境下按下面的原则来作:
      当我们制作FIFA的AI时,没有任何图象或音效。我们希望只用一个平坦的绿茵场,使我们专心于数据的测试,这样才会没有其他的干扰。然后我们将各种颜色的箭头和线段从队员引出来,以便说明他们的AI行为——如传球,跑动等等。因为一切调试都是可行的了。如果我们不这样做的话,那么AI中的错误只有编程人员才能知道。这种做法使得设计队伍中的每个人都能发现了解任何可能出现的问题。在这个环境中,我们能够不断调整,大量的调试。
      “不要把真实感和娱乐性搞混了。” Aubanel告诫我们。
      最好AI看起来极其真实,但这其实不是真实的,因为它是游戏。我们不得不破坏物理现实中的许多规律,而不是遵守这些规律。举个例子吧,一个真实的球员要跑过整个球场至少需要18秒,而在FIFA中,却只需要一半时间,因为18对于一个游戏来说实在是太长了。
    6.     Monolith Produtions公司的Jay Wilson
      作为Blood and Blood:Plasma Pak的设计负责人和Blood2:The Chosen的工程领导人,Jay Wilson坚信AI是3D动作游戏设计中最重要的领域之一。
      他认为在游戏产业中AI已经有长足的进步,在这方面有很多优秀的作品,如Half-Life,Unreal和Star Craft,但他也同意本章前面所说的观点,并不是每个人都喜欢联网游戏的。他用他的父亲作为例子,他父亲玩游戏只是为了放松,而不是为了竞争(这种竞争在多人游戏中是常见的)。
      Wilson说道,如果为第一人称视角游戏制作AI,游戏中的角色不必与现实中的人一模一样,但一定要是一个多人死亡竞赛中的对手。Wilson是这样解释的:
      现在的射手具有很强的AI,但行为却像一个完美的神而不是真正的人。当然做到这一点并不会太难。但是当我玩这类游戏时,我更希望面对的AI的行为就像是一个人所做的一样,会跑向遮挡物躲闪,会把武器掉在地上,射击时没有打中目标,等等。
      Jay Wilson将成为Blood2第一个正版的项目主管,这一游戏将在1999年晚些时候发行。
     

    发表于 @ 2008年01月10日 19:55:00|评论(loading...)|编辑

    新一篇: 2008年游戏人工智能的5大趋势与预言 | 旧一篇: AIPU——游戏人工智能专用处理器

    评论

    #sheep 发表于2008-01-12 00:14:19  IP: 219.136.175.*
    好文^^
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 赖勇浩