Как я могу прочитать число ниже [i, j] в многомерном массиве? - PullRequest
0 голосов
/ 21 июня 2019

Я делаю игру в Unity 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 часов и не могу ничего найти. Я также чувствую, что может быть что-то не так с тем, как я читаю из tileHeight в циклах for. Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...