見出し画像

移動方向と壁

var Map = {
  size: 32,
  grid: [ ]
}

var System = {
  translation: function (p,o,k){
    var d=[ 1, Map.size, -Map.size, -1]["0123130220313210".charAt(o*4+k)];
    return Map.grid[ p+d ] ? p : p+d ;
  }
}

2次元マップの移動時の処理

p:position プレイヤーの一次元位置(二次元マップを一次元で管理)

o:orientation プレイヤーの方向(4方向、0:x方向、1:y方向、2:-y方向、3:-x方向)東西南北の絶対的方向

k:key プレイヤーの入力した方向(orientationと同じだがプレイヤー視点での方向なので相対的な方向)

プレイヤーの位置と方向、キー入力した相対的方向から絶対的方向に変換し、移動する一次元位置の差分を求めて次の移動位置を取得する。

壁がある場合は今の位置が返される。

Map.gridの配列が壁か通路で、1が壁、0が通路で表す。

マップはサイズの2乗で表される正方形。

マップ外周は壁で囲まれる仕様。

マップ外周を壁にすることで1次元配列で管理できる。

マップ外周を壁にしないとX軸方向の移動で左右の端から反対側の端にワープしてしまう。

逆にこれをギミックとして取り入れることもできる。



この記事が気に入ったらサポートをしてみませんか?