hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。 |
「スーパーロボット大戦」や「ファイアーエンブレム」のようなシミュレーションRPGに使う、移動可能地点の判定方法について。
ユニット(キャラクター)の持つ移動力と地形の持つ移動コストから移動可能な地点を判定します。
どこまで移動できるのかを調べるには、実際に移動してみるのが1番です。
ここでは、ユニットの代わりに動いて調べてくれるロボットのようなものを考えましょう。
ロボットにはユニットの移動力(移動できるマス数)を与え、ユニットの現在地に設置します。
設置されたロボットは以下の行動表に従って行動します。
ロボットは1度立ち寄ったマスに必ず旗を立てます。
この旗がある所がユニットが移動できる場所となるワケです。
また、旗にはそのマスに到達した時の移動力を記しておきます。
こうしておけば同じ場所を何度も調べずに済むからです(後述)。
そして旗を立てた後、自分の周囲4マスが移動可能であるかどうかを調べます。ここで言う移動可能とは
ことを意味します。
移動力が足りなければ移動できないし、マップ外ならそもそも移動なんてできるわけはないですよね。
3つめの条件の意味は、もし移動先のマスに今以上の移動力で訪れた事があるならば、そのマスに移動する必要がないためです。
ここで旗に移動力を書いたのが活きてきます。[eller]
あまり整形できていないので読み辛いと思いますが…。[eller]
+ | ソースコード |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | - | | | | - | | - | | - | | - | | | | - | ! - | ! ! | ! - | - | ! - | | ! |
|
マップデータには"11121121131"のような文字列を指定します。この文字(0〜9)がその地点に移動するために必要な移動力(コスト)を表します(例えば草原は1、森は2など)。通常0は使わないはずですので、0には通行不可などの意味を持たせても良いでしょう。
このモジュールではローカル変数を使っていますが、FILO記憶法を使うことでも実現可能です。FILO記憶法についてはS.Programs NETさんの小さなねたなどをご覧ください。