-1

在我的 2D 环境中,玩家可以沿对角线、水平和垂直方向移动。查看下面的网格时,您可以看到玩家(标记为x)可以从他(或她 xD)现在所在的位置移动到 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次真实。考虑到这一点,并且知道二进制数11111111(8 位)的十进制表示等于数字:255我宁愿转换它并将当前可能移动到的位置存储为255.

代码:

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

这意味着如果(例如)位置(1、4 和 6)= 玩家左侧有一堵墙,则玩家只能移动到:

01101011

可以存储为:107.

假设玩家想要移动到 location 3。这意味着我的脚本必须执行以下操作:

  1. 将 3 位当前可能的位置移动到数字转换回二进制
  2. 从该二进制代码中获取第三个数字
  3. 检查该数字是 1 还是 0

问题: 是否可以在不使用 Javascript 来回转换为二进制的情况下进行计算?如果是,如何?

4

1 回答 1

0

位移,使相关数字是最低有效位,然后测试该值的奇偶校验:

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

这将在指定位置返回值,从索引从 1 开始的左侧开始计数。

于 2012-05-04T22:41:26.330 回答