回合制战略游戏的ai算法设计

回合制战略游戏的ai算法设计

ID:9007974

大小:231.50 KB

页数:7页

时间:2018-04-14

回合制战略游戏的ai算法设计_第1页
回合制战略游戏的ai算法设计_第2页
回合制战略游戏的ai算法设计_第3页
回合制战略游戏的ai算法设计_第4页
回合制战略游戏的ai算法设计_第5页
资源描述:

《回合制战略游戏的ai算法设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、回合制战略游戏的AI算法设计译自EdWelch《DesigningAIAlgorithmsForTurn-BasedStrategyGames》在动作游戏里由电脑控制的对手总是有着先天的优势:完美的命中率,快如闪电的反应,所以为这类游戏设计AI的挑战在于使其更“人性化”,可以被玩家打败。在回合制战略游戏中,局面却正好相反。速度和命中率已经不再举足轻重了,人类玩家的敏锐和直觉可以轻易地战胜任何AI对手。事实上,要设计出可以打败一名有经验的玩家的AI几乎是不可能的,但毕竟那也不是我们想要的。挑战在于让AI的攻防策略看上去

2、是聪明的,经过考虑的,保持游戏中挑战的同时,让玩家取得最后的胜利。一旦玩家熟悉了AI的战术之后,游戏很快就会变得无聊起来,因此一定程度上的不可预见性还是很必要的。面临的挑战:一款典型的战略游戏分析引用实际的例子是理解AI设计问题最容易的方法。在这里我们来看一款太空战题材的游戏。我们的例子是一款俗称“4X”的游戏。[译注:4X游戏,战略游戏的一种,其主要的四个游戏目的分别是:eXplore(探索),eXpand(扩张),eXploit(掠夺),eXterminate(毁灭)]在这款游戏里,你必须扩张并征服整个星系。每个

3、玩家都拥有战舰以及殖民舰,始于己方行星,能够殖民化适合居住的行星。为其设计AI的最初尝试可能只是一个简单的算法,分派针对各资源(如行星,或舰队)的任务,从最重要的任务开始执行。守卫正在生产的行星具有最高的优先级,因为它们最有价值。第二重要的是守卫没有生产任务的殖民地,接着是进攻敌人的主行星,之后是殖民能居住的行星,再是进攻敌人的舰队,然后修理受损的飞船,最后是探索尚未开垦的领域。总之,我们从最高优先级的任务做起,检查在离我们的行星附近是否有敌人舰队存在。正如你在图片中所看到的,敌方护卫舰X,Y威胁到AI的基地和殖民地

4、。于是,我们找到最近的驱逐舰,分配进攻任务。你可能已经留意到我们的算法在这里的漏洞。如果碰巧,护卫舰Y先行动,距离最近的是驱逐舰A,它会被分派去作攻击。而此时护卫舰X又行动了,剩下能进攻的只有驱逐舰B了,但它离得太远,已经来不及阻止敌方护卫舰X轰炸我们的家园了。很明显,对付护卫舰Y的应该是驱逐舰B,护卫舰X则该留给驱逐舰A。此外,这个简单的算法还会引起其它的问题。来看一下一个更加复杂的场景:在这个场景里,我们的驱逐舰A因为先前的战斗严重损坏。将其再次遣往战场只是徒劳。将其送回主星球修理才是明智之举。于是就只剩下了驱逐

5、舰B和驱逐舰C来保卫殖民地。但驱逐舰C离(敌人)的护卫舰Y太远了,更好的做法是让它轰炸敌人的殖民地,因为距离上非常接近(更别提剩下的燃料消耗同样重要)。与此同时AI全副武装的殖民舰队也会因此从主要的殖民任务中被调回。解决方案:资源分配算法分配记分为了解决以上这些具体的问题,首先我们要设计一个记分系统。每一项任务都会被分配到一个总体的优先级,如下:保卫我们的殖民地:1进攻地方的殖民地:2殖民(其他)星球:3进攻地方舰队:4修理受损舰队:5开拓未开垦的疆域:6每一项任务还有一个优先级的加权值,比如防守任务的加权值基于殖民

6、地的价值。(有着生产任务的殖民地有着极高的加权值。)相似地,修理任务会根据受损程度计算加权值,而殖民任务的加权值则来自于行星的适合居住程度。终于我们要来考虑被舰队的距离了,如下:当前目标:生成的任务靠近殖民地的敌舰:保卫殖民地任务敌舰:进攻敌舰任务敌殖民地:进攻敌殖民地任务可居住的行星:殖民化行星任务受损舰队:修理舰队任务未开垦的领域:开拓任务分配得分=(6–整体优先级+加权值)/所分配舰队的距离因此,在先前的场景中,尽管防守任务拥有较高的优先级,但驱逐舰C离敌方星球实在太近了,所以进攻敌方殖民地的任务得分会更高。此

7、外,因为驱逐舰A严重受损,所以驱逐舰A的修理任务的优先级加权值也会十分高。再加上它离修理站的距离很近,修理任务的得分就会高过防守任务。算法概要整体算法分为4个部分:收集任务(GatheringTasks)AI有一张探测距离之内敌方舰队和行星,以及己方资源的列表。生成其需要完成的任务如下:可能的分配(PossibleAssignments)问题的另一方面在于如果我们分配任务的次序出错的话,那么就无法做到对资源的最优利用。这可以通过分步分配任务来解决。我们使用两个特殊的类:PossibleAssignment(候选任务)

8、和Task(任务)。PossibleAssignment通过一个任务和一个可能的“任务执行者”联系在一起,并记录“分配得分”。Task记录优先级,优先级加权值和任务。让我们来快速地看下我们的类结构,把这些都搞清楚:我们为每个“任务执行者”生成一个PossibleAssignment的组合对象。我们去掉不可能的任务组合。比如一艘未装备的飞船不能执

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。