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

[教程] [UP1.5] AI的递进结构

[复制链接]

183

主题

9

精华

2万

积分

教皇

耕战
3329
鹰币
16751
天龙币
0
回帖
1200

翔鹰建站十周年纪念章

附庸关系3
 楼主| 发表于 2020-4-29 04:09:34 | 显示全部楼层 |阅读模式
本帖最后由 newtonerdai 于 2020-6-13 11:25 编辑

;///////////////////////////////////////////////////////////
;//                        递进结构                       //
;//                                     适用于UP/WK/LK/DE //
;//                                      制作 newtonerdai //
;///////////////////////////////////////////////////////////
;【注】本文只作教程用,重在理解。请不要直接套用。
;这里的递进结构只是其中一种。本文中的例子,其多个选项之间是没有交集的,所以可以让AI每次遍历时都从头刷新一次。
;如果你的多个选项之间有交集或划分(比如战力碾压时可能会选择莽冲(淹没敌人),战力被碾压时也有可能会选择莽冲(放弃治疗)),那就需要自己思考做法了,动动脑筋吧~!


(defconst enemy-seen 100)
;enemy-seen = 0 —— 初始状态,代表未发现敌人
;enemy-seen = 1 —— 代表发现了敌人。

(defconst choice 101)
;choice = 0 —— 初始状态。未发现敌人时,不进行任何选择
;choice >= 1 —— 当发现敌人后,激活选择模块
;   choice = 10 —— 选择:进攻
;       choice = 11 —— 执行:莽冲
;            (choice = 11~14 —— 更细节的决定)
;       choice = 15 —— 执行:风筝绕圈
;            (同理,更细节的决定)
;   choice = 20 —— 选择:撤退
;       choice = 21 —— 执行:直撤
;       choice = 25 —— 执行:边打边退
;   战斗结束后,重置choice为0


(defconst gl-local-total 102)       ;本地搜索结果计数(即搜索AI玩家自己)
(defconst gl-local-last 103)
(defconst gl-remote-total 104)      ;远程搜索结果计数(可以是搜索任何玩家)
(defconst gl-remote-last 105)

;初始化
(defrule
    (true)
=>
    (set-goal enemy-seen 0)
    (set-goal choice 0)
    (disable-self)
)
;================== 判断战斗状态模块 ==================
;搜索敌人(玩家1)的最多40个弓兵系单位
(defrule
    (true)
=>
    (up-full-reset-search)                      ;搜索前需清空筛选和搜索结果
    (up-modify-sn sn-focus-player-number c:= 1) ;设置焦点玩家为玩家1(焦点即为观察)
    (up-find-remote c: archer-line c: 40)       ;搜索焦点玩家的弓兵系最多40个
    (up-get-search-state gl-local-total)        ;获取搜索结果计数到以gl-local-total开头的连续4个变量
)
;发现敌人时,设为1
(defrule
    (up-compare-goal gl-remote-total c:>= 1)    ;判断远程搜索结果计数,≥1时说明发现了敌人
=>
    (set-goal enemy-seen 1)
    (chat-to-all "发现敌人")
)
;没有发现敌人时,设为0
(defrule
    (up-compare-goal gl-remote-total c:== 0)    ;判断远程搜索结果计数,为0时说明没有发现敌人
=>
    (set-goal enemy-seen 0)
    (chat-to-all "没有发现敌人")
)
;搜索完成后清空搜索
(defrule
    (true)
=>
    (up-full-reset-search)
    (up-get-search-state gl-local-total)
)

;===================== 选择模块 =====================
;发现敌人时,开启模块
(defrule
    (goal enemy-seen 1)
=>
    (set-goal choice 1)
)
;没有发现敌人时,关闭模块
(defrule
    (goal enemy-seen 0)
=>
    (set-goal choice 0)
)
;+++++++++++++++++++++ 选择阶段 ++++++++++++++++++++

;----------- A. 决定进攻 ------------
(defrule
    (up-compare-goal choice c:>= 1)             ;大于等于1时成立。这么写可以让AI每次遍历规则时都做一次决定,无论已做的决定是如何的。
    (unit-type-count archer-line >= 5)          ;检测复杂,此处略写。假设是检测 “我方战力>敌方战力” 的语句。
=>
    (set-goal choice 10)
    (chat-to-all "我决定继续攻击")              ;【注】接下来这些chat-to-all会不断重复发出。如果想只说一次,可以自己思考哦~
)
    ;① 进攻 => 莽冲
    (defrule
        (up-compare-goal choice c:>= 10)
        (unit-type-count archer-line >= 20)     ;检测复杂,此处略写。假设是检测 “我方战力 碾压 敌方战力” 的语句。
    =>
        (set-goal choice 11)
        (chat-to-all "我优势很大,我要莽冲了")
    )
    ;② 进攻 => 风筝绕圈
    (defrule
        (up-compare-goal choice c:>= 10)
        (unit-type-count archer-line < 20)      ;检测复杂,此处略写。假设是检测 “我方战力 稍大于 敌方战力” 的语句。
    =>
        (set-goal choice 15)
        (chat-to-all "我优势不大,执行风筝战术")
    )

;---------- B. 决定撤退 -----------
(defrule
    (up-compare-goal choice c:>= 1)
    (unit-type-count archer-line < 10)          ;检测复杂,此处略写。假设是检测 “我方战力<敌方战力” 的语句。
=>
    (set-goal choice 20)
    (chat-to-all "我决定撤退了")
)
    ;① 撤退 => 直撤
    (defrule
        (up-compare-goal choice c:>= 20)
        (unit-type-count archer-line <= 6)      ;检测复杂,此处略写。假设是检测 “我方战力 远远小于 敌方战力” 的语句。
    =>
        (set-goal choice 21)
        (chat-to-all "我战力太弱了,我要直接撤退了")
    )
    ;② 撤退 => 边打边退
    (defrule
        (up-compare-goal choice c:>= 20)
        (unit-type-count archer-line > 6)       ;检测复杂,此处略写。假设是检测 “我方战力 稍小于 敌方战力” 的语句。
    =>
        (set-goal choice 25)
        (chat-to-all "我劣势不算太大,我要边打边退")
    )

索引:
Userpatch 实用技术贴索引←点击进入
决定版精品贴大索引←点击进入

战役:
《 兔与豹》——柔弱奴隶公主  猛兽口中求生←点击进入
《敛由国的统一》←点击进入

殊途战役制作群 QQ: 616317226
翔鹰帝国Ⅱ:决定版交流群 QQ: 112822759
回复

使用道具 举报

117

主题

9

精华

9万

积分

教皇

Wolotine

耕战
17250
鹰币
546210
天龙币
0
回帖
1571

翔鹰建站十周年纪念章小评论家第十二届火箭筒杯最佳新人第十三届火箭筒杯亚军第十三届火箭筒杯亚军赌徒勋章第八届战鹰杯单人赛冠军

附庸关系11
发表于 2020-4-29 08:57:13 | 显示全部楼层
新桶又熬夜写AI了
回复

使用道具 举报

本版积分规则

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

GMT+8, 2024-11-21 21:07 , Processed in 0.100228 second(s), 36 queries , File On.

Powered by Hawk Studio  QS Security Corp.® Licensed

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

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