poplarshine 发表于 2018-3-1 00:54:07

初学帝国2的AI,不知还有没有玩。

;这是我写的先研发织布技术,再建造房屋的例子
;set-goal和goal不生效,不知是不是这样用,搞不懂,有大侠指点一下吗?

(defconst Goal-Research-Ri-loom 0);这里是定义变量且初始量为0的意思吗??
;研发织布技术
(defrule
        (current-age == dark-age)
        (game-time > 30)
        (can-research ri-loom)
=>
        (chat-to-all "研发织布技术")
        (research ri-loom)
        (set-goal Goal-Research-Ri-loom 1);这样是改变量值吗??
)
;建造居住房舍
(defrule
        (current-age == dark-age)
        (goal Goal-Research-Ri-loom 1);这样是判断变量值吗??
        (can-build house)
=>
        (chat-to-all "建造居住房舍")
        (build house)
)

poplarshine 发表于 2018-3-1 00:59:00

帝国2是童年时的情怀,虽然不玩很多年了,出来工作后懂一点IT技术,想自编一个AI,找回童年时的感觉。{:146:}

chriscca 发表于 2018-3-1 10:57:44

這個GOAL其實不用寫
取而代之用這個來判斷便可

(research-completed ri-loom)

poplarshine 发表于 2018-3-1 11:07:47

chriscca 发表于 2018-3-1 10:57
這個GOAL其實不用寫
取而代之用這個來判斷便可



主要还是想学习set-goal和goal的使用,查了论坛和相关手册看不懂。{:146:}

捕影侠 发表于 2018-3-1 12:49:20

本帖最后由 捕影侠 于 2018-3-1 13:16 编辑

三楼说的用research-completed ri-loom是一种方法,不过你要问goal的话我就用goal给你说明下
你可这样试试:
(      X随意取个指定范围内的整数(-32768—32767)   )

(defconst R-LOOM X)    ;便于理解,否则你不知道X所代表的意义,这在后面的goal里会作为变量

(defrule
(true)
=>
(set-goal R-LOOM Y)   ;数字Y随意设置,此处我设为0代表关闭。仅代表该变量的具体数值,范围0—40
(disable-self)
)


(defrule
      (goal R-LOOM 0)               ;如上,我个人将Y值设为0
      (current-age == dark-age)
      (can-research ri-loom)
      (game-time > 30)
=>
      (chat-local-to-self "研发织布技术") ;如果你想对所有人说就改回chat-to-all
      (research ri-loom)
      (set-goal R-LOOM 1)    ;这里将R-LOOM的取值换成1,作为下面的条件
      (disable-self)
)

(defrule
(goal R-LOOM 1)      ;此时R-LOOM的goal值为1作为了条件,触发造房效果
(can-build house)
(housing-headroom <= 2)
=>
(chat-local-to-self "建造居住房舍")
(build house)
)

   goal值的变化相当于一种触发开关,可以在战役中加以运用丰富内容和可玩性,以上希望对楼主有所帮助
   

poplarshine 发表于 2018-3-1 14:46:20

捕影侠 发表于 2018-3-1 12:49
三楼说的用research-completed ri-loom是一种方法,不过你要问goal的话我就用goal给你说明下
你可这样试试 ...

是不是我理解有问题还是不会用


(defconst R-LOOM 0)

(defrule
      (goal R-LOOM 0)
=>
      (chat-local"R-LOOM 0")
        (set-goal R-LOOM 1)
)
(defrule
      (goal R-LOOM 1)
=>
      (chat-local"R-LOOM 1")
        (set-goal R-LOOM 0)
)

poplarshine 发表于 2018-3-1 17:17:57

poplarshine 发表于 2018-3-1 14:46
是不是我理解有问题还是不会用




就我这段AI运行不生效

(defconst R-LOOM 0)

(defrule
      (goal R-LOOM 0)
=>
      (chat-local"R-LOOM 0")
      (set-goal R-LOOM 1)
)
(defrule
      (goal R-LOOM 1)
=>
      (chat-local"R-LOOM 1")
      (set-goal R-LOOM 0)
)

捕影侠 发表于 2018-3-1 18:20:42

本帖最后由 捕影侠 于 2018-3-1 18:27 编辑

poplarshine 发表于 2018-3-1 17:17
就我这段AI运行不生效

(defconst R-LOOM 0)

你这段代码本来就在游戏里什么都体现不出来嘛{:5_432:},而且还有在使用任何goal值前一定要给它取定某个定值,否则这还是个无用的goal

poplarshine 发表于 2018-3-1 22:19:53

捕影侠 发表于 2018-3-1 18:20
你这段代码本来就在游戏里什么都体现不出来嘛,而且还有在使用任何goal值前一定要给它取定某个 ...

那怎么改过来,我就想当R-LOOM为0时喊一声"R-LOOM 0",并且设R-LOOM为1;当R-LOOM为1时喊一声"R-LOOM 1",并且设R-LOOM为0

捕影侠 发表于 2018-3-2 15:45:48

本帖最后由 捕影侠 于 2018-3-11 12:44 编辑

poplarshine 发表于 2018-3-1 22:19
那怎么改过来,我就想当R-LOOM为0时喊一声"R-LOOM 0",并且设R-LOOM为1;当R-LOOM为1时喊一声"R-LOOM 1" ...
我在此先解释不是循环执行的时候

(defconst R-LOOM 5)          ;定义一个数字5代表的变量R-LOOM,现在仅仅只定义了这么一
                                             ;个未知变量而已,还没有赋值,但是注意范围1--40
(defrule
      (game-time >= 4)
      (true)
=>
      (set-goal R-LOOM 0)   ;赋一个初始值0(这里的初始值实际是自己随便选一个数,我选0作为初始值)   
      (disable-self)                ;你总不能让它一直重复执行吧......
)

(defrule
      (game-time >= 6)
      (goal R-LOOM 0)         ;根据你刚才选的数字作为条件
=>
      (chat-local"xxx")         ;输出你所要的内容
      (set-goal R-LOOM 1)   ;同时将变量R-LOOM 的值换成1,作为下一步执行的条件)
      (disable-self)
)

(defrule
      (game-time >= 8)
      (goal R-LOOM 1)          ;R-LOOM值为1成立,执行下面的效果
=>
      (chat-local"XXX")      ;输出你所要的内容
      (set-goal R-LOOM 0)    ;又将R-LOOM值设为0,由于都是不循环,所以这里有没有该条都可以
      (disable-self)
)

这样就是你要的效果,但是分别只能执行一次


poplarshine 发表于 2018-3-11 10:58:34

谢谢,不过我执行上面代码时没任何内容输出,不知是什么问题

捕影侠 发表于 2018-3-11 12:39:38

本帖最后由 捕影侠 于 2018-3-11 12:41 编辑

poplarshine 发表于 2018-3-11 10:58
谢谢,不过我执行上面代码时没任何内容输出,不知是什么问题
不好意思,在下有几个地方记错了。chat-local 也可以只不过是不会带上玩家颜色而已。以上代码两个地方改下,defconst那栏数字设为1--40之间。还有,几个地方加上计时器,否则对话无法体现。上面的代码修正了,亲测无误

poplarshine 发表于 2018-3-13 11:30:09

谢谢可以了,原来不生效是因为定义时设了0,defconst R-LOOM 0
页: [1]
查看完整版本: 初学帝国2的AI,不知还有没有玩。