如何读取多维数组中[i,j]下的数字?

时间:2019-06-21 18:50:24

标签: c# unity3d

我正在用统一3D制作游戏,首先要创建世界地图。我为每个图块分配一个高度值来确定景观,但是当我尝试读取周围图块的高度值时,程序将冻结。

这是我第一次使用多维数组,所以我可能做错了什么。否则,我尝试重新排列逻辑并仔细考虑,但没有发现任何东西。

我首先用任意高度填充多维数组,如下所示:

public int worldWidth; 
public int worldHeight;
int[,] tileHeight = new int[4, 4];

//assign height values
    for (int j = 0; j < worldWidth; j++)
        {
            for (int i = 0; i < worldHeight; i++)
            {
                tileHeight[j, i] = Random.Range(15, 115);
            }

        }

在那之后,我实例化了磁贴,但是我认为代码是无关紧要的。 接下来,我将每个磁贴取下,读取其上方,下方,左侧和右侧的高度,然后求和。然后,我将该数字保存到其适当位置的多维数组中。这是我的代码:

            {
                for (int p = 0; p < worldWidth; p++)
                {
                    int NHeight;
                    int EHeight;
                    int SHeight;
                    int WHeight;

                    //if (o > 0) { NHeight = tileHeight[o--, p]; } else { NHeight = 0; }

                    //if (p != 3) { EHeight = tileHeight[o, p++]; } else { EHeight = 0; }
                    //if (o != 3) { SHeight = tileHeight[o++, p]; } else { SHeight = 0; }
                    //if (p != 0) { WHeight = tileHeight[o, p--]; } else { WHeight = 0; }

                    plane[o, p] = (NHeight + EHeight + SHeight + WHeight) / 4;
                }
            }

为了阐明我在这里要做什么,让我举个例子。假设我有多维数组:

{ {3, 5, 2},
  {2, 8, 5},
  {4, 6, 2} }

理想情况下,我的代码将从[0、0]或4开始,并得到数字2、6、0和0并将它们取平均值,得到2。然后我的数组将看起来像:

{ {3, 5, 2},
  {2, 8, 5},
  {2, 6, 2} }

在那之后,我的代码应转到[0、1]或6,并得到数字2、8、2和0,答案为3,使我的数组看起来像这样:

{ {3, 5, 2},
  {2, 8, 5},
  {2, 3, 2} }

我想让它遍历整个数组。

我有几个问题。当我不运行四行注释的代码并运行Debug.Log();时,一切正常。但是,当我开始使用带注释的行运行代码时,它将开始跳过数组的行,并且如果我全部运行四个程序,则程序将冻结(或花费很长时间,以至于我假设它已冻结)。我以为我的逻辑上有缺陷,但是在过去的4个小时里,我一直在打开和关闭该代码,但找不到任何东西。我也觉得我在for循环中从tileHeight读取的方式可能有问题。任何帮助表示赞赏!

0 个答案:

没有答案