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

[教程] SonicX 的AI教程

[复制链接]

17

主题

0

精华

46

积分

骑士

耕战
0
鹰币
1
天龙币
0
回帖
127
附庸关系0
发表于 2003-3-8 19:39:25 | 显示全部楼层 |阅读模式
SonicX 的AI教程

AI脚本制作教程(不权威指导)—第一章 入门
(本人前些时候写的教程可能有些错误,所有内容以此篇为准)

帝国时代2中的战役编辑器给于广大玩家新的空间,能够按自己意愿创造出属于自己风格的
战役,而其中又以RPG类较为出色。由于帝国时代2设计初衷是为战斗,讲究快速出兵彻底消
灭敌人,而作为RPG却恰恰相反。好在微软考虑的很周到,我们可以编写自己的AI脚本来弥
补上述的困惑。
★当你在阅读本教程时最好能同时对照CPSB.doc文件,他包含在帝国时代2 CD安装光盘
内。

第一步 如何创建AI文件

1、在帝国时代2的AI目录下创建2个文件,分别为
创建 文件1 my_ai.ai
创建 文件2 my_ai.per

2、使用Windows自带的“记事本”程序打开my_ai.per

3、在内写入:
(defrule
(civilian-population == 3)
=>
(chat-to-all "My first rule")
)

4、保存这个文件

5、启动帝国时代2的随机建立一个地图(不做任何改动),在“玩家”设置中把2号玩家中
的“个人”选项设为my_ai

6、测试,然后就能看到2号玩家循环提示的“My first rule”


第二步 理解规则
什么是“rule”,英文解释为规则。让我们看看规则是怎样的
(defrule ; 起始规则
(civilian-population == 3) ; 一个事实或一个条件
=> ; 这总在事实和方式之间
(chat-to-all "My first rule") ; 这是方式
); 结束规则
★“;”符号后面的文字在执行时将被忽略,一般用来为脚本写注释

现在我们可以得出规则的框架即
(defrule
(事实或条件)
=>
(方式)
)
当事实为true(真)则执行,反之fales(假)则不执行。
为了更好的说明这个规则,我们以Visual Basic的句式来套用一下
(defrule ; if
(事实) ;事实为true
=> ;then
(方式) ; 执行某个方式
)
这是AI执行时唯一个规则,没有事件写在此规则以外。AI可以看做是规则的集合,如果你知
道什么是规则就能看懂AI脚本。

第三步 理解“事实”(CPSB.doc第17页)
Facts即事实。事实只有2中形态即true和fales(在AI脚本中true将永远为true,false也永
远为false。因此当一个规则为true时,将循环不断的执行。类似“多层触发”)
假设
事实: 这里有3个村民
如果有更多或不足3名村民,则这个事实为false
如果刚好有3个村民,则事实为true
但AI并不知道当有3个村民时要他做什么。我们需要使用AI脚本专用的语言来告诉他。对于
大小等量关系AI中解释为(rel-op)
(rel-op) 的形态有
== 相等
!= 不相等
< 小于
> 大于
<= 小于或等于
>= 大于或等于
你可以试着改写上面的例子:
(civilian-population == 3) ; 正好有3个村民
(civilian-population != 3) ; 正好不是3个村民
(civilian-population < 3) ; 小于3个村民
(civilian-population > 3) ; 大于3个村民
(civilian-population <= 3) ; 小于或等于3个村民
(civilian-population >= 3) ; 大于或等于3个村民
看看各中情况。

你可以有多个事实,他们之间的连接方式解释为"and"
例如:
(defrule
(military-population == 1)
(civilian-population == 3)
=>
(chat-to-all "我有1个军事单位及3个村民")
)
这条很容易解释:当有1个军事单位及3个村民则送出聊天通知大家

第四步 理解“方式”(CPSB.doc第35页)
Actions(方式)很容易理解,典型的有
(attack-now) ;进攻
(train villager) ;产生一个村民
(build barracks) ;建造一个兵营
(chat-to-all ) ;送出聊天
例子:
(defrule
(civilian-population == 3)
=>
(attack-now)
(chat-to-all "开始进攻,但没有军事单位……")
)

(defrule
(civilian-population == 3)
=>
(train villager)
(chat-to-all "开始训练一个村民")
)
打开my_ai.per,删除前面的例子将这个例子写入测试效果
很容易理解不是吗?

