2013-06-06 2 views
0

Я пытаюсь создать многомерный массив, чтобы содержать массивы декартовых координат (x, y) в многомерном массиве ширины и высоты [X, Y].Создание и заполнение многомерного массива, представляющего сетку теневого круга

Это то место, где я дошел до сих пор; Я безнадежно запутался ...

int[][][] grid = new int[width][][]; 
    for (int x = 0; x < width; x++) 
    { 
     grid[x] = new int[height][]; 
     for (int y = 0; y < height; y++) 
     { 
      grid[y] = new int[2][]; 
     } 
    } 

    foreach (int[][] coordinate in grid) 
    { 
     //   
    } 

Например, я хотел бы 3 х 4 сетки быть представлен массивом, как, например:

{1, 1}, {2, 1}, {3, 1} 
{1, 2}, {2, 2}, {3, 2} 
{1, 3}, {2, 3}, {3, 3} 
{1, 4}, {2, 4}, {3, 4} 

и т.д ...

Я просмотрел веб-сайт для решения на C# (я относительный новичок в OO, незнакомый с C, C++ и т. Д.), Но до сих пор нарисовал пробел.

Я нахожусь на правильном пути в подходе, который я взял с созданием массива? Может ли кто-нибудь предложить несколько советов о том, как заполнить массив координатами, используя петли, если это возможно?

+0

http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=vs. 71) .aspx http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx http://msdn.microsoft.com/en-us/library/aa664573(v=vs.71).aspx http : //msdn.microsoft.com/en-us/library/aa288453 (v = vs.71) .aspx – Patashu

+3

Зачем вам нужно заполнять массив координатами? Разумеется, индексы массивов ** являются ** координатами. –

+0

Спасибо людям. Мэтт, ты совершенно прав; иногда я медленнее, чем переваривание бананов .. –

ответ

3

Вместо того, чтобы иметь многомерный массив, вы можете создать класс для хранения координат (и других вещей, связанных с каждой плиткой).

Например, это может выглядеть следующим образом:

public class Tile 
{ 
    public int X {get; set;} 
    public int Y {get; set;} 
    public bool HasMine {get; set;} 
    //Etc. 
} 

Таким образом, вместо того, чтобы иметь многомерный массив, вы можете использовать простой List<Tile>, чтобы держать все ваши плитки. Все, что вам нужно сделать, чтобы заполнить этот список, это создать новый экземпляр Плитка для каждой плитки, как это:

List<Tile> tiles = new List<Tile>(); 

for(int i = 0; i < NB_HORIZONTAL_TILES; i++) 
    for (int j = 0; j < NB_VERTICAL_TILES; j++) 
     tiles.Add(new Tile { X = i; Y = j }); 

Чтобы перебрать их, вы можете просто использовать foreach заявление или некоторые LINQ. Это будет более OO-способ решения проблемы.

1

предполагая width и height целые числа с вашей ширины и высоты:

int[,] grid = new int[width,height]; 

создаст массив высоты ширина х заполнены нулями (потому что это значение по умолчанию для целого).

Координаты массива - это индексы в массиве, поэтому вам не нужно их заполнять. Все, что вам нужно сделать, это хранить любые данные, которые вы хотите сохранить, в которой когда-либо место, которые вы хотите заполнить:

grid[2,1] = 5; // the cell at {2,1} now contains the number 5 
+0

Не могли бы вы объяснить, что такое объявление означает int [,] grid? – Marek

+1

@Marek: Ссылки Паташу дали вам объяснение это довольно хорошо. 'int [,]' объявляет 2D прямоугольный массив. Это в отличие от 'int [] []', который объявляет зубчатый массив (который может оказаться прямоугольным, но не обязательно). –

Смежные вопросы