2014-10-22 3 views
0

Как я могу ссылаться на безымянные объекты? Для игры, если я делаю квадратную сетку и использовать что-то вродеКак я могу ссылаться на безымянные объекты по их свойствам?

for (int X =0; X <= 10; X++) 
{ 
    for(int Y =0; Y <= 10; Y++) 
    { 
     new Cell(X, Y); 
    } 
} 

Я собираюсь иметь 100 клеток без имени. Как изменить или проверить их впоследствии, возможно, обращаясь к ним по их координатам, например

ThisCell.DoSomething(); 

со ссылкой на клетку его координаты или что-то

Halp. Я не могу просто иметь 1000 или более ячеек, каждый со своим маленьким именем, чтобы позвать. Там должен быть способ проверить, например, что-то соседи чего-то в коордах БЕЗ СОЗДАНИЯ НОВЫХ КЛЕТОК ...

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

Если любой из вас может, например, дать мне хорошую функцию, которая проверяет booleanIsWalkable своего восходящего соседа ... Я был бы признателен, чрезвычайно

+0

Поместите их в (возможно многомерный) массив. Если вы не храните ссылку, вы не можете ссылаться на нее снова. –

+0

Как говорит @Matt, если вы не держите ссылку на них, вы не сможете получить их снова. Но не только это, как только вы выйдете за пределы 'new Cell()', они станут доступны для сбора мусора и, возможно, больше не будут существовать. –

ответ

1

Создать массив затем сохранить ваши клетки в нем

Cell[,] cells = new Cell[10,10]; 
for (int X =0; X <= 10; X++) 
{ 
    for(int Y =0; Y <= 10; Y++) 
    { 
     cells[X,Y] = new Cell(X, Y); 
    } 
} 

чтобы получить ячейку поздно, вы просто использовать его х и у координаты индекса массива:

Cell someCell = cells[5,5]; // for example 

I t легко найти соседей, просто манипулируя координатами. Например, если каждая клетка также имеет свои собственные X и координаты Y (которые ваши параметры конструктора предложить) вы могли бы сделать что-то вроде:

Cell cellAboveMe = cells[someCell.X, someCell.Y - 1]; 

Хотя обратите внимание, что вы хотите включить граничную проверку (если Y==0 то там не является ячейкой над этой ячейкой)

Это довольно фундаментальный материал, поэтому вы хотите прочитать, как работают массивы. Смотрите здесь:

http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx

Например.

+0

Cell someCell = ячейки [5,5]; Вот что я говорю, разве это не клонирует ячейку или не создает новый объект? –

+0

Кроме того, я получаю ошибку исключения OutOfRange. –

+0

@AlexMitan: Предполагая, что 'Cell' является ссылочным типом (классом), а не типом значения (struct), no. Он не клонирует его и не создает новый объект. Для исключения OutOfRange вы передаете индекс массиву, который выходит за пределы диапазона. –

2

Вы хотите создать массив вашего типа Cell:

Cell[,] myCells = new Cell[10,10] 

изменения new Cell(X, Y); в myCells[X,Y] = new Cell();

Оттуда вы всегда можете обратиться к любой ячейке: myCells[1,2].DoSomething();

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