btn_arrowcmn-facebookcmn-tiktokcmn-twittercmn-xcmn-youtubecorroborationengineerEngineerhamburgericon-angleicon-arrow-bottom-lineicon-arrow-diagonal-01icon-arrow-diagonal-02icon-arrow-next-01icon-arrow-next-02icon-arrow-strokeicon-arrowicon-close-btnicon-externalicon-facebookicon-fukidashi-01icon-fukidashi-02icon-fukidashi-03icon-fukidashi-04icon-fukidashi-05icon-fukidashi-06icon-fukidashi-07icon-fukidashi-08icon-fukidashi-09icon-fukidashi-10icon-fukidashi-11icon-fukidashi-12icon-fukidashi-13icon-fukidashi-14icon-fukidashi-15icon-fukidashi-16icon-fukidashi-17icon-fukidashi-18icon-fukidashi-19icon-hatebuicon-instagramicon-is-index-illust-01icon-is-index-illust-02icon-is-index-illust-03icon-lineicon-linked_inicon-pinteresticon-rank-dash-offseticon-rank-frameicon-rank-no-frameicon-rank-trophy-item-01icon-rank-trophy-item-02icon-rank-trophy-staricon-triangle-01icon-triangle-02icon-twittericon-xicon-youtubeis-bg-book-01is-bg-book-02is-bg-book-03is-bg-book-04is-bg-book-05is-bg-book-06is-bg-boxis-bg-cupis-bg-desktopis-bg-flagis-bg-glassis-bg-hatenais-bg-human-01is-bg-human-02is-bg-human-03is-bg-human-04is-bg-pcis-bg-plusis-bg-smartphoneis-feature-01-lineis-font-daiis-font-gokuis-font-jiis-font-senis-footer-illust-01is-footer-illust-02is-nav-arrowis-prologue-boxlicense-foreignlicenselogo-gree

【TECH BLOG #31】タクティクスゲームにおける必須ロジックについて

グリーエンターテインメント株式会社にて「NARUTO -ナルト- 忍コレクション 疾風乱舞」(通称:ナルコレ)の運営を担当しているエンジニアの市川です。
今回は昨年にナルコレ のアップデートで追加されたタクティクス版で使用する必須ロジックについて幾つかお話ししていこうと思います。

タクティクスゲームとは

タクティクスゲーム

Tacticsを翻訳すると「戦術」という意味になります。
「戦術」とは、戦闘の任務達成のため部隊を効果的に配置して戦闘力を運用する術。
タクティクスゲームもこの「戦術」がメインになります。
一般的なルールは以下のようになっています。

・小隊規模でお互いコマ(ユニット)を使って対戦する
・プレイヤーと対戦相手が決まった順番で行動する
・ターンごとにプレイヤーは考慮時間を得ることができる

ストラテジーゲーム

似たジャンルでStrategyゲームがあります。
Strategyを翻訳すると「戦略」という意味になります
「戦略」は目的を達成するために、長期的視野で力や資源を総合的に運用する技術です。

戦術は戦闘に置いて現場で活用する術だとしたら、戦略はより広い視野で長期的に運用する術と言えます。

Tacticsゲーム開発で考えること

移動可能範囲の作成

ナルコレのタクティクス版のマップは基本20×20マスで構成されています。
このマスの中でキャラクターを動かすのですが、ルールがあります。
タクティクス版のキャラクターはそれぞれ移動力のプロパティを持ち、この数値が1であれば動作させるキャラクター(P)の位置から上下左右に1マス移動する事が出来ます。

移動力が3であれば3マス分移動することが可能です。

また、ナルコレタクティクス版では移動不可(赤色)マスがあります。
その場合はそのマスを通過する事が出来ないので次の画像のように移動範囲が狭くなります。

この移動可能マスの範囲を検索するには再帰処理を使い、起点のマスに隣接した上下左右のマスに移動可能かを調べて行きます。
移動不可なマスがあればそのマスの再帰処理はスキップします。
移動可能であればそのマスを起点として再帰処理を実行します。
再帰処理を呼ぶ際に残りの移動可能数を渡し、移動可能数が0になれば再帰処理を
終了し、全ての処理が終了すれば移動可能マスの範囲が求められます。

経路探索

次に必要な処理として経路探索ロジックです。
これは、例えば自軍のキャラクターをAutoモードで移動させる時や対戦相手のAIが移動する時の処理に使用されます。
この処理についてざっくり話していきたいと思います。

例えばPからEまで移動するとしたら座標の差分を取ればX.Y座標の移動距離が分かります。

しかし今回のタクティクス版では移動不可のマスがあるので以下のようなケースも存在します。
その場合どうやってPからEまでの移動経路を見つけ、且つ無駄のないように最短経路で移動できるかを考える必要があります。

今回はA(エースター)アルゴリズムを採用しました。 Aアルゴリズムはダイクストラ法とヒューリスティック関数を組み合わせたアルゴリズムです。

「ヒューリスティック関数」とは2点間の距離を求める関数です。
この関数の計算式は次のようになっています。
|X1 – X2 | + | Y1 – Y2|

ではどのようにPからEへのルートを検索するか以下のケースで考えます。

まず1つ目ですが、Pからの移動距離を各マスに設定します。
以下の図で言うと黒い数字の部分です。

2つ目は該当のマスからEまでの残りの距離を各マスに設定しています。
以下の図で言うと赤い数字の部分です。
最後に黒い数字赤い数字を足した青い数字を各マスに設定します
青い数字が先ほど話した「ヒューリスティック関数」になります。

最短ルートはEから青い数字が小さい順に辿るとPに辿り着くのでそれが最短ルートになります。

最後に

これからもナルコレは新しい機能を追加したりユーザビリティ向上のための改修を入れたりとアップデートをしていくと思います。それによってユーザーがナルコレをより楽しく、より好きになってもらえたら開発者としてとてもうれしく思います!
今後もナルコレをどうぞお楽しみください。

▼「NARUTO -ナルト- 忍コレクション 疾風乱舞」 ゲームはこちら
・App Store
https://itunes.apple.com/jp/app/naruto-naruto-renkorekushon/id960154916?mt=8

・Google Play™
https://play.google.com/store/apps/details?id=jp.co.crooz.android.AppNarutoDash&hl=ja

最後までお読みいただきありがとうございました。

グリーエンターテインメント株式会社 広報担当

東京都港区六本木6-10-1 六本木ヒルズ森タワー

E-mail:info-ent@ml.gree.net