2015-04-06 2 views
0

Надеюсь, это не похоже на простой вопрос. Я уже до этого мог заполнить 2D-массив этим методом. Но я не уверен, как использовать эту сетку или подобную сетку для заполнения 3D-массива. Это может быть очень простой вопрос, но я надеюсь, что кто-то может указать мне в правильном направлении. Я хочу использовать его для создания 2-го уровня игры.Как заполнить трехмерный массив с определенными значениями

int[][][] LevelGrid = new int[LevelGridHeight][LevelGridWidth][3]; 

int[][][] start_Grid = { {5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, 
         {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, 
         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, 
         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, 
         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, 
         {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, 
         {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,} } 

Thankyou

+0

Зачем вам третий параметр? Не можете ли вы просто использовать новый int [LevelGridHeight] [LevelGridWidth] –

+0

Для получения конкретной информации о каждой области уровня – Espore

ответ

1

Вы можете думать о одномерном массиве как массив «вещи», вещи является любым типом массива.

int[] array1 = {1, 2, 3}; 
int[] array2 = {4, 5, 6}; 
int[] array3 = {7, 8, 9}; 
int x = array1[0]; 

Вы можете думать о двумерный массив как массив массивов.

int[][] array2d= {array1, array2, array3}; 
    int[] xArray = array2d[0]; 
    int x = xArray[0]; //array2d[0][0]; 

И вы можете думать о трехмерном массиве как массив массивов массивов.

int[][][] array3d = {array2d_1, array2d_2, array2d_3}; 
    int x = array3d[0][0][0]; 

Таким образом, вы можете построить подмассивы первый, а затем добавить их в 3D-массив, или вы можете сделать все это в одном блоке:

int[][][] array3D = { 
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} }, 
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} } 
}; 

Edit: Вот пример построения подмассивы первой, а затем здание 3d-массив из них:

void setup() { 

    //one-dimensional arrays are arrays of things 
    int[] array1 = {1, 2, 3}; 
    int[] array2 = {4, 5, 6 }; 
    int[] array3 = {7, 8, 9}; 

    int[] array4 = {10, 11, 12}; 
    int[] array5 = {13, 14, 15}; 
    int[] array6 = {16, 17, 18}; 

    //two-dimensional arrays are arrays of arrays 
    int[][] row1 = {array1, array2, array3}; 
    int[][] row2 = {array4, array5, array6}; 

    //three-dimensional arrays are arrays of arrays of arrays 
    int[][][] array3d = {row1, row2}; 
} 

и я не устанавливая размер, потому что я использую инициализации массива стенографии, поэтому мне не нужно, чтобы установить размер раньше времени. Обратите внимание, что вы не устанавливаете размер при инициализации start_Grid.

Также обратите внимание, что, как и кто-то другой, использование таких массивов может стать довольно громоздким. Поэтому, если у вас нет веских оснований для использования массивов, вы, вероятно, должны использовать какую-то структуру данных. Я предполагаю, что любые ваши массивы «нижнего уровня» могут быть представлены объектом какого-либо объекта, а затем вам понадобится только 2D-массив, о котором легче думать. Но это действительно зависит от вас - трехмерный массив - это всего лишь 2D массив массивов!

+0

Спасибо, Кевин, не могли бы вы привести пример того, как создать подмассиву и добавить его в массив? Также почему вы не объявляете размер вашего массива? – Espore

+0

Thankyou kevin, я просто хочу использовать 3D-массив для хранения значений или двух, которые представляют свойства каждого значения в массиве 2d. Вы думаете, это резко снизит мою программу? Я по существу буду использовать его так же, как 2d-массив, но иногда редактирую значения свойств 2 или 3. – Espore

+0

@ Espore Я действительно не беспокоюсь о скорости. Между любыми подходами, которые были упомянуты, не будет большой разницы. То, о чем вам нужно беспокоиться, - это ваше собственное здравомыслие, другими словами, насколько легко поддерживать вашу программу. Большие массивы, подобные этому, сложнее поддерживать, чем объекты. –

1
int[][][] arr3d = new int[][][]{{{1 , 2} , {4 , 5} , {{1 , 3}}}; 

//or 

int[][][] arr3d = new int[x][y][z]; 
int[2][1][4] = 5; 

Но вы действительно должны искать другой способ представления данных, если это возможно. Размер памяти, необходимый для хранения 3D-массива, становится очень быстрым.

+0

Как бы вы предлагаете я представляю данные более эффективно? Спасибо за ответ! :) – Espore

+0

ну, это не так легко ответить, так как я не знаю, какие данные вы храните и как вы его используете. Например, загружать области динамически, а не сразу сразу – Paul

+0

Я могу настроить так, чтобы области загружались динамически, я думаю. Это просто все, что нужно на экране, и поэтому я не могу повысить эффективность, как в настоящее время. – Espore

0

С индексами:

 int[][][] start_Grid = { 
      { { /*[0][0][0] */1, /*[0][0][1] */ 2, /*[0][0][2] */ 3, }, {/*[0][1][0] */ 1, /*[0][1][1] */ 2, /*[0][1][2] */ 3 } }, 
      { { /*[1][0][0] */1, /*[1][0][1] */56, /*[1][0][2] */ 55 }, { /*[1][1][0] */1, /*[1][1][1] */56, /*[1][1][2] */55 } } 

    } 
+0

Не могли бы вы дать мне немного больше информации о том, как индексы полезны? – Espore

+0

Я просто поместил индексы значений массива в комментарии, чтобы прояснить их позицию в массиве и быть более ясным для вас. – jMounir