第五步 填写参数 (CPSB.doc第46页)
系统的讲解完AI脚本规则,是否能看懂AI脚本格式了呢?如果回答是“YES”接着往下看本
章的最后一节
在CPSB.doc第17页你可以看到如下一行
attack-soldier-count
在<....>内的在这里解释为Parameters(参数)。参数是必须填写的项目,自CPSB.doc第46
页起是参数目录,可以对照填写。
例如:
前面提到的
(train villager) 解释为训练一个村民
我们在CPSB第36页查得为
train
值可以在CPSB第56页找到对应的单位

总结:本章叙述了AI脚本的制作方法及语句规则,下一章将对更深入介绍AI脚本制作中复杂
规则
---------------------------------------------------------
AI脚本制作教程(不权威指导)—第二章 进阶深入

(本人前些时候写的教程可能有些错误,所有内容以此篇为准)

★当你在阅读本教程时最好能同时对照CPSB.doc文件,他包含在帝国时代2 CD安装光盘
内。

上一章讲述了如何创建一个AI脚本文件,这章将接着上一章节阐述AI脚本制作中一些较为高
级的语法

第一节 如何引用其他AI脚本文件

制作复杂的AI脚本时,往往有很多单元,我们应该养成分类书写的习惯。一般可以分为内政
(资源开发)、外交(同盟等)、战斗(进攻)及贸易等多个部分。
如果把他们写在一个AI脚本中文件会非常臃肿及难以修改,因此在AI脚本用引入了
(load "filename")语法
(load "filename") 非常容易
例如
(load "my_ai2")
这样"my_ai2.per"文件在游戏时会自动整合到原先的AI脚本中

第二节 随机引用AI脚本

在制作高级战役时,如果能产生点随机发生的事件这对游戏者有着更大的吸引力!AI脚本考
虑的非常周详,一样引入了随机事件加载能力
(load-random
20 "filename1"
10 "filename2"
40 "filename3"
"filename4")
即为随机加载模式语句,这个例子解释为"filename1.per"有20%的机会被加
载、"filename2.per"有10%的机会被加载、"filename3.per"有40%的机会被加载、当前面的
文件都未被加载时则加载"filename4.per"。这里要说明的是随机机会的总和不要超过100,
否则容易引起系统错误导致当机!

第三节 按条件加载需要的函数模块或AI脚本

有时在制作AI脚本时常常需要设想玩家会以什么方式开始游戏或者用什么类型的地图或什么
难度开始游戏。在AI脚本中专门设置了一个判断函数来识别这些问题
#load-if-defined
#load-if-not-defined
#else
#end-if
这个句式学过些VB编程语言的朋友应该很眼熟,其实就是VB句式转换。举个简单的例子
#load-if-defined DIFFICULTY-EASIEST
(defrule
(true)
=>
(chat-to-all "Easiest")
(disable-self)
)
当你用“非常容易”这个难度开始游戏就会冒出这句

参数有很多常量,可以分为

Game Type(游戏模式):DEATH-MATCH(死亡模式),REGICIDE(弑君模式)
Starting Age(开始年龄):DARK-AGE-START,FEUDAL-AGE-START,CASTLE-AGE-START,
MPERIAL-AGE-START,POST-IMPERIAL-AGE-START
Starting Resources(开始资源):LOW-RESOURCES-START(低),MEDIUM-RESOURCES-
START(中),HIGH-RESOURCES-START(高)
Map Size(地图大小):TINY-MAP,SMALL-MAP,MEDIUM-MAP,NORMAL-MAP,LARGE-MAP,
GIANT-MAP
Map Type(地图类型)
Victory Type(胜利模式)
Difficulty(难度):DIFFICULTY-EASIEST,DIFFICULTY-EASY,DIFFICULTY-MODERATE,
DIFFICULTY-HARD,DIFFICULTY-HARDEST,
Population Cap(人口上限)
Game Speed Lock(游戏速度):GAME-SPEED-LOCKED(速度锁定)
Team Lock(组队模式):TEAMS-LOCKED(组队锁定)
Player’s Civ(游戏民族)

自CPSB.doc第14页开始有完整的常数列表,在这里就不一一说明了。

第四节 自定义常量

设置常量可以增加AI脚本的易读性,特别是较为庞大的AI脚本合理设置常量对于修改完善自
得AI脚本都很有帮助!
(defconst )就是常量的设置格式
举个例子
(defconst my-villagers 3)

