Нужна помощь в циклическом просмотре текстового файла в Objective-C вместо циклического прохода по многомерному массиву для отображения CCSprites - PullRequest
0 голосов
/ 17 марта 2010

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

В идеале я хотел бы прочитать текстовый файл в моем проекте и вместо этого просмотреть значения в нем.

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

Тогда я думал о каком-то методе, который я вызываю, и этот метод получит номер уровня, который я заинтересован в рендеринге.

например. Метод вызова уровня на основе разделителя?

-(void)renderLevel:(NSString *)levelNumber;

Использование метода:

[self renderLevel:@"#LEVEL_ONE"];

например. Пример текстового файла?

#LEVEL_ONE#
0,0,0,0,0,0,0,0,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,1,1,1,1,1,1,1,0
0,0,0,0,0,0,0,0,0
#LEVEL_TWO#
1,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
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,0
1,1,1,1,1,1,1,1,1
0,1,1,1,1,1,1,1,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,0,0,0,0,0,0,0,1

Код, который я сейчас использую:

int gameLevel[17][9] = {
  { 0,0,0,0,0,0,0,0,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,1,1,1,1,1,1,1,0 },
  { 0,0,0,0,0,0,0,0,0 }
};

for (int row=0; row < 17; row++)
{
  for (int col=0; col < 9; col++)
  {
    thisBrickValue = gameLevel[row][col];
    xOffset = 35 * floor(col);
    yOffset = 22 * floor(row);

    switch (thisBrickValue)
    {
      case 0: brick = [[CCSprite spriteWithFile:@"block0.png"] autorelease]; break;
      case 1: brick = [[CCSprite spriteWithFile:@"block1.png"] autorelease]; break;
    }
    brick.position = ccp(xOffset, yOffset);
    [self addChild:brick];
  }
}

Ответы [ 2 ]

1 голос
/ 05 января 2011

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

Хотя я не совсем уверен, какой у вас вопрос. Я вижу некоторые знаки вопроса, но они, кажется, не заканчивают вопросы. Не могли бы вы дополнить свой вопрос реальным вопросом?

0 голосов
/ 05 января 2011

Похоже, вы хотите выполнить синтаксический анализ файла, на который есть ответ для Objective-C в этом вопросе: Как мне проанализировать текстовый файл в Objective-C?

В вашем случае, я думаю, вы захотите определить, является ли каждая строка строкой "#Level X #" или строкой блоков. Тогда вы можете использовать ту же функцию componentSeparatedByString (передавая @ "," вместо @ "\ n"), чтобы получить массив всех блоков в строке для добавления в NSMutableArray вашего собственного создания.

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

...