戦術画面で移動可能範囲を探査します。当ページは移動可能範囲を調べるにあたって、その全体像を掲載しています。考え方を把握しましょう
シミュレーションゲーム作成工房 より強力な思考ルーチンを求めて
ゲーム作成講座 | 地政学 | 無料ダウンロード | 当サイトについて | 更新履歴 | サイトマップ | リンク |

移動可能範囲 経路探索処理 その1 戦術画面で必要不可欠な移動可能範囲の調べ方

移動可能範囲を計算する手順は次の通りだ。
戦術マップの左上、座標(1,1)から右方向へユニットが存在するかどうかをチェックしていく。
現在、座標(3,3)に味方のユニットがいる。
 
次にこの座標(3,3)を基準にして、周りの座標へ移動可能であるか調べに行く。
上、右、下、左の順にチェックを行い、移動可能なら、移動力を1減らした値をそこへ格納する。
移動力はWaik配列を使っており、10×10の2次元配列内へ、とこへ移動したときの残りの移動ポイントを
格納する。1歩動くごとに移動力を1消費するとして、初期座標(3,3)から周囲へ動いた場合、残りの移動
ポイントは「2」になる。
 
pubMoveルーチン処理へ飛ばして、移動可能範囲を探る。
この処理は「経路探索処理」と呼ばれているようなので、当サイトも名前の使用に当たって倣うことにした。
 
 
 
戦術マップに登場するユニットは、4種類で、すべて同じ移動力「2」をもっている。
そして、1歩移動するごとに移動力を1消費するものとする。つまり、2マス分しか動けないわけだ。
ただし、プログラムの関係上、最大移動力は「3」として変数・配列等へ格納するものとする。
 
pubMove2ルーチンを眺めてみよう。
ここでは、上右下左の座標(マス目)への経路を格納している。
「U」「R」「D」「L」という記号をstrDerectionString変数へ格納していく。
「U」はUpの、「R」はRightの頭文字だ。
 
 
pubMoveChkルーチンは、その座標へ移動できるかチェツクするプログラムだ。
戦術マップの外へ出てはいけない、通行不可能なところであってはならない、ユニットがいてはならない、など
の条件がある。そして移動可能だと分かれば、MoveDerection配列へ、そこまでの経路を文字列で格納する。
 
 
MoveDerection配列に、「RD」と入っていたら、右、下の順に移動すれば、そこへたどり着けるという意味に
なる。またWalk配列は何を意味しているのかというと、移動可能な座標へ移動したときの残りの移動ポイント
である。
当然、遠くへ行くにしたがって減っていく。最終的には、次のような値の格納された配列を作ることである。
 
 
2次元配列を分かりやすくするために、X座標・Y座標からなるマトリクス(表)で示した。
の部分が現在、そのユニットのある座標である。隣へ動こうとすると移動力が1減る。
配列の初期値は0であるから、0を移動不可能な座標と考えている。
 
Walk(3,2)やWalk(4,4)は、移動不可能にして(「おまけ」としてプログラム内に書き込んだ部分)、処理を抜けて
いるから、入っている値は初期値の0である(思い出してください)。
 
 
MoveDerection配列には、そこへ行き着くまでの経路が文字列として格納される。
MoveDerection(2,2)に「LU」と入っているのは、座標(3,3)から左、上へ移動すると、その場所へたどりつく
という意味である。LはLeft、UはUpの頭文字を示している。
  
MoveDerection(2,4)が「DL」であって「LD」でないのは、プログラムの処理上から、そのようになってしまうため。
結果として、移動先は同じになるが経路が異なることになる。経路の違いで生じる問題は、後の課題とする。
(同地点に行くためのルートがふたつあるとして、一方のルートには敵が隠れているとか)
 
移動範囲探査処理はけっこう複雑なので、詳細に見ていくことにする。
 
Google
 
 
 
 
 
 
ゲーム作成講座 | 地政学 | 無料ダウンロード | 当サイトについて | 更新履歴 | サイトマップ | リンク |
Copyright (C) シミュレーションゲーム作成工房, All Rights Reserved.