(defrule
(civilian-population = my-villagers)
=>
(chat-to-all "我有3个村民啦!")
)

很简单吧

第五节 设置目标方案

Goals(目标)是AI脚本中最实用及最方便的函数!语法为:
goal (这是事实)
set-goal (这是方式)
设置范围为1~40
设置范围为1~100

既然这么好用,那怎么使用呢?还是用例子来说明吧
;********** 规则 1: 生产 20 村民
(defrule
(unit-type-count-total villager < 20)
(can-train villager)
=>
(train villager)
)

;********** 规则 2: 当有20个村民时设置目标信号1-1
(defrule
(unit-type-count-total villager >= 20)
=>
(set-goal 1 1)
)

;********** 规则 3: 如果目标信号1-1, 建立民兵
(defrule
(goal 1 1)
(unit-type-count-total militiaman-line < 10)
(can-train militiaman-line)
=>
(train militiaman-line)
)

;********** 规则 4: 当有10个民兵时设置目标信号1-2
(defrule
(current-age == dark-age)
(unit-type-count-total militiaman-line >= 10)
=>
(set-goal 1 2)
)

;********** 规则 5: 目标信号1-2时, 升级到封建时代
(defrule
(goal 1 2)
(can-research feudal-age)
=>
(research feudal-age)
)
怎么样?一个系统的升级模块就这样完成了!能够习惯使用“goal”函数对于模块化开发AI
脚本很有帮助!

第六节 计时器的应用

计时器在战役编辑器中的触发指令里也有,2者在原理上基本是一致的,在这里介绍用AI中
的计时器如何不段的发动进攻指令
计时器的语法:
timer-triggered (事实)
disable-timer (方式)
enable-timer (方式)
的使用方法为:计时器编号(1-10个) 时间(按秒计算)

具体看例子:
;********** 规则 1: 打开计时器,设定为300秒
(defrule
(true)
=>
(enable-timer 1 300)
)

;********** 规则 2: 当300秒到后发启一个进攻指令,并且以后每300秒都发启一次进攻
(defrule
(timer-triggered 1)
=>
(disable-timer 1)
(chat-to-all "现在开始进攻")
(attack-now)
(enable-timer 1 300)
)

第七节 与触发机制互交应用

在地图编辑器中有2个指令一个为“AI信号”还有一个是“AI剧本目标”,这2个就是用来与
AI脚本互交的
具体语法包括:
(event-detected ) (收到一个AI信号)
(acknowledge-event ) (接受AI信号,并注销)
set-signal (发送一个AI信号)

参数说明:
只有一个形态即 trigger
可以设置为1~255中任意数值,以对应触发中的255个事件
可以设置为1~255中任意数值,以对应触发中的255个事件

例子
(defrule
(event-detected trigger 1) ;接受到AI信号1
=>
(acknowledge-event trigger 1) ;承认这个AI信号,并注销(千万要注销,否则会不停的
重复运行)
(set-signal 1) 向触发系统回应一个AI信号1
)

特别需要说明的:AI信号不存在玩家的概念,也就是说当任何一个玩家发送了AI了信号,那
所有的玩家都会接收到这个信号,如果所有的玩家使用同一个AI脚本则可能同时回应这个AI
信号。

总结:本章介绍了AI脚本中一些高级的语法,如果能巧妙运用这些规则及函数那对于AI脚本
编辑无疑又迈出了很大一步!下章将介绍一些实用的“Facts”函数。
回复

使用道具 举报

71

主题

0

精华

199

积分

男爵

耕战
0
鹰币
19
天龙币
0
回帖
812
附庸关系0
发表于 2004-2-9 16:34:37 | 显示全部楼层
太麻烦了,不如用AI 模块制造者 。
帝国空间http://age2.ys168.com/ CS地图http://czmap.ys168.com/ http://www.cjdby.net/UploadFile/2006-4/20064228252225428.jpg
回复

使用道具 举报

420

主题

8

精华

2万

积分

圣徒

耕战
3097
鹰币
0
天龙币
0
回帖
4331

特级嘉禾勋章特级帝国勋章鹰之智者蛟龙勋章

附庸关系0
发表于 2004-2-10 01:36:03 | 显示全部楼层
这是基础

每夜坐禅观水月,有时行醉玩风花。净名事理人难解,身不出家心出家


回复

使用道具 举报

