前回の記事で何を書いてたかすらおぼろげですが、
とりあえず、
ユニットの滑らかな動きを実装しようとする→挫折。
陣形をスマートに構成させるようにする→挫折。
あきらめて素直にAIの実装→四苦八苦→何とかできた。
ということがありました。
なんにせよ、とりあえずAIを作りました。AIについては、
統括AI
|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
戦術AI ―協力― 内政AI
このような形にしようと思っています。
今回実装したのは戦術AIで、統括・内政AIはまた今度。
戦術AIを作ったといっても、形だけで何もしません。
じゃあ何を作ったんだというと、軍団のAIです。
最下位をユニットとおいて、最上位をPlayerとおくと、
●プレイヤー(人間)の場合
プレイヤー
↓ 指示(操作)
ユニット
●AIの場合
統括AI → 内政AI
↓ 指示
戦術AI
↓ 指示&組織
軍団
↓ 指示
ユニット
ゲーム進行はこのような手順で行われます。
プレイヤーの軍団は、プレイヤーが勝手に見立てるだけで、
内部の処理として作られるわけではありません。
それに対し、AIでは全ての兵士ユニットを何らかの軍団に配備し、
その軍団は戦術AIから指示を得て、それを実行します。
現状では、戦術AIは「KillEnemy」(=敵を殲滅しろ)という指示しかしません。
軍団は、その指示を受け取ると、目標を「EnemyIsDead」(=敵が殲滅される)を定め、
次の行動から適当なものを選択します。
Action_AttackEnemy … 敵に攻撃
― 前提条件:敵が見える&敵に近い&整列している
結果 :敵が殲滅される
Action_ApproachEnemy … 敵に接近
― 前提条件:敵が見える
結果 :敵に近い
Action_Arrange … 整列
― 前提条件:なし
結果 :整列している
指示を受け取った状態では、なにもありませんから、Action_Explore … 探索
― 前提条件:なし
結果 :敵が見える
選ばれる行動は”前提条件なし”のものに限られます。
軍団AIは指示を受け取った段階で、その目標を満たすまでの一連の行動を組み立てます。
例:探索 → 接近 → 整列 → 攻撃
実際の軍団AIが組み立てた一連の行動: 無駄が多いのはそのとおりで、最適な行動を組み立てる処理がまだ出来ていないせいです。
まいどのA*アルゴリズムを使おうとしたのですが、適用するのが難しくて、
結局、ただ単調に目標を満たすまでの行動を組み立てあげる処理を作りました。
まあ、その結果、上のような無駄が出てしまうのです。いつか改善する予定です。
これで、一応、遊べる(?)ようにはなったので、
どんなシロモノなのか、AIの動きに関心があればやってみてください。 AIの行動は、
白いものが終えた行動、
オレンジが現在実行中の行動、
緑のものが将来の行動
です。
AIはわりかしバカなので、ヘタなことをしない限りは勝てます。
ちなみに、勝利・敗北の判定はないので、敵/味方ユニットが全滅しても何も起こりません。