尼克 发表于 2007-8-1 23:48:44

为战役配AI的基础(卧龙先生)

本帖最后由 孟雨亲王 于 2015-3-28 20:05 编辑

首先要知道怎么做**.ai、**.per文件,可以运行WINDOWS自带的“记事本”,然后点击“另存为”,这将打开一个新的窗口,在“文件名” 处敲“**.per”或者“**.ai”,将 “保存类型” 下拉菜单定 义为: “所有文件”,最后点确定,OK,就生成了一个“**.per”或者“**. ai”。

关于编辑AI的,可以使用一些像AIEDITOR类的AI编辑器。没办法也可 以用记事本。编辑 AI 要在"**.per"文件里工作,编辑的成了的整个 "**.per"里不能有一个字打错。

------------------------------

接下来要了解一些AI的规格。 看这个句法:
(defrule   
(difficulty == hard)
=>
(chat-to-all "一二三四五六")   
(disable-self) )

当你用一个拥有上面句法的AI选择难度为难进入游戏,一开始就可以 看到聊天显示:一二三四五六 。但选择难度为标准或别的, 都不能 看到“一二三四五六”。

分析:
(defrule
(内容)
=>
(内容) )

这是编写AI的基本格式,所有的句法都是如此,每一个这样子的句法 就是一个动作。   
(difficulty == hard) 这一句是说选择难度为“难”。   
(chat-to-all "一二三四五六") 这一句是发送聊天信息:一二三四五六 。
(disable-self) 这一句以后说明。

我们可以将这AI语法格式理解为
(defrule         
(difficulty == hard)   ;(条件)
=>      
(chat-to-all "一二三四五六");(效果)   
(disable-self)                ;(效果) )               

现在比较明确了,这句语法就是说:当选择的难度为 “难” 的时候 ,就发送聊天信息为:一二三四五六。所以当我们选择难度为别的的 时候便不会再发送聊天信息:一二三四五六。

补:条件和效果都可以不止一个。

(defrule   
(game-time > 60)         
(difficulty == hard)
=>
(chat-to-all "一二三四五六")   
(disable-self) )

使用这一句发送聊天信息必须在游戏开始60秒后才发出。至此,AI的 一般规则应该看得懂了吧!

------------------------------

下面列出一些实用的句法,兄弟所后做AI如果懒的编写,也可以从这 里COPY。不过自己还是要知道每一句都是些什么意思,要懂得修改。
开始:
(defrule
(true)
=>
(set-strategic-number sn-percent-civilian-explorers 0)   
(set-strategic-number sn-percent-civilian-builders 15)   
(set-strategic-number sn-percent-civilian-gatherers 85)   
(set-strategic-number sn-food-gatherer-percentage30)   
(set-strategic-number sn-gold-gatherer-percentage20)   
(set-strategic-number sn-stone-gatherer-percentage 20)   
(set-strategic-number sn-wood-gatherer-percentage30)   
(set-strategic-number sn-maximum-food-drop-distance 20)   
(disable-self) )

其中,“(true)”是无条件,所以下面的动作就一定会发生了。   

(set-strategic-number sn-percent-civilian-explorers 0)   (set-strategic-number sn-percent-civilian-builders 15)   (set-strategic-number sn-percent-civilian-gatherers 85) 这三句中第一句指百分之几的农民用于侦察地图;第二句指百分之几 的农民用于建造建筑;第三句指百分之几的农民用于采集资源。三句 语法是关系着的,如:百分之20用于侦察地图,百分之20用于建造建 筑,百分之60用于采集资源,加上要等于100。   

(set-strategic-number sn-food-gatherer-percentage30)   (set-strategic-number sn-gold-gatherer-percentage20)   (set-strategic-number sn-stone-gatherer-percentage 20)   (set-strategic-number sn-wood-gatherer-percentage30) 这四句中第一句指百分之三十的农民采集食物;第二句指百分之二十 的农民采集采集黄金;第三句指百分之二十的农民采集石头;第二句 指百分之三十的农民采集木头。可以随时修改百分比。

