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