レトロRPGを作る-エンカウント後の処理

エンカウント

エンカウントした場合は、現在位置から敵の種類を決定する必要があります。
敵の決定する情報には、ランクとランクに対応する敵グループリストを用意します。
敵グループは種類と数を持ちます。


まず、何らかの方法で現在位置から敵のランクを決定します。
ランクに応じた敵グループリストからランダムに敵グループを選択します。
このとき敵グループには遭遇する確率を設定します。
例えば、乱数は0-255の範囲で乱数テーブルから取得する物とします。
これらの条件の下、JSONで表現すると以下の様になります。

"encount":[
{
"Rank": 1,
"Groups": [
  {
    "Min": 0, "Max": 127,
    "Enemys":[{"uid": 10001, "count": 1}]
  },
  {
    "Min": 128, "Max": 254,
    "Enemys":[{"uid": 10002, "count": 1}]
  },
  {
    "Min": 255, "Max": 255,
    "Enemys":[{"uid": 10003, "count": 2}]
  }
]},
{
"Rank": 2,
"Groups": [
  {
	"Min": 0, "Max": 64,
	"Enemys":[{"uid": 10002,"count": 1}]
  },
  {
	"Min": 65, "Max": 128,
	"Enemys":[{"uid": 10003,"count": 1}]
  },
  {
	"Min": 129, "Max": 255,
	"Enemys":[{"uid": 10002,"count": 1},{"uid": 10003, "count": 2}]
  }
]}
]

ちなみに、マップからランクのみを取得するようにする(つまり、マップと敵グループの間にワンクッション置く)と、シナリオの進行によって敵グループは強くしたい場合、ランク情報は更新せず、別の敵グループ情報を参照する様にするだけで実現できます。

ランクの決定

後回しにしましたが、マップからランクを取り出す方法についてです。
一般的には投げ縄方式か、チップに情報を含めるかの二つぐらいではないでしょうか。
投げ縄の方がデータ量が少なくなりそうですが、複雑な範囲指定を実現するのが面倒です。
一方、チップに埋める場合は、情報を取り出すのが簡単です(座標から一位に決定できます)。
ただし、チップの数だけ情報が必要です。

投げ縄の場合は、チップの座標をポリゴンの座標点とみなすと、特定の座標がポリゴンの内側にあるかどうかを判定する事ができます(アルゴリズム事態はググってみるとこんな感じ)。
投げ縄の数が多かったり数が多ければ処理が重たくなりますが、ランクの計算がエンカウントの際に一度だけ発生するだけですので、大きな問題では無いかも知れません。

M. K. の紹介

IT屋さんです。プログラミングが大好きで今はJavascriptがお気に入りです。
カテゴリー: dq, JavaScript, ゲーム作成   パーマリンク