algorithm - 在不声明 2 个变量(行和列)的情况下遍历 N 个单元格的网格

标签 algorithm graphics grid formula bounds

我一直在用 JavaScript 开发 Canvas 游戏。

我选择创建不受世界大小网格限制的游戏。因此,如果他们希望使用大小为 N 的网格进行游戏,则逻辑会生成它。

我一直在研究边界检测,并开始编写一个函数,如果用户决定移动到屏幕外,该函数将更改网格上的单元格位置。

为简单起见,我将网格大小缩小到 N = 9,以便您可以直观地看到这一点。网格看起来像

    [0][1][2]
    [3][4][5]
    [6][7][8] 

如果用户要离开 -x 值单元格 [0],他们将出现在单元格 [2] 的最右边的 x 位置。这表示为 SQRT(N)。所以我知道最右边的角是 SQRT(N)。我还知道 N 是右下角的单元格 [8]。

话虽如此,这里是单元格及其方程式 ID 的示例。

   [0][1][SQRT(N)]
   [3][4][5]
   [N - SQRT(N)][7][N]

上面的网格显示了 4 个角的 x 轴公式,但在使用静态魔数(Magic Number) switch-case 条件之前,我至少尝试回答内部单元格方程式是很重要的。

这里是一些 javscript 代码,展示了我正在解释的内容:

if (player.X < 0 - 10) {
    player.X = SCREEN_WIDTH;
    if (gameQuadrent == 0) {
        gameQuadrent = Math.floor(Math.sqrt(WORLD_SIZE));
    } else if (gameQuadrent == (WORLD_SIZE - Math.floor(Math.sqrt(WORLD_SIZE)))) {
        gameQuadrent = WORLD_SIZE;
    } else {
         gameQuadrent--;
    }
 }

有什么更有效的方法吗?我正在尝试解决这个问题,而不必转移到固定的世界大小。

非常感谢。

最佳答案

如果 Quadrent 的数字是 SQRT(WORLD_SIZE) 的倍数,则它位于世界的左边界。因此,以下代码应相应地更新 gameQuadrent。

int side = Math.floor(Math.sqrt(WORLD_SIZE));
if (gameQuadrent % side) == 0) {
    gameQuadrent += side - 1;
}
else {
    --gameQuadrant;
}

关于algorithm - 在不声明 2 个变量(行和列)的情况下遍历 N 个单元格的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8586247/

相关文章:

algorithm - 是否有一种算法可以确定连续区域中的元素数量?

mysql - 如何存储MySQL的结果以便以后排序

database - 算法的简单数学搜索表以查明一种类型的条目是否对另一种类型有因果影响?

Java 2D图形性能问题

python - 对于 NxM 数组,编写一个函数,如果用户输入是 (x,y),它应该返回从 (0,0) 到 (x,y) 的所有值的总和。其中 x<N & y<M

c# - 使用 C# 的二维图形

javascript - 使用 JavaScript 创建倾斜的 Div 和对象

javascript - 具有动态大小图像的马赛克网格画廊

ExtJs4-网格ColumnModel的等效项是什么?

wpf - DevExpress WPF 网格使用 MVVM 绑定(bind)到 List<String>