(set-strategic-number sn-maximum-food-drop-distance 20) 这一句是指农民采集食物离城镇中心的对答距离为20,当然也可以规 定采集别的资源的最大范围。 其实这一类的还有很多,就不说了,免得太复杂。以后自己学习吧。

-----------
再一句:
(defrule   
(unit-type-count-total knight-line < 12)   
(can-train knight-line)
=>
(train knight-line) )

其中:
(unit-type-count-total knight-line < 12) 指所有的骑兵系数量总和少于12个         
(can-train knight-line) 指能够训练骑兵         
(train knight-line) 指动作:训练骑兵

明确的解说:当骑兵系(包括骑士、重骑、游侠)的数量总和少于1 2个并且可以训练骑兵系的时候,就训练骑兵系。当然可以修改。如 果将其中所有的knight(骑兵)修改为archer(努手),那么将不再 造骑兵系,而改为造努手,数量也当然可以改。

如:
(defrule   
(unit-type-count-total archer-line < 8)   
(can-train archer-line)
=>
(train archer-line) )

想知道所有单位的英文名字的另找资料。

-----------

再来一个造建筑的:
(defrule   
(building-type-count-total market less-than 1)   
(can-build market)
=>
(build market) )

其中:
(building-type-count-total market less-than 1) 指市场数量总和少于 1 个   
(can-build market) 指能建造市场   
(build market) 建造市场 这一句和训练军事单位没什么两样。其他的如此推类。 想知道所有建筑英文名请自己找资料。

-----------

另外研究科技也和造单位差不多,如:
(defrule   
(can-research ri-long-swordsman)
=>
(research ri-long-swordsman) )

其中(can-research ri-long-swordsman) 能研究长剑士      
(research ri-long-swordsman) 研究长剑士
想知道所有技术英文名请自己找资料。

-----------

再一个:
(defrule   
(game-time > 800)
=>
(attack-now)   
(enable-timer 2 600)   
(disable-self) )

(defrule   
(timer-triggered 2)
=>
(attack-now)   
(disable-timer 2)   
(enable-timer 2 500) )

这一个是进攻系统。
(game-time > 800) 指游戏时间大于800秒   
(attack-now) 指动作:进攻   
(enable-timer 2 600) 指使用一个定时器,命名为 2 ,定时器的时间为600秒。   
(timer-triggered 2) 指定时器2的时间600秒到达时   
(attack-now) 指再度进攻一次   
(disable-timer 2) 指使定时器2残废,意思使不要再使用定时器2了   
(enable-timer 2 500) 指使用新的定时器2,不过时间改为500秒了。

所有动作解说: 当游戏进行800秒后电脑就第一次进攻,600秒后,因为定时器2的发 作又进攻一次,再500秒后,因新的定时器 2 再度发作, 便再度进 攻,以后也每隔500秒就进攻一次。这一句有一点复杂,看不懂以后 自己研究吧,不难。

-----------

现在该说到
(defrule   
(difficulty == hard)
=>
(chat-to-all "一二三四五六")   
(disable-self) )

其中的(disable-self)了。 它的作用是使这它所在的那一个语法只产生一次的作用。如果上面 这一句不加上后面的(disable-self),那么一二三四五六 将不停的显示出来,而有了(disable-self)这一段,一二三四 五六就只显示一次而已。

-----------

再谈个目标(goal)的:
(defrule   
(unit-type-count-total knight-line == 1)
=>
(set-goal 6 10)   
(chat-to-all "一二三四五六")   
(disable-self) )

(defrule   
(goal 6 10)
=>
(chat-to-all "第二个动作")   
(disable-self) )

其中:   
(unit-type-count-total knight-line == 1) 只骑兵系数量等于1   
(chat-to-all "一二三四五六")   
(set-goal 6 10) 发送聊天信息一二三四五六,并且: 设置目标:6 10   (goal 6 10) 指接受目标 6 10 的信息   
(chat-to-all "第二个动作") 发送聊天信息 第二个动作

总体解说: 当玩家的骑兵系数量等于1的时候,便同时发出两个聊天信息:   一二三四五六      第二个动作 至此,目标的使用兄弟应该懂了!

