移動方向と壁
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軸方向の移動で左右の端から反対側の端にワープしてしまう。
逆にこれをギミックとして取り入れることもできる。
この記事が気に入ったらサポートをしてみませんか?