どうも!
とりあえず今開発中の鬼ごっこゲームは大体実装が終わりました!
といっても今までやってきたことにプラスして経路探索を実装しただけですけどね。
それだけでもとりあえずはめでたしめでたしです。
ということで早速次回作を考えてみます!
最終目標はリアルタイムストラテジーゲームを自作すること
そもそも私のゲーム開発の最終目標は
リアルタイムストラテジーゲームを自作することです。
既にゲーム開発をされている人からしたら「いや、無理だろ」って
思われるかもしれませんしぶっちゃけ私もそう思っています 笑
でもこれが昔からの夢だったんですよねー!
RTSゲームを自作するっていうのをしてみたいんです。
なぜそう思ったか?
誰からも需要は無いのは知っていますが
自分のやる気アップのために理由を記載しておこうと思います。
始めてRTSゲーム自作したいって思ったのは中学生の頃です。
当時死ぬほどAge of Empires Ⅱを遊んでいてめちゃくちゃ楽しかったんですね。
毎日AoEをするために生きていたと言っても過言ではありません 笑
AoEⅡにはカスタムキャンペーンというのがあり自分でキャンペーンを作れたんです。
それを知って早速自作の物語を作っていきました。
で自作したキャンペーンを自分で遊んでいたんですが
結構面白かったんですよ、自画自賛なんですが。
中学生が作った自作キャンペーンなので第三者目線では多分面白く
ないんでしょうなとは思っています 笑
カスタムキャンペーンでも色々なことが出来たのですが
当時の記憶としてはもっとこうしたい!って思うことがあっても
機能がなくて実装できないっていうのがあったんですね。
そこから自作のRTSゲームを作ってみたいって思うようになりました。
リアルタイムストラテジーゲームの概要
ということで熱意はそこそこあるつもりですが
とはいえリアルタイムストラテジーゲームって
言うまでもなく作るとしたらめちゃくちゃ複雑なゲームです。
リアルの世界とあまり変わらない戦争ゲームですからね。
戦術を考えないといけないのに更にそれをリアルタイムで
実行していくというややこしさです。色々な要素が複雑に絡まっています。
とりあえずRTSゲームの概要を書き下してみましょう。
<ゲームの流れ>
・資源収集ユニットが資源を集める
・資源を消費して軍事施設又は資源回収施設を建設する
・軍事ユニットを生産する
・軍事ユニットに命令して敵の領地に攻め入る
勝利条件:敵ユニットの全滅、降参
敗北条件:味方ユニットの全滅、降参
大体こんな感じですよね。
で、難しいところでいうとまずユニット毎にAIが必要ですね。
資源を採取したり敵が一定範囲内にいたら攻撃を仕掛けたり
いつ何をするか逐一判定する必要があるので難しそうですよね。
更に難しいのが敵プレイヤーの動作です。
つまり戦術的思考をどうやって実装するか。
資源を集めるか?敵に攻撃を仕掛けるか?
施設を建設するか?軍事ユニットを育成するか?
無限大とも言える選択肢がある中で今すべきことを決めて
それを実行するためにユニットに命令を出します。
つまり人間がプレイしているように思えるぐらいのAIを作らないといけません。
AoEⅡの敵って実際に人間が操作していると思えるくらい
色々な命令が適切にこなされています。
これは正直すげーっすよね、どうするんだよって思います。
魔法みたいです。
既に20年以上前に発売されたゲームなのに
未だにかなりハイレベルな複雑なロジックだと思います…
とりあえずAIを分けてみる
全部を一気に考えると訳分からなくなって
頭がこんがらがっちゅれーしょんの
複雑になってしまいますので
まずは大きくAIを分けてみましょう!
とはいえ頭のよくない私一人で考えても
細分化するのは一生無理だと思います!
ということで外部記憶に頼ることにしました。ググレカスですね。
以下論文を見つけ出して読んだのでこちらを参考に考えてみました!
ということでRTSゲームの敵AIは大きく以下3つのAIに分けられると思います。
・諜報AI
・指令AI
・ユニットAI
この3つが組み合わさって人間のような振る舞いをする
敵AIが出来上がっていると考えてます。
間違っているかもしれませんが多分そうだろう!って思っています。
まぁとりあえずそれぞれのAIの動作について説明いたします。
諜報AI
相手の情報やマップの情報を取得しようとします。
どこにどんな資源があり、どこに敵の施設があるか、敵の軍事力は
どれぐらいかを調べます。
大体資源はゲーム開始初期には町の中心に近い場所から採取しますよね。
無くなっていったらどんどん遠くの資源を回収していきます。
敵の軍事力は味方の偵察ユニットをマップ上に駆け巡らせて
地図の分かっていない部分を明らかにしていって調べていきます。
こちらについては「戦場の霧」の考慮が必要になります。
AoEⅡでいうマップ上で黒く隠れているところですね。
これなんか名前ついてるんかな?って思っていたのですが
「戦場の霧」っていうらしいですよ!
とりあえずどこになにがあるかを調べるのが諜報AIになります。
指令AI
指令AIは自分の資源がどれぐらいあるかや
相手の軍事力、こちらの軍事力を比較し
今どういう行動をすべきかを判断します。
具体的には
・資源確保
・敵への攻撃
・施設強化
・ユニット育成
のいずれかの行動をとるかを判定します。
諜報AIからもらった情報をもとに
どの行動をすべきか判定してユニットに命令を出します。
ユニットAI
指令AIからの命令を実行します。
ここでの移動に今回実装した鬼ごっこの
経路探索などが必要になりますね。
色々調べてみたら経路探索の発展形みたいな形で
「影響マップ」というのがありました。
こちらを簡単に説明するとA*でのコストに敵の位置を加えます。
敵に近い位置はコストが高くなり敵に遠いとコストが低くなるって感じですね。
もしくは敵の向いている方向のコストが高くなったりします。
cygamesブログっていうのを見つけたのですが
こちらの真ん中あたりにgifがあるので
それを確認すると「影響マップ」がどんなものなのか分かると思います。
なんとなくわかったんで、じゃぁどうするか?
ということでなんとなくではありますが
どんなAIを作ればいいのかわかってきました。
しかし一気に全てのAIを実装しようとしたら
私の脳内が爆発してしまう可能性があります。
というかほぼ100%爆発してしまうことでしょう。
むしろ爆発しない方が珍しいでしょう。
じゃぁどうしようかって話なのですが
とりあえず指令AIとユニットAIを実装したゲームを次回作で
開発していこうと思います!諜報AIは無視ですね。
最初から複雑なゲームを作ろうとすると挫折するので
まずはめちゃくちゃ簡単な作りのゲームを作っていこうと思います。
例えば敵1ユニット、味方も1ユニットで対戦するゲームです。
こんなの諜報AIを作る必要もないですね。
このくらい簡単な状況でなら指令AIがどういった判断を下すべきか
わかりやすいですからね。
ここから少しづつ状況を難しくしていこうと思います!
おわりに
今回はリアルタイムストラテジーゲームを作る第一歩として
敵AIについて考えてみました。
とりあえず1ユニット毎の対戦という簡単な作りから
実装していく計画です。
2ユニット毎、3ユニット毎と増やしていって最終的に
100対100の戦争ゲームを作ってみたいですね!