翔鹰帝国网|帝国时代论坛|帝国时代系列|神话时代
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 1242|回复: 14

[求助] 初学帝国2的AI,不知还有没有玩。

[复制链接]

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
发表于 2018-3-1 00:54:07 | 显示全部楼层 |阅读模式
;这是我写的先研发织布技术,再建造房屋的例子
;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)
)

回复

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 2018-3-1 00:59:00 | 显示全部楼层
帝国2是童年时的情怀,虽然不玩很多年了,出来工作后懂一点IT技术,想自编一个AI,找回童年时的感觉。
回复

使用道具 举报

16

主题

0

精华

1701

积分

侯爵

耕战
305
鹰币
30
天龙币
0
回帖
76
附庸关系0
发表于 2018-3-1 10:57:44 | 显示全部楼层
這個GOAL其實不用寫
取而代之用這個來判斷便可

(research-completed ri-loom)
回复

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 2018-3-1 11:07:47 | 显示全部楼层
chriscca 发表于 2018-3-1 10:57
這個GOAL其實不用寫
取而代之用這個來判斷便可

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

使用道具 举报

18

主题

1

精华

8613

积分

宗主教

耕战
1420
鹰币
134882
天龙币
0
回帖
395

翔鹰建站十周年纪念章

附庸关系4
发表于 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值的变化相当于一种触发开关,可以在战役中加以运用丰富内容和可玩性,以上希望对楼主有所帮助
     

回复

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 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)
)

点评

你想要问啥还是想说明啥?  发表于 2018-3-1 16:02
回复

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 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)
)
回复

使用道具 举报

18

主题

1

精华

8613

积分

宗主教

耕战
1420
鹰币
134882
天龙币
0
回帖
395

翔鹰建站十周年纪念章

附庸关系4
发表于 2018-3-1 18:20:42 | 显示全部楼层
本帖最后由 捕影侠 于 2018-3-1 18:27 编辑
poplarshine 发表于 2018-3-1 17:17
就我这段AI运行不生效

(defconst R-LOOM 0)

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

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 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
回复

使用道具 举报

18

主题

1

精华

8613

积分

宗主教

耕战
1420
鹰币
134882
天龙币
0
回帖
395

翔鹰建站十周年纪念章

附庸关系4
发表于 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)
)


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


回复

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 2018-3-11 10:58:34 | 显示全部楼层
谢谢,不过我执行上面代码时没任何内容输出,不知是什么问题

点评

chat-local 本来就什么都看不见的。。。你得换成chat-to-all  发表于 2018-3-11 11:15
回复

使用道具 举报

18

主题

1

精华

8613

积分

宗主教

耕战
1420
鹰币
134882
天龙币
0
回帖
395

翔鹰建站十周年纪念章

附庸关系4
发表于 2018-3-11 12:39:38 | 显示全部楼层
本帖最后由 捕影侠 于 2018-3-11 12:41 编辑
poplarshine 发表于 2018-3-11 10:58
谢谢,不过我执行上面代码时没任何内容输出,不知是什么问题

不好意思,在下有几个地方记错了。chat-local 也可以只不过是不会带上玩家颜色而已。以上代码两个地方改下,defconst那栏数字设为1--40之间。还有,几个地方加上计时器,否则对话无法体现。上面的代码修正了,亲测无误
回复

使用道具 举报

4

主题

0

精华

21

积分

骑士

耕战
-2
鹰币
6
天龙币
0
回帖
12
附庸关系0
 楼主| 发表于 2018-3-13 11:30:09 | 显示全部楼层
谢谢可以了,原来不生效是因为定义时设了0,defconst R-LOOM 0
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国

GMT+8, 2024-5-4 08:31 , Processed in 0.218668 second(s), 151 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

Copyright © 2001-2023, Hawkaoe.net All Rights Reserved

快速回复 返回顶部 返回列表