魔兽AI的控制与制作原理.doc_第1页
魔兽AI的控制与制作原理.doc_第2页
魔兽AI的控制与制作原理.doc_第3页
魔兽AI的控制与制作原理.doc_第4页
魔兽AI的控制与制作原理.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对战AI经常会看见有人抱怨,刷出来的小兵,没冲到目的地,就自己跑回来了。要解决这个问题,其实很简单:第一:腾一个电脑玩家出来(如果是对抗类的,需要2个)专门用于刷兵,该势力,可以和玩家需要守护的基地(或是守护别的什么玩艺儿),同属一个电脑,切忌用中立刷兵!第二:每隔一段距离,画一个区域,“单位进入XX区域,进入的单位拥有者XX,命令进入的单位攻击-移动到目的地”。第三:与第2点二选一即可,个人建议用方案2。“每隔X秒,命令玩家N的单位攻击-移动到目的地”。第四:目的地必须存在兵兵可攻击的建筑 / 单位,等。而且这些“靶子”必须足够大或者足够多。假设“靶子”只有一个城堡(标准大小),一群兵冲过去,吧城堡围成一圈,他们是没问题,在那边砍啊砍,之后过来的兵,挤又挤不进去,挤不进去,外面又没东西打,人家当然是回家渡假去了。第五:如果你非得只弄一个小小的“靶子”,也不是不行,在靶子的位置,画一个大点的区域,“当单位离开XX区域,单位的拥有者是玩家N,命令离开的单位攻击-移动到某点(指该区域中心),于是呼,多余的兵就在这个区域里反复跑来跑去,见人就砍。当然,这个区域要够大。做到以上几点,就能避免怪物回跑了。.自动释放技能经常有人问,怎么让英雄、单位,释放技能。其实这个不需要繁心。除去通魔(chennl 我拼错了没?)技能,和纯触发器技能(我至今没见过)。所有的触发器技能,都需要一个原版技能,或是一个被修改过部分数据的复制版技能,作为引子。普通的变版技能,就更不用说了。其实这些技能,电脑都认识,他自己会在必要的时候释放。有人会问,为什么我看了半天,他都不用技能呢?不是不用,时候未到|不过还是要几点事项要注意下:1、不要用通魔作为触发器技能的引子。2、除非是被动技能,主动和自动技能,尽可能不要反向设置,即:本来是对敌人释放的,改个负数,对友军释放了(反之亦然),这些,电脑是不认识的。3、只能对他人释放的(比如圣骑士的圣光)改成,允许向自己释放后,电脑依然只会向他人释放。4、有些范围技能(例如流星雨、冲击波),要求技能范围内有3个以上目标,电脑才会释放。5、确保技能的科技和单位的魔法值,不会使得技能无从释放,例如技能要100魔,单位只有50魔。或是该技能还没被研发6、一个中立(但是刷兵不建议使用中立,上面已经说过了)或者电脑玩家,都会使用技能,但是空玩家的单位不会使用技能。(空玩家:不是中立的、不是游戏者、也不是已开启的电脑),说的简单点就是,未开启的玩家,也不会使用技能.电脑买东西不要想着让电脑去商店买东西,那是没有意义的,反而增加AI的复杂程度你完全可以这么做:命令电脑跑到某商店旁边。创造某物品给与该英雄。扣除他的money(其实这一步做不做无所谓,钱对于电脑,也是没意义的)。然后继续冲锋陷阵。电脑英雄:英雄,是一个非常复杂的复合体跑位、技能、道具、药水、回城、复活接下来,我们就借用现成的教材,说说英雄的智能。不要觉得接下去的教材是3c的,其实都一样,你吧地形旋转45度,不就是DOTA的格局里嘛(邪恶的微)教程中含有英雄跑位、购买物品、学习技能、逃命回城,玩家退出托管,等等是居家旅行,杀人灭口,必备材料。 AI制作(上)1.一些基本概念 如何增加触发器组、触发器?切到触发器Editor窗口,单击New,选择Category即新增一个触发器组,选中这个新建的组,单击右键,选择New触发器即可新建一个触发器。 触发器的组成。一个触发器分成3部分:Events(事件)、Conditions(条件)、Actions(动作)。举个例子,你按下电灯开关键是个事 件,条件是有电,动作就是灯亮了。事件是触发动作的原因,条件是动作的约束,大概理解成“因为而且所以”就可以了。如何增加一个变量?切到触发器Editor窗口,单击Edit菜单,选择最后一个Variables(变量),在弹出的窗口中单击Edit,选择New Variable即可。变量就是临时存储数据或数组的地方,在AI控制中要用到的变量很多。同时变量也是比较容易出错的地方,很多逻辑错误都源于缺少变量或变量重叠。举例来说,A包含在甲和乙变量里,当你命令甲变量去做一件事的同时命令乙变量去做另一件事,恐怕A就不知道该干嘛了。 区域(Rect)。切到编辑器主窗口,单击Layer,选择Rect,你就可以在地图上看到一块浅蓝的四边形区域。区域经常用于Events的判定,比如 某个单位进入某个区域,然后怎样,也用于在这个区域上的单位统计,比如某个区域上有多少单位等。同变量一样,区域重叠或混乱很容易造成逻辑错误或死循环, 要谨慎使用。在主窗口单击Window,选择New PaletteRects,就可以在地图上创建一个区域了。按一下空格键取消区域创建,双击创建好的区域可改名字。其他。触发器里的各种语句都可以通过Ctrl+C、Ctrl+V、Ctrl+X进行复制、粘贴、剪切等操作,当然,事件语句只能被粘贴到事件类别下,其他亦然。Shift连选,Ctrl单选,其操作与Windows的一些基本操作别无一二。2.前期准备与英雄选择如果你加上电脑,在没有AI的情况下,电脑控制的白羊或黑猪(玩家选择英雄的单位)只会呆呆地站在那里,所以启动AI的第一步就是让触发器替电脑选择英雄。由于电脑谈不上喜欢不喜欢、熟悉不熟悉哪个英雄,全部随机,所以只要让触发器模拟进入随机选择的区域选出英雄即可。在本例中,首先设置两个Boolean(布尔,即真与假)型变量:AllowChange和AllowFree。如果玩家选择了只能随机选择英雄,即 AllowFree=False,将所有与Player6(光明城堡方)同盟的玩家Move(移动)到光明随机英雄区域,与Player12(黑暗城堡 方)同盟的玩家Move到黑暗随机英雄区域,剩下的让原地图自带的英雄随机选择触发器去干。这个选择最简单,不用增加任何触发器即可选出英雄。新建一个触 发器组AI,在这个组下新建一个触发器SelectHero。如果AllowFree=True,即可以自己选择英雄,就跳转执行SelectHero这个触发器,这样做的目的主要是为了区别原地图触发器和后添加的AI触发器,方便以后修改(在跳转前要延时10秒,主要是给玩家以选择自己熟悉或喜欢的英雄的时间,否则触发器替电脑玩家选英雄可是快得很,将你的英雄抢跑了可别哭喊)。在SelectHero触发器中,将所有正在游戏的Player(玩家)加入到一个临时的Player Group(玩家组)中,将这个玩家组中的每个玩家都进行一次条件判断,条件是:这个玩家既不是Player6,也不是Player12,而且这个玩家的 控制者是电脑。If(假如)这3个条件中有一条不成立,Else(否则)Do Nothing(什么也不做),这个一般都是真正的玩家,触发器就不管他们了。 假 如这3个条件都成立,Then(那么):新建一个Unit(单位)变量AIUnit,使AIUnit等于这个电脑玩家(设置单位变量=选定玩家的函数只有 两个,即Random Unit From Unit Group和First Unit of Group,而在此处由于选定的玩家只会是一个,所以极端地讲,后者的执行效率要高于前者)。然后新建一个布尔变量:AIinLight,再判断这个电脑 玩家是否与Player6同盟。如果是,让AIinLight=True;如果与Player6为敌,也就是与Player12同盟,让 AIinLight=False。再在AI组下新建一个触发器:RandomAIHero,做完AIinLight变量的判定后跳转执行这个触发器。在RandomAIHero触发器中,上文还提到一个布尔变量:AllowChange,即是否可选对方英雄,在现在就特指电脑能否随机选到对方的英 雄。假如AllowChange=True,即可选对方英雄,那么建立一个Integer(整数)变量AIRandomHeroID,让这个变量等于1到 26之间的一个随机数(所有英雄)。如果AllowChange=False,即不能互选英雄,那么再看前边的AIinLight变量。如果 AIinLight=True,即玩家在光明一方,那么让AIRandomHeroID等于1到13之间的一个随机数(所有光明英雄);如果 AIinLight=False,那么让AIRandomHeroID等于14到26之间的一个随机数(所有黑暗英雄)。 为了防止发生重复选择英 雄的错误,这里还要加一个判定。在原地图中为每个英雄的选择都设置了一个加Array(角标,126)的布尔变量Occupy,一旦这个英雄被选择了, 这个变量就为True,否则为False,所以要先检查这个变量。如果这个变量为False,即此英雄还没被选择,那么可以进行选择英雄;否则重新启动本 触发器,再次随机出一个数字,直到随机出的数字所代表的英雄没被选择过。一切顺利,随机出来的数字所代表的英雄没被选择,那么根据这个数字把AIUnit(也就是电脑玩家)移动到与数字相对应的英雄选择区域中,然后就是原地图英雄生成触发器该做的事了。 至 此,用触发器模拟玩家选择英雄的过程全部结束。简化这个过程来说,那就是:如果必须随机,那就把电脑放到随机区域。如果可选择,那就根据条件出随机数把电 脑放到相应英雄选择区域。如果可互选英雄,则随机数是1到26;如果不可互选,则随机数是1到13或14到26。如果你要根据实际地图情况做的话,注意千 万要有英雄是否被选择的判定,否则很可能出现选择单位没了英雄也没出来的尴尬局面。3.英雄配置在原地图里有Hero Selection Light和Hero Selection Dark两个触发器组,分别用来执行光明与黑暗英雄的创建步骤。每个组里各有13个触发器,每个对应一名英雄。单击光明组里的第一个触发器,事件是一 个单位进入1号英雄选择区域,条件是这个单位是光明选择单位或黑暗选择单位(因为可以互选英雄),动作的大意是假如是光明选择单位,创建一个圣骑 士到GoodPlace(区域)。这里要新建一个Unit Group(单位组)变量LightGroup,将最后创建的单位(也就是圣骑士)加入到这个组中。假如是黑暗选择单位,创建一个圣骑士到 BadPlace(区域),再新建一个单位组变量DarkGroup,将最后创建的单位加入到这个组中。然后判断这个单位的控制属性,如果控制者是 User(玩家),那么新建一个单位组变量UserGroup,将最后创建的单位加入这个单位组中,否则,也就是控制者是电脑,那么把最后创建的单位加入 新建的一个单位组变量ComputerGroup中。然后按这个过程把其他的25个英雄也依次做一遍。这么做的主要目的是将光明、黑暗、玩家、电脑玩家分 别加入相应的4个单位组中,以方便将来的控制和使用。 另外,如果是玩家,你还可以给他几件初始装备或物品,本例只给了重生架和一瓶生命水。电脑玩家当然也要给,但考虑到可能经常会对电脑拥有的物品进行调试或更改,所以不宜把给电脑物品的触发器也做到里边来,否则一旦改动就要改26次,累也累死了。在AI组下新建一个触发器HeroItem,在将电脑玩家加入ComputerGroup单位组后跳转执行HeroItem,这样有什么改动只需在HeroItem里改一次即可。在HeroItem触发器中,由于3C地图分光明和黑暗两方,所以注定会有两种回城轴。光明用黑暗方的回城轴就会跑到敌人的重生点 (BadPlace),反过来就回到光明的重生点(GoodPlace)。所以在游戏中也不要做这样的傻事:仗着闪避或无敌跑到敌人家里买个回城轴想溜回 城那只会让你死得更快,其他的物品和装备黑暗和光明是没有区别的。有鉴于此,在给电脑玩家的物品时也要区别对待,首先判断最后一个创建的单位是否在 LightGroup里。如果在的话,再看看这个单位的Melee AI(战斗AI),也就是你在创建游戏时选择电脑对手的AI水 平Easy(简单的)、Normal(中等的)、Insane(疯狂的),对应3种不同难度各给予不同的物品,只是要注意分清回城轴的区别。这里建议 两种回城轴分别起两个名字,像本例,男厕手纸和女厕手纸,简单又好记为了以后制作购物触发器的简单,这里给的物品多是“不动产”,只有治疗守卫、重生 架和回城轴属于易耗品,而且一次给齐,省得以后还要判断环境买物品。如果你以后搞清了AI购物部分,自己再尝试着添加,制作出复杂的购物触发器,目前就只有让电脑作弊了。如果你以后还需要对不同的电脑AI制 作不同的战略战术,那么在这里最好新建6个单位组变量:LightLowAIGroup、LightNormalAIGroup、 LightHighAIGroup、DarkLowAIGroup、DarkNormalAIGroup、DarkHighAIGroup。将光明与黑暗 各3种不同的AI加入这6个组里,用不上也没什么,要是用得上也很方便。AI制作(中)一些图片省略.AI制作(下)7.技能学习没有技能的英雄,与杂兵几乎没有任何区别,电脑玩家可不会自己加技能,所以也要做触发器帮助电脑学技能。判断电脑玩家能否学技能的事件有1个:电脑玩家 升级了;条件有1个:电脑玩家的技能点不为0。在游戏刚开始,电脑玩家虽然有一个技能点,但只能作为条件,事件要靠其他手段来学触发,想靠升级作为触发条 件加技能是以后的事了。新建一个触发器HeroFirstSkill,事件是:有个单位进入LightHeroStart或 DarkHeroStart区域。条件是:这个单位在ComputerGroup组中而且技能点不为0。动作是:假如这个单位是圣骑士,那么学专注光环技 能;假如这个单位是大魔法师,那么学召唤水元素技能。依此类推,这里没什么可以取巧的办法,老老实实每个英雄都做一遍吧。不过这还不算什么,才学一个技能 而已新建一个触发器HeroUpSkill,事件是:一个单位升级了;条件是:这个单位在ComputerGroup组里且技能点数不等于0;动作部分嘛, 就把上个触发器的动作部分复制过来,然后再把每个英雄的技能都补齐。HeroFirstSkill触发器是英雄在初始时要升什么技能, HeroUpSkill触发器是英雄每次升级要升什么技能,注意区别。另外注意一下HeroUpSkill触发器里技能的顺序问题,这个顺序决定了电脑玩 家学习技能的顺序和主次。以圣骑士为例,他的学习顺序是:变身、专注光环、神圣护甲、神圣之光、重击,其中变身是6级才能学的终极技能,那么把它放在第一 个,让电脑玩家优先学习此技能。如果是等级原因不能学此技能,那么就会学习下一个技能专注光环,然后以这个规律依次学习。按这个顺序,圣骑士到了30 级,重击也不可能学到,因为技能点都分配在前几个技能上了,也就是说,电脑只有在这个技能不能学的情况下才会学下一个技能。如果你认为某个英雄的所有技能 都很重要,那只有取随机数学习了要小心取了随机数后偏偏相对应的技能不能学,所以不妨将技能分两组,随机学其中一组,再按顺序学习这组中的技能。不过 这种方法过于复杂,不建议这么做。8.召唤物水元素、阴影狼这些召唤物在无敌可攻的情况下,往往就会在原地休息,无所事事,因为它们既不是英雄,也不属于任何一个单位组,所以也要用触发器加以控 制。新建一个触发器SummonUnitAttack,事件是:一个单位召唤出了单位;条件是:召唤者属于ComputerGroup;动作是:如果召唤 者与Player6同盟,那么命令召唤物Attack-Move to到黑暗方主基地,否则命令召唤物Attack-Move to到光明方主基地。这里要注意,如果召唤物本身还会召唤,那么这个触发器对召唤物召唤出的单位是无能为力的,不过好在这种情况较少见。另外,从尸体上召 唤出来的单位并不算Summoned unit(比如地穴领主的腐尸甲虫技能),因为触发器好像并不能控制这些单位。9.玩家退出托管在原地图设置中,当有玩家退出时,触发器负责将其英雄共享给其他同一势力的玩家共同使用,同时按英雄等级把这算成金钱连同其本身拥有的金钱平分给同一势 力的其他玩家,既然现在要做玩家退出后电脑托管这件事,自然需要把这些触发器先屏蔽掉。在本例中,这样的触发器一共有4个,都在Conditions触发 器组下,名称为PlayerLeft XXX。新建一个触发器PlayerExit,事件是:除了Player6和Player12以外的任意玩家退出游戏;条件没有;动作是:把所有退出游戏的玩家 控制的单位加入一个临时组,假如这个单位是英雄,那么新建一个单位变量LeftUnit,使LeftUnit等于这个单位。首先,假如LeftUnit处 于死亡状态,那么等待,每3秒钟检查一次GoodPlace或BadPlace,一直等到这两个区域其中之一包含此单位,也就是等待这个死亡单位的复活。 如果LeftUnit还活着或者死亡单位已复活,那么先把这个单位身上所有的物品清空(避免麻烦还要一个个地判定物品属性),接着把这个单位从 UserGroup中踢出去并加入ComputerGroup中,再判定这个单位是否和Player6结盟如果是,把他加入LightGroup和 LightHighAIGroup,否则就把他加入DarkGroup和DarkHighAIGroup,然后开启触发器Attacking和 NoAttack。由于电脑玩家无论如何也没有退出游戏这个说法,所以不用管这个触发器会对电脑玩家产生什么影响。最早还有个补偿设定,即根据当前玩家退 出前的等级或拥有的物品折算成金钱补偿给电脑玩家,但由于效率和效果比不是很高,最终还是放弃,有兴趣的玩家可尝试一下。四、其它触发器1.经验平衡3C最多支持10个玩家5v5,在很多情况下都赶上奇数个玩家,或者某个玩家水平高,以一敌多,这时由于经验分配的问题势必造成玩家少的一方获得的经验多,结果很多玩家都不愿意打玩家数不对等的战斗。所以就有必要对双方的玩家人数加以判断并重新合理地分配经验比例。本 地图在人数对等的情况下,双方获得经验的比率都是200%,简单地说,比如一只食尸鬼所能提供的经验是100,那现在变成200,然后平分到每个玩家的身 上(间接经验),杀死它的玩家获得的经验会更多一些(直接经验)。在玩家数不对等的情况下,哪一方多,则那一方就要获得200%多玩家方与少玩家方数目 之比的经验,比如1v5,那么1玩家的那方仍是200%经验,5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论