五千年(敝帚自珍)

主题:初到贵宝地,灌一点游戏开发的东东 -- foundera

共:💬23 🌺4
全看分页树展 · 主题 跟帖
家园 电脑AI浅谈

电脑AI浅谈

一说到电脑AI(人工智能),就会有人认为它是高深莫测东西。其实并没那么复杂,电脑AI其实是一组if语句。各类型游戏有各类型的AI,RPG(冒险类)游戏的AI最简单,只要用函数产生随机数在对攻击对象取余即可,稍微复杂点的也只增加了道具、魔法攻击,其AI性质都是一样的。例如:

attack(((unsigned)biostime*rand())%3);/*电脑攻击函数*/

这是一个虚拟的函数,代码省略了。我们关心的只是它的入口,我们定义它的入口为要攻击的对象。选择对象使用了随机数与时间共同工作,这样敌人就在3个攻击对象中随机地选择攻击对象了。

  在这个语句中,没有使用if选择语句。在这个语句中,我方3个对象受攻击的概率是均等的,其实我们还可以将电脑AI提高一下,让电脑选择我方最弱的对象攻击的机率提高一下。程序改为:

int i,leastblood=20000,weakest;/*leastblood存储最弱对象的血量(初始化为一个比所有对象的可能血量都大的值),weakest存储最弱对象的代号*/

for(i=0;i<3;i++)

{ if(blood[i]<leastblood)/*blood数组为已知的我方对象的血量*/

 {leastblood=blood;weakest=i;}

}

i=((unsigned)biostime*rand())%4;

switch(i)

{ case 0:

 case 1:i=leastblood;break;

 case 2:i=(leastblood+1)%3;break;

 case 3:i=(leastblood+2)%3;break;

}

attack(i);

这样,最弱对象受攻击的机率就提高到了1/2,哈,电脑变聪明了。电脑AI设计是不是很简单?其实电脑AI有深有浅,这只是一个最简单的而已。要深奥,只不过是把制约的条件增多罢了。

  相对来说,RPG游戏AI是最容易设计的。其次是SLG游戏,SLG游戏电脑AI一般遵循的规则有:最弱对象攻击原则、就近攻击原则、最大攻击力原则。在这三个原则中,排在最先的是就近攻击原则,即电脑对象要攻击,则向距离该对象最近(最省MP)的对象靠近攻击。排在第二的是最弱对象攻击原则,在可以攻击到的对象中,选择最弱的对象进行攻击。排在第三的是最大攻击力原则,如果电脑选中了一个攻击目标,则会使用电脑对象能使用的最大攻击力的方式去攻击。你可能会问,知道电脑如何行动了,那玩游戏对电脑行动不是了如指掌了?不,我不是说过AI的深度与制约条件有关吗?制约电脑行动的条件远不止这些。如电脑游戏就有一种攻击指定目标的玩法。在这种模式下,电脑优先攻击的就是你指定保护的目标了。而且,如果加入魔法机制,电脑的行动就不光是攻击了,而且要定义使用魔法的条件,程序将更为复杂。

  再谈谈影响电脑AI的状态的游戏脚本,游戏脚本就跟乐器演奏的乐谱一样,影响着整个游戏进程:在什么时候、什么条件下执行什么动作,地图上出现什么,消失什么,谁的状态(如攻击力、防御力等)的改变。都要在游戏脚本中详细说明,只不过是使用符号化的语言而已。可以说游戏脚本就是一种解释类的AI。游戏脚本是非常重要的,RPG游戏不用说,因为RPG游戏几乎是单线式的,绝对需要脚本的支持。而在SLG游戏中,也是非常的重要。比如说,在一关设计时我布置了大量的强大的敌人。如果不用脚本加以控制的话,那么敌人将蜂涌而上,玩家绝对吃不消。而使用脚本控制后,每隔一定时间后有一部分敌人进入搜寻并攻击状态,其它的敌人仍然在待机状态。玩家将敌人一部分一部分吃掉,即不费多大力,又有一种一对N的成就感,娱乐的目的就达到了。ACT(动作类游戏)中,也要使用脚本控制游戏进程,不过这种脚本非常简单,只要写明什么地方出现什么敌人,什么机关工作就可以了。即时战略游戏的脚本相对复杂和抽象,既然是浅谈,这里就不用说了

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河