Я думаю, что решение, которое вы ищете, более эффективно использует классы. У меня есть игра прямо сейчас, когда игроку приходится управлять деятельностью, проходящей в 4 «коридорах», каждая из которых состоит из 3 «рядов», и каждая строка содержит множество плохих парней, хороших парней и т. Д. Вы проезжаете по коридорам с помощью салфетки, и каждый раз видится только 1 коридор, поэтому каждый коридор - это собственный хадлер. Управление сокровищами плохих парней, разбросанных по коридорам, было кошмаром и действительно неэффективным, поэтому мне нужен был хороший способ разделить плохих парней на группы, не имея кучу жестко закодированных массивов в основной функции ... Вот как я сделало это:
Внутри «я» есть 4 слоя холла, внутри каждого зала находятся 3 ряда, которые являются NSMutableArrays, внутри каждой строки есть несколько массивов, представляющих типы актеров (хороший парень, плохой парень, мусор и т. д.), ,
Наличие всего этого в вложенных массивах может работать. Пример:
NSMutableArray *badGuys;
NSMutableArray *goodGuys;
NSMutableArray *row1 = [NSMutableArray arrayWithObjects: badGuys, goodGuys];
(repeat for row2, row3)
NSMutableArray *hallWay1 = [NSMutableArray arrayWithObjects: row1, row2, row3];
NSMutableArray *mainGame = [NSMutableArray arrayWithObjects: hallway1, hallway2....
Однако для этого требуется много явно определенных переменных. Более чистым способом сделать это будет использование классов.
RowClass.h/RowClass.m в .h:
NSMutableArray *myGoodGuys;
NSMutableArray *myBadGuys;
затем в .м сделать
-(NSMutableArray *) returnMyGoodGuys { return myGoodGuys };
HallwayClass.h/HallwayClass.m
RowClass *myRow1 = [[RowClass init] alloc];
RowClass *myRow2 = [[RowClass init] alloc];
RowClass *myRow3 = [[RowClass init] alloc];
NSMutableArray *allMyRows = [NSMutableArray arrayWithObjects: myRow1, myRow2, myRow3];
в .м:
- (NSMutableArray *) getRowNumber : (int)rowNumber { return allMyRows[rowNumber-1]; }
HallwayClass *hall1 = [[HallwayClass init] alloc];
так тогда, когда вам нужно, чтобы вытащить хороших парней в определенном коридоре
NSMutableArray *hall1row1GoodGuys = [[hall1 getRowNumber:1] returnMyGoodGuys];
сделать что-то в массив
[hall1row1GoodGuys retain];
В качестве альтернативы, если вы хотите, чтобы справиться с этим в петле foreach:
foreach(RowClass *row in hallway1.allMyRows)
{
do stuff
}
или
for(i=0; i<4; i++)
{
RowClass *nextRow = hallway1.allMyRows[i];
stuff
}
Определение классов испуганы меня за долгое время, но они на самом деле очень легко работать, если вы не overthink, и делать чудеса для организации вещей.
Надеюсь, вы можете получить некоторые идеи из этого: 3
Отлично. Это похоже на то, о чем я думал. Как вы относитесь к использованию smart_ptrs для хранения массивов и т. Д.? – Jason