----------

再一个,作弊的:
(defrule   
(true)
=>
(enable-timer 4 2400)   
(disable-self) )

(defrule   
(timer-triggered 4)
=>
(cc-add-resource wood 7000)   
(disable-timer 4)   
(enable-timer 4 1440) )

这个不多说,电脑在游戏开始2400秒后就自动为自己添加 7000 木 头,再以后每隔1440秒又为自己加7000木头。 为什么要使用作弊,因为有的时候我们会为了地图的美观而不想让 多事的农民将美丽的树木一伐而尽,就将农民伐木的百分之* 定义 为0,不过没有木头玩家又不行,所以作弊的优势就显露了出来。 可参考我的“匈奴第一场”里的汉朝。既要表现汉朝的农 田 特别 多又要不让伐木,还是作弊帮的忙呀!:)

-----------

最后一个,难度的使用:   

(defrule
(difficulty == normal)
(unit-type-count-total militiaman-line &lt; 12)   
(can-train militiaman-line)
=>
(train militiaman-line) )

(defrule
(difficulty == moderate)   
(unit-type-count-total militiaman-line < 15)   
(can-train militiaman-line)
=>
(train militiaman-line) )

(defrule
(difficulty == hard)
(unit-type-count-total militiaman-line < 20)
(can-train militiaman-line)
=>
(train militiaman-line) )


使用难度是作战役必须的。看第一个:
(defrule   
(difficulty == normal)   
(unit-type-count-total militiaman-line < 12)   
(can-train militiaman-line)
=>
(train militiaman-line) )

指当难度选标准时,民兵系的数量总和少于12时便训练民兵系。


(defrule   
(difficulty == moderate)   
(unit-type-count-total militiaman-line < 15)   
(can-train militiaman-line)
=>
(train militiaman-line) )

指当难度选中等时,民兵系的数量总和少于15时便训练民兵系。


(defrule   
(difficulty == hard)   
(unit-type-count-total militiaman-line < 20)   
(can-train militiaman-line)
=>
(train militiaman-line) )

指当难度选难时,民兵系的数量总和少于20时便训练民兵系。 就这样,难度的选择发挥了作用。用在进攻或者别的都很不错。

尼克 发表于 2007-8-1 23:50:12

由于旧的那帖不见了,现在我再发一次上来。

圣殿骑士 发表于 2007-8-10 07:45:08

真是宝典啊!令小弟受益匪浅!

圣光骑士~剑圣 发表于 2007-11-11 21:12:27

真是宝典啊!.............:D :D

EverNEW-Z 发表于 2007-12-15 23:05:57

真是宝典啊!.............:) :lol :lol :handshake

wsy50 发表于 2007-12-16 10:40:12

DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

whb2008 发表于 2008-2-6 12:54:01

可惜呀,当年英语没学好,一句也看不懂哦,悲哀~

ysbyh1234 发表于 2008-2-7 21:22:46

虽然现在英语成绩不懂 不过借助翻译工具 经过3天3夜的研究终于弄懂了 谢谢尼克
祝大家新年快乐

wsy50 发表于 2008-2-9 15:42:23

D!!!!!!!!!对我有帮助~~~~~~~~~~~~我把BOOM2拆了,发现BOOM2还有一些小小的插曲~DDDDDDDDDDDD

maybezhan 发表于 2008-8-7 12:30:35

````

黄油加工所 发表于 2008-8-7 15:51:39

不知所云。。。。。。

zbaowei8 发表于 2008-12-27 06:01:55

最肉麻的短信送给你

当你看到这条短信息时,你已经中了猛烈无比的爱毒,唯一的解药就是嫁给我,不用考虑了,咱们结婚吧!
性用品 成人用品SM用品 性保健品

爽身粉 发表于 2017-10-12 15:40:36

上学时候完全看不懂,现在从事C语言方面的工作两年后发现,这个比C语言简单多了。。多谢卧龙先生的普及。这个算挖坟吗?
页: [1]
查看完整版本: 为战役配AI的基础(卧龙先生)