105

主题

9

精华

2万

积分

圣徒

耕战
4516
鹰币
2080
天龙币
0
回帖
1143

一级皇家勋章翔鹰建站十周年纪念章一级翔鹰勋章特级嘉禾勋章特级帝国勋章鹰之智者蛟龙勋章

附庸关系0
发表于 2004-2-11 10:11:46 | 显示全部楼层
以下是引用超级战列舰在2004-2-9 16:34:37的发言:
太麻烦了,不如用AI 模块制造者 。


不能全依赖 AI 模块制造者,它内容不全!

AI 模块制造者是用于加快和方便 AI 的开发的.  
忽见天上一火链,好像玉皇要抽烟。
如果玉皇不抽烟,为何又是一火链。
回复

使用道具 举报

7

主题

0

精华

22

积分

骑士

耕战
1
鹰币
0
天龙币
0
回帖
55
附庸关系0
发表于 2004-2-13 16:03:56 | 显示全部楼层
給臥龍兄
小弟閱過此文,倍感喜悅,能否讓在下轉載。
如願意,定當標明出處!
提供電腦遊戲下載.AOC劇情下載.GBA遊戲.魔獸檔案.獵人、火影忍者、死神漫畫.加速器.瘋狂阿給檔案,歡迎參觀! http://tw.club.yahoo.com/clubs/gogoaoc/
回复

使用道具 举报

66

主题

3

精华

1768

积分

圣徒

耕战
0
鹰币
26
天龙币
0
回帖
932

一级嘉禾勋章

附庸关系0
发表于 2004-2-15 17:21:27 | 显示全部楼层
请注意:“SonicX 的AI教程
[B]……[/B]
回复

使用道具 举报

14

主题

0

精华

93

积分

骑士

耕战
12
鹰币
15
天龙币
0
回帖
21
附庸关系0
发表于 2007-3-19 11:29:26 | 显示全部楼层
后续是不是还没出来?
回复

使用道具 举报

8

主题

0

精华

26

积分

骑士

耕战
-2
鹰币
5
天龙币
0
回帖
67
附庸关系0
发表于 2007-11-11 21:13:35 | 显示全部楼层
这模块似乎不全。。。。
考试结束了.....
神情一下放松了.................
回复

使用道具 举报

6

主题

0

精华

570

积分

子爵

耕战
103
鹰币
4
天龙币
0
回帖
37
附庸关系0
发表于 2009-5-8 17:05:42 | 显示全部楼层
好深奥啊
!!!!!!!!!!!!!!!!
回复

使用道具 举报

0

主题

0

精华

1

积分

扈从

耕战
0
鹰币
51
天龙币
0
回帖
2
附庸关系0
发表于 2012-8-14 15:45:59 | 显示全部楼层
回复

使用道具 举报

0

主题

0

精华

1

积分

扈从

耕战
0
鹰币
51
天龙币
0
回帖
2
附庸关系0
发表于 2012-8-14 15:52:45 | 显示全部楼层
好深奥哦,妹纸偶建了学习个君羊:二二四六四九零四六
回复

使用道具 举报

1

主题

0

精华

175

积分

男爵

耕战
0
鹰币
24
天龙币
0
回帖
15
附庸关系0
发表于 2012-8-14 16:26:34 | 显示全部楼层
好古老的帖子,从2003聊到2012.
回复

使用道具 举报

307

主题

5

精华

-4万

积分

流徒

耕战
-9331
鹰币
-9084
天龙币
0
回帖
5289

二级帝国勋章OL截图大赛冠军冒险七王者

附庸关系0
发表于 2013-4-28 14:13:47 本帖来自手机 | 显示全部楼层
好,不过好复杂
回复

使用道具 举报

0

主题

0

精华

9

积分

扈从

耕战
0
鹰币
10
天龙币
0
回帖
3
附庸关系0
发表于 2016-5-9 12:44:35 | 显示全部楼层
基础知识必不可少,就算之前学过。温故而知新可以为师矣
回复

使用道具 举报

2

主题

0

精华

19

积分

骑士

耕战
0
鹰币
10
天龙币
0
回帖
14
附庸关系0
发表于 2022-5-3 13:09:18 | 显示全部楼层
好老的帖子……
回复

使用道具 举报

本版积分规则

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

GMT+8, 2024-12-20 19:30 , Processed in 0.418772 second(s), 172 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

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

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