利用常数减轻AI编写者的工作量(应该也算一个教程吧)
注:我写这篇东西,比较基础,已经懂的也不要骂,如果有不对请提意见。一些新手 写AI的时候 经常喜欢这样子来写出兵代码:(以出骑士为例子)
(defrule
(current-age == castle-age)
(can-train knight)
(unit-type-count-total knight < 30)
=>
(train knight)
)
(defrule
(current-age == castle-age)
(can-train knight)
(players-unit-type-count any enemy spearman-line >= 10)
(unit-type-count-total knight < 15)
=>
(train knight)
)
……
可是这样子,有太多的条件,而出兵数也要改来改去。后期修正的时候,更是要多次进行兵力调整,那有没有更好的方法呢?
用常数可以更方便。
不知道大家有没有看过别人做的AI,他们的开头都有一长串代码。例如:(以下是我从一个AI里面摘抄的)
(defconst livestock-line 958)
(defconst monk-with-relic 286)
(defconst max-map-size 255)
(defconst ri-spying 408)
(defconst sn-treb-count 64)
(defconst unpacked-trebuchet 42)
(defconst stone-mine 102)
(defconst gold-mine 66)
(defconst G_YES 1)
(defconst G_NO 0)
(defconst buildplan 9)
(defconst advancing-feudal 1)
(defconst advancing-castle 2)
(defconst advancing-imperial 3)
(defconst attack-goal 10)
(defconst attacking-now 11)
(defconst retreat 12)
(defconst gold-on-map 13)
(defconst stone-on-map 14)
(defconst ri-herbal-medicine 441)
(defconst archer 15)
(defconst swords 16)
(defconst cavalry 17)
(defconst statistics 18)
(defconst enemy-military 19)
(defconst demon 20)
(defconst eradication 21)
其中,(defconst XXX X)就是定义常数的语句。他的作用是定义一个常数,名字叫XXX,数量是X。
另外 你们也许已经注意到了,有些语句出兵的数量不是一个数,而是一串代码,例如:(也是摘抄的)
(defrule
(current-age == imperial-age)
(can-train spearman-line)
(unit-type-count-total spearman-line < max-spearman-line)
=>
(train spearman-line)
)
在这里并没有直接给出要生产多少个长矛兵系列(以下简称XX)的兵,为什么电脑还是认识呢?这就是因为max-spearman-line是之前已经定义的常数。
另外,常数定义了后也是可以改变的,请看如下例子:
(defrule
(条件1)
(条件2)
……
=>
(set-goal XXX X)
)
这里的XXX是之前用defconst定义的常数,X是改变成多少。
看到这,相信大家已经心中有数了吧!
以出骑士为例子:
第一步:在前面用defconst 定义常数
例如
(defconst goal-knight 30) ←加上goal是为了避免搞混
第二步:写出兵代码很简单:
(defrule
(unit-type-count knight-line < knight)
=>
(train knight)
)
第三步:把各种情况下要产多少骑士列出来
例如当任何一个敌人有15个XX,就最多产20个骑士
(defrule
(players-unit-type-count any-enemy spearman-line >=15)
=>
(set-goal goal-knight 20)
)
这样就大功告成了!
详细的自己慢慢思考吧,如有疑惑或者认为我说错了请指出!
[ 本帖最后由 老胡V1 于 2009-8-18 11:22 编辑 ] 抢沙发呀抢沙发……我来捧场了 一直不懂的我,现在有些眉目了,希望能出一个更详细的内容来学习,做一个教程.说不定,斑竹会给你+精嘞~~~
页:
[1]