【ウディタSRPG】改良④敵アルゴリズム

このゲームの敵ユニットの動きを決定するコモンEvを改造していきます。


手を加える箇所は以下の二点。

角度を利用して移動を効率化

例えばこんな状況の時、敵が青いユニット、味方が赤いユニットとすると、敵ユニットはどのマスに移動するのが自然でしょう?




次のターンに赤いユニットが移動して逃げられたりすることも考えると、座標(7,6)に移動するべきだと思うんですよ。



実際にはどうなるか?
試してみました。


はい、というわけでこの通り座標(10,3)に移動します。



理由は単純で、敵ユニットにとって以下の黄色いマスはどれも赤いユニットまでの距離が等しいので、評価値も同じだからなんです。

評価値は左上のマスから右下のマスへこんな具合に上から順に計算しているので、最初に評価値が最高点となる座標(10,3)が有効と判断されてしまうわけですね。


これの解決方法はずばり角度
青いユニットと移動先座標との角度と、青いユニットとターゲットの赤いユニットとの角度ができるだけ一致する移動をすれば、より効率が良くなるはずです。

※(注意)ウディタではx軸が右に正、y軸が下に正で伸びている



さあーて具体的な改良内容ですが、まずは完成形を見せるとこんな感じ。
コモンEv265[■敵AI処理]です。

あとで気付いたんですが、イベントの挿入って名前で呼出ができるんですね(イベントの挿入[名]ってやつ)
そりゃそうだー!って話なんですけど、完全に見落としてました汗
今後はちゃんと名前呼出つかいます



ご覧の通りコモンEvを大幅に改造したので、いちいち説明してたら面倒!
ということでフローチャート作ってきました。えらい。


まずは改造前のコモンEvの処理は大体こんな感じでした↓


これをこんな風に処理を追加・改造します↓


対象のユニットと指定の座標の角度を求めるコモンと、角度の一致率を計算するコモンは自作しました。

角度計算コモン

角度一致率計算コモン


※本来はわざわざ割合(%)まで計算する必要はないけど


イベントコードも載せておきます。

WoditorEvCOMMAND_START
[103][0,1]<0>()("処理中IDの座標")
[124][4,0]<0>(1600010,4096,1600000,0)()
[124][4,0]<0>(1600011,4096,1600000,1)()
[103][0,1]<0>()("増加量")
[121][4,0]<0>(1600015,1600001,1600010,4096)()
[121][4,0]<0>(1600016,1600002,1600011,4096)()
[103][0,1]<0>()("角度(傾き)")
[121][4,0]<0>(1600004,1600015,1600016,63744)()
WoditorEvCOMMAND_END
WoditorEvCOMMAND_START
[121][4,0]<0>(1600012,1600000,1600001,6144)()
[103][0,1]<0>()("角度の差分は円の半周(180°)を超えると逆に小さくなるので工夫が必要")
[121][4,0]<0>(1600011,1800,1600012,6144)()
[103][0,1]<0>()(" ")
[103][0,1]<0>()("一致率(%)を計算したいので先に×100する")
[121][4,0]<0>(1600013,1600011,100,8192)()
[121][4,0]<0>(1600013,1800,0,1024)()
WoditorEvCOMMAND_END

これでちゃんとターゲットに接近する敵アルゴリズムになったはず...

ターゲット攻撃の評価値アップ

例えばこんな状況の時、敵の青いユニット赤いユニットAよりも赤いユニットBのほうがマス数距離が近いので、赤いユニットBをターゲットにするはずです。(マス数は障害物や移動不可マスを考慮していないので)

ですがこれも実際に試してみると...

赤いユニットAを攻撃してしまいます。


一応理由を説明しておくと、

①ターゲット(赤いユニットB)に接近はする
②ただし、攻撃先はターゲットに関係なく探索される
③探索は移動先マスの左上のマスから右下のマスへ順番に行われる
④従って、赤いユニットBよりも上にいる赤いユニットAが攻撃対象として優先されてしまう
という状態だからなんですよね...。

なので、しっかり元のターゲット(赤いユニットB)を攻撃できるように、評価値計算を少し工夫します。


他にも気になる点はあるのですが、ひとまずこれで最低限ゲームができる状態だと思うので終了!!
お疲れさまでした!



ここまでは僕以外の人にも参考になるかもしれないので講座っぽく?やってきましたが、次回からはいよいよエヴァゲーム用に諸々改造していくので、実装報告的な内容になると思います!