このページでは、ROのAIの仕組みではなく、
C言語などのプログラムというもの自体の仕組みについて説明します。
メイン関数
プログラムの中身を見ると、たくさんの関数が書かれていると思いますが、
コンピュータがやってるのは、メインとなる関数を繰り返し実行してるだけなんです。
C言語などでアプリを作ると、たいてい Main() という関数がメインになります。
ROのAIは AI() がメイン関数です。
他の関数はメイン関数の中で呼ばれることで使われます。
1 2 3 4 5 6 7 8 9 10 |
AI () -- 1回目の実行 -- 他の関数を呼んでいろんな処理をする end -- 1回目が終了 AI () -- 2回目の実行 -- 他の関数を呼んでいろんな処理をする end … -- 繰り返し |
グローバル変数
上の例だと、毎回同じ処理しかできないので、
if文などの条件分岐とフラグ用の変数を用意します。
関数の外に書く変数は、グローバル変数と言って、
プログラムを実行するときに一度だけ読み込まれ、
どこからでも中身を変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
flag = 0 -- プログラムの実行時に一度だけ読み込まれる AI () -- 1回目の実行 if (flag == 0) then -- 他の関数を呼んでいろんな処理をする flag = 1 -- フラグを変更 else end end -- 1回目が終了 AI () -- 2回目の実行 if (flag == 0) then else -- 1回目でフラグの中身が変更されてるのでこっちになる -- 他の関数を呼んでいろんな処理をする flag = 0 -- フラグを変更 end end … -- 繰り返し |
まとめ
以上のことから、プログラムの何処にどんなことが書いてあるかをまとめると、次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
フラグに使ったりする、 グローバル変数を宣言する部分 A = 10 B = 0 C = true … メイン関数から呼んで使われる、 様々な処理が並ぶ部分 calc() Attack() defense() … 繰り返し実行されるメイン関数 Main() |
AI.lua の流れ
上記の説明でプログラムというものの流れを理解したなら、
AI.lua の中身を解読できると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
-- グローバル変数 MyState = IDLE_ST -- ホムが何の行動中か記憶しておくためのフラグ -- 召喚時は敵がいないときの索敵処理をさせるようにする -- メイン関数 AI () -- ホムが何の行動中かフラグを見て、その行動内容が書いてある関数を呼ぶ if (MyState == IDLE_ST) then OnIDLE_ST () elseif (MyState == ATTACK_ST) then OnATTACK_ST () end end |