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

[教程] 将TSA与attack-now相结合的进攻模式(TS-AN)——适合B&D剧情设计

  [复制链接]

34

主题

12

精华

5万

积分

圣徒

耕战
9361
鹰币
444
天龙币
0
回帖
590

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

附庸关系0
发表于 2012-6-30 13:04:38 | 显示全部楼层 |阅读模式
本帖最后由 风雨技安 于 2012-6-30 16:27 编辑

这是鄙人写的第一篇ai经验之谈,希望大家能喜欢。
最近,无悔、SD和皮卡在测试我写的ai时,共同地提出了一个问题,那就是电脑玩家(以下简称CP)进攻过于脑残的问题。具体体现在,CP在发动一波进攻时,如果CP的部队还没到达进攻目的地,那么它们会无视任何的攻击,而且行军时还会一顿一顿的。于是我们就像打耙一样,毫无征服感可言。
那么,如何解决这个问题呢?或者说,如何让CPsmart点呢?
大家一定有印象,当我们在进攻CP时,敌人会如潮水般蜂涌过来,而且不会出现上述的症结。原来,CP在发现了已方城市范围内如果有敌军的部队或建筑时,它们会进入疯狂守城模式。
那么,我们能否把这个特点应用到进攻上呢?
没错!就是TSAtown-size-attack)进攻方式!具体实现方法请看老胡的教程:https://www.hawkaoe.net/bbs/thread-26411-1-1.html
然而,这个TSA有个缺陷,那就是兵力分散,容易被各个击破;这在通常的少部队战役制作中,非常不实用。
这时我们会反过来想,attack-now具有了TSA所没有的部队集中进攻的优点。要是有一种进攻,能既有attack-now的部队集中,又能有TSA的智能攻击就好了。
对,这就是我们今天要探讨的技术!鄙人虽不才,但想到了一种将attack-nowTSA相结合的进攻模式,现分享如下。
先定义几个变量:
(defconst YES 1)                                                          ;定义“是”
(defconst NO 2)                                                           ;定义“否”
(defconst ATTACK-GOAL 3)                                         ;定义“是否发动进攻”
(defconst ATTACK-NOW-ON 4)                                       ;定义“是否发动attack-now模式”
(defconst ATTACK-SIZE 200)                                         ;定义“TSA进攻范围为200”
(defconst NORMAL-SIZE 30)                                         ;定义“CP城镇正常范围30”
初始化:
(defrule

(true)
=>

(set-strategic-number sn-maximum-town-size 30)                                        ;
我们把城镇范围设置成30

(set-strategic-number sn-percent-enemy-sighted-response 100)
(set-strategic-number sn-enemy-sighted-response-distance 25)
(set-strategic-number sn-task-ungrouped-soldiers 0)
(set-strategic-number sn-number-explore-groups 1)
(set-strategic-number sn-percent-attack-soldiers 80)
(set-strategic-number sn-attack-intelligence 1)
(set-strategic-number sn-garrison-rams 1)
(set-goal ATTACK-GOAL NO)

(set-goal ATTACK-NOW-ON NO)

(disable-self)
)
大致的流程图是这样的(画得不好,见谅):
注:
时间器1代表离下一波进攻所需的时间,这里我们设为900
时间器2代表本波进攻所持续的时间,这里我们设为60
根据流程图,我们写出ai程序:
(defrule
(true)
=>
(enable-timer 1 1200)                                       ;
第一波进攻所需等待的时间,我们设为20分钟

(disable-self)
)

;--------------------------------------------------- TSA
进攻部分
(defrule
(timer-triggered 1)
(goal ATTACK-GOAL NO)
=>
(disable-timer 1)
(set-goal ATTACK-GOAL YES)
)

(defrule
(goal ATTACK-GOAL YES)
(strategic-number sn-maximum-town-size == NORMAL-SIZE)
(not(enemy-buildings-in-town))
(not (town-under-attack))
=>
(set-strategic-number sn-maximum-town-size ATTACK-SIZE)
(enable-timer 2 60)                                                                   ;
攻击持续的时间长
(set-goal ATTACK-NOW-ON   YES)                                         ;
本句为连接attack-now的钮扣

)

(defrule
(timer-triggered 2)
(goal ATTACK-GOAL YES)
=>
(set-strategic-number sn-maximum-town-size NORMAL-SIZE)
(disable-timer 2)
(set-goal ATTACK-GOAL NO)
(enable-timer 1 900)                                       ;
下一波进攻的时间,默认为900
)

;---------------------------------------------------
(defrule                                       ;attack now
进攻部分

(strategic-number sn-maximum-town-size > NORMAL-SIZE)
(goal ATTACK-NOW-ON     YES)
=>
(attack-now)
(set-goal ATTACK-NOW-ON   NO)                      ;
这是一个自锁设置,令attack-now指令在一次进攻中执行一次

)

你看!这样就完成了TSAattack-now相结合进攻模式(以下我们简称为TS-AN)的ai程序了!当此ai发动attack-now指令的士兵在中途被攻击时,CP会视为在城填内的单位受到攻击,所以被攻击的士兵就会反击!同时,TS-AN还使CP更智能,它不会只是单单进攻你的主城,也会袭击你在效区的采矿营地或军营!


下面是设置TS-AN的要注意的要点:
1first attack的时间要设在CP完成城市建设之后,因为这段时间是CP在建设城市的时间,如果城市还未构建完毕而发动TS-AN的话,就会造成CP农民在地图上乱建建筑物的情况。
2、当然你可以设置一次TS-AN进攻中电脑发动多次attack-now进攻,时间关系,这点我以后有空再出教程。(有些同学可能会问,一次attack-now和两次有什么区别?技安在此回答,因为attack-nowCP控制一队已编号的部队进攻,所以人数最多只能是42人,如果两次就有84人了,区别就在此。)
最后,如弟兄们看到以上有何错误的地方,麻烦指正我。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册翔鹰会员(昵称)

x
有点二
回复

使用道具 举报

96

主题

0

精华

2万

积分

宗主教

耕战
4464
鹰币
2237
天龙币
48
回帖
2281

翔鹰建站十周年纪念章三级翔鹰勋章

附庸关系9
发表于 2012-6-30 13:23:31 | 显示全部楼层
好高深!
回复

使用道具 举报

1374

主题

13

精华

4万

积分

教皇

耕战
4669
鹰币
19892
天龙币
0
回帖
13525

特级皇家勋章一级翔鹰勋章特级嘉禾勋章特级帝国勋章鹰之王者雄鹰勋章蛟龙勋章第七届火箭筒杯优秀战役第七届火箭筒杯最佳新人

附庸关系1
发表于 2012-6-30 13:28:30 | 显示全部楼层
回复 WTYTONY 的帖子

学点ai就懂了
回复

使用道具 举报

63

主题

8

精华

5万

积分

教皇

耕战
9517
鹰币
8493
天龙币
1
回帖
2199

冒险家翔鹰建站十周年纪念章特级翔鹰勋章特级嘉禾勋章特级帝国勋章雄鹰勋章鹰之智者蛟龙勋章第一玩家翔一电影节冠军

附庸关系0
发表于 2012-6-30 13:41:43 | 显示全部楼层
几个疑问:
1、简而言之,就是Attack-now的同时扩大TSA范围,使其保护在TSA范围内的Attack-now部队?
2、这种保护是否会由于其他方向上有敌人而受到影响?
3、已经参与Attack-now的部队,是否在扩大TSA后,受到半途攻击时,进行反击?

点评

见7楼回复  发表于 2012-6-30 14:37
怪物健康时对玩家伤害加倍。。。神patch膜拜ing。。。
——————————————————————————————
战役殿堂 精品战役下载
战役/场景发布版块
战役百家谈 作品评论、交流、攻略
回复

使用道具 举报

78

主题

13

精华

2万

积分

圣徒

耕战
2683
鹰币
182
天龙币
0
回帖
1957

二级皇家勋章一级嘉禾勋章二级帝国勋章十字军勋章雄鹰勋章活跃者使者勋章

附庸关系0
发表于 2012-6-30 13:42:25 | 显示全部楼层
貌似有问题……不过也可能是我记错……

(defconst ATTACK-SIZE 5)                                    
(set-goal ATTACK-SIZE 200)
(set-strategic-number sn-maximum-town-size ATTACK-SIZE)

5号GOAL的值变成了200 但是常数ATTACK-SIZE本身的值还是5没变吧
好比说 你把200这个数放进了5号箱子 但是你后面引用的是5不是200

心烦意乱。静下来吧。
回复

使用道具 举报

120

主题

3

精华

3万

积分

宗主教

耕战
6206
鹰币
31545
天龙币
0
回帖
2213

三级翔鹰勋章二级帝国勋章翔鹰建站十周年纪念章

附庸关系3
发表于 2012-6-30 14:21:26 | 显示全部楼层
表示几乎看不懂……
坑!
回复

使用道具 举报

34

主题

12

精华

5万

积分

圣徒

耕战
9361
鹰币
444
天龙币
0
回帖
590

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

附庸关系0
 楼主| 发表于 2012-6-30 14:28:32 | 显示全部楼层
本帖最后由 风雨技安 于 2012-6-30 14:40 编辑

回规则兄:
1、是的,同时attack-now部队也会自保。
2、会
3、编入attack-now里的TSA范围内部队,也被视为TSA的对像,也就是说,他们自己保护自己。

回老胡:
常识性错误,我疏忽了。我的测试ai是直接写数字的,写教程时为了让其更直观,就改了这个,不好意思

有点二
回复

使用道具 举报

63

主题

8

精华

5万

积分

教皇

耕战
9517
鹰币
8493
天龙币
1
回帖
2199

冒险家翔鹰建站十周年纪念章特级翔鹰勋章特级嘉禾勋章特级帝国勋章雄鹰勋章鹰之智者蛟龙勋章第一玩家翔一电影节冠军

附庸关系0
发表于 2012-6-30 18:28:47 | 显示全部楼层
不知道是否我测试方式有问题的缘故。
我在A方向上建立了一个城堡,让Ai发现。
然后Ai扩大TSA到这个城堡,几乎全兵都杀过来。
其中有attack now列队对来的。
我动用了B方向未被侦察的骑兵进行拦截,感觉好像没什么变化。
不知道技安兄有没有可以演示的战役?
怪物健康时对玩家伤害加倍。。。神patch膜拜ing。。。
——————————————————————————————
战役殿堂 精品战役下载
战役/场景发布版块
战役百家谈 作品评论、交流、攻略
回复

使用道具 举报

34

主题

12

精华

5万

积分

圣徒

耕战
9361
鹰币
444
天龙币
0
回帖
590

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

附庸关系0
 楼主| 发表于 2012-6-30 23:37:37 | 显示全部楼层
回复 Ru43 的帖子

回规则兄,确实你说的问题症结还依然存在。
TS-AN在你不对attack-now部队发动袭击时,擦肩而过是我想破头皮也无法解决的问题。

关于半路伏击attack-now部队,此时电脑有同时要求它们进攻主基地和反击的命令,所以这个自我保护的机率是随机的,即是说既有可能停下来反击,也有可能继续前进。
而同时,你在进攻其中一个attack-now部队的时候,另外一支attack-now会结群来救援。
所以,解决的方法是,让电脑多编几个attack-now部队,并在进攻时多发几个attack-now指令。可以这样设:
(set-strategic-number sn-percent-attack-soldiers XX)  ;让这个XX数的值设小点,就能保证结队前进的部队是小部队了;
然后就是在一波进攻中多发出几个attack-now指令,具体代码请看测试战役《美国的复仇》

有点二
回复

使用道具 举报

4

主题

0

精华

3251

积分

公爵

耕战
600
鹰币
285
天龙币
0
回帖
23
附庸关系0
发表于 2012-7-1 19:03:50 | 显示全部楼层
不知楼主上面所列的策略值是否完整,小弟不才据我所知上面策略值并不能很好完成attack-now进攻,还缺少最大进攻部队规模,最小进攻部队规模,策略值sn-percent-attack-soldiers攻击士兵比率是控制参加TSA与attack-now士兵分配,设为80会不会太多士兵参加attack-now呢?
还有不管采用何种方式进攻的士兵,只要编入进攻队伍,中途遭遇敌兵都不会进攻遭遇的敌兵,除非进攻目标丢失并且AI将这个士兵设为闲置士兵才会进攻遭遇的敌兵(这个进攻距离跟敌视回应距离有关)。

点评

1、策略值不完整。我发表的不是ai,而是一个思路 2、那帮我解释下的测试结果attack-now的部队会还击的原因  发表于 2012-7-1 20:01
回复

使用道具 举报

116

主题

7

精华

1万

积分

皇帝

耕战
1192
鹰币
2028
天龙币
0
回帖
1187

三级嘉禾勋章翔鹰建站十周年纪念章二级嘉禾勋章十字军勋章

附庸关系0
发表于 2012-7-1 20:20:58 | 显示全部楼层
人才济济啊~~
  go。。。。。。
回复

使用道具 举报

4

主题

0

精华

3251

积分

公爵

耕战
600
鹰币
285
天龙币
0
回帖
23
附庸关系0
发表于 2012-7-1 22:42:12 | 显示全部楼层
attack-now的部队会还击的原因:
1 如果这支部队以建筑物为攻击目标,通常中途被攻击而不会还击,但受到攻击的某个士兵有时会还击不过概率较少(攻城器除外,冲车对冲车又除外)
2 如果这支部队以某个敌对单位为攻击目标时,而这个某个敌对单位又突然消失时,这个部队会处于漫游(重编AI再次给定目标)或闲置状态时,一受到攻击就必定整队还击。
其实做AI最难就是界定部队与目标距离了。要了解AI定攻击目标,可以观看录像,记住选择阴影,注意AI视野变化。

点评

受教  发表于 2012-7-1 23:13
回复

使用道具 举报

4

主题

0

精华

3251

积分

公爵

耕战
600
鹰币
285
天龙币
0
回帖
23
附庸关系0
发表于 2012-7-1 23:00:31 | 显示全部楼层
这个思路或者在小型地图可能会较多出现反击,但大图,特大图或与敌对阵地较远时就比较难生效了
回复

使用道具 举报

本版积分规则

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

GMT+8, 2024-12-19 20:08 , Processed in 0.222817 second(s), 152 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

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

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