-1

私の 2D 環境では、プレイヤーは斜め、水平、垂直に移動できます。下のグリッドを見ると、プレーヤー ( としてマークされているx) が現在いる場所から 8 つの異なる場所に移動できることがわかります。

 1 | 2 | 3
-----------
 4 | x | 5
-----------
 6 | 7 | 8

これを次のように保存する代わりに (これは大量のデータです):

Go1 = true;
Go2 = true;
Go3 = true;
Go4 = true;
Go5 = true;
Go6 = true;
Go7 = true;
Go8 = true;

最初に次のように変換する方が良いと思います:

11111111 

..これは 8 回 true を表します。それを念頭に置いて、2 進数 (8 ビット) の 10 進数表現が数値に11111111等しいという知識を持って:255むしろそれを変換し、現在移動可能な場所を として保存し255ます。

コード:

x = parseInt(11111111);
var bin = x.toInt(2);
document.write(bin);​

つまり、(たとえば) 場所 (1、4、および 6) = プレイヤーの左側に壁がある場合、プレイヤーは次の場所にのみ移動できます。

01101011

次のように保存できます107

プレイヤーが location に移動したいとしましょう3。これは、私のスクリプトが次のことを行う必要があることを意味します。

  1. 3 桁の現在移動可能な場所の数を 2 進数に変換します
  2. そのバイナリ コードから 3 番目の数字を取得します
  3. その数が 1 か 0 かを調べる

質問: Javascript でバイナリに変換せずにこれを計算することは可能ですか? はいの場合、どのように?

4

1 に答える 1

0

関連する桁が最下位になるようにビット シフトし、値のパリティをテストします。

function getPositionInRow(rowval, pos) {
    return (rowval >> (8 - pos)) % 2;
}

これは、インデックスが 1 から始まる左から数えて、指定された位置の値を返します。

于 2012-05-04T22:41:26.330 に答える