查找带索引的2d数组的边界

时间:2014-12-15 20:18:47

标签: algorithm grid

我知道这个问题看起来像其他一些问题。但我认为,由于差异很小,这与我在Stackoverflow的其余部分找到的完全不同。

所以我的问题是我正在制作一些小型棋盘游戏,我想向各个方向移动,所以向上,向下,向左和向右。当我这样做时,我必须知道每个方向的界限。我想对此有一些通用的东西,所以如果我有任何数字,我会向任何方向前进。我可以计算边界单元是什么,例如我从11开始想要向左走,所以我应该得到9号边框。如果我从6开始,我想要下去,我会得到14作为我的边界号码。

这是我代表我的董事会的方式。所以我在一维数组中进行,数字索引+ 1表示它们在板上的位置。

+--+--+--+--+
|1 |2 |3 |4 |
+--+--+--+--+
|5 |6 |7 |8 |
+--+--+--+--+
|9 |10|11|12|
+--+--+--+--+
|13|14|15|16|
+--+--+--+--+

对此有任何经验的人?谁知道如何获得这个边界号的简单方法?

谢谢

1 个答案:

答案 0 :(得分:0)

从1D坐标转换为2D坐标,根据需要更改x和y值,然后转换回1D坐标。

function boundary(idx, direction){

    rows = 4;
    cols = 4;

    idx -= 1;

    x = idx % cols;
    y = int(Math.floor(idx / cols));

    if (direction == "left"){
        x = 0;
    }
    else if (direction == "right"){
        x = cols-1;
    }
    else if (direction == "up"){
        y = 0;
    }
    else if (direction == "down"){
        y = rows-1;
    }

    return cols * y + x + 1;
}