AIを作るときのテクニック集です。
定期タイマー
定期的に何かをしたいときには、以下のようにします。
以下の例では攻撃命令に使っている例です。(30秒ごとに判定し、兵数が40以上あれば攻撃命令を下す)
;攻撃タイマーの例
;-------------------- 共通機能(上側) ここから --------------------
;●タイマーの初期化
; メモ:初回のみ動作する
(defrule
(true)
=>
(set-goal 5 0)
(enable-timer 7 30) ;タイマー7に30秒をセット
(chat-local-to-self "タイマーが初期化されました")
(disable-self)
)
;●フラグ立て
; メモ:タイマーが満たされたので、フラグを建てる
(defrule
(timer-triggered 7)
=>
(set-goal 5 1)
)
;-------------------- 共通機能(上側) ここまで --------------------
;-------------------- メイン ここから --------------------
;●攻撃命令
(defrule
(goal 5 1) ;フラグが立っている
(soldier-count >= 40) ;軍数が 40 以上
=>
(attack-now) ;攻撃命令
(chat-local-to-self "攻撃しろ")
)
;-------------------- メイン ここまで --------------------
;-------------------- 共通機能(下側) ここから --------------------
;●タイマーの再スタート
; メモ:メイン処理を過ぎたので、タイマーを再スタートさせる
(defrule
(goal 5 1) ;フラグが立っている
=>
(set-goal 5 0) ;フラグを倒す
(enable-timer 7 30) ;タイマー7に30秒をセット
(chat-local-to-self "タイマーが再スタートしました")
)
;-------------------- 共通機能(下側) ここまで --------------------
つまり、「タイマーが満たされたら、メイン処理の間だけはフラグが立っている状態にしている」ということです。こうすることで、様々な箇所で使えるようにしています。
最終更新:2023年03月12日 23:14