0

我有一個關於正在開發的iPhone遊戲的問題。目前,下面是我目前使用的代碼,通過我的多維數組循環並相應地在我的場景中定位磚塊。根據以下(gameLevel1),我的代碼中沒有多個二維數組。需要幫助循環瀏覽Objective-C中的文本文件,而不是通過多維數組循環顯示CCSprites

理想情況下,我想從我的項目中的文本文件中讀取,並通過其中的值進行循環。

請注意,我希望在我的遊戲中有多個關卡(可能是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]; 
    } 
} 

回答

0

看起來要解析的是一個文件,該文件在這個問題回答了Objective-C的:How do I parse a text file in Objective-C?

對於你的情況,我想你會想確定每行是否是「#Level X#」行或一行塊。然後你可以使用相同的ComponentSeparatedByString函數(傳遞@「,」而不是@「\ n」)給你一行所有塊的數組,以添加到你自己創建的NSMutableArray中。

作爲個人設計的選擇,我寧願將每個級別放在單獨的文件中。這允許將來添加/更新級別而不必更新包含所有現有級別的文件。

1

將每個級別放在一個單獨的文件中會使加載速度更快,特別是對於以後的級別,會提供更大的靈活性,並且可能稍微容易實現。這些觀點僅僅是您計劃使用的關卡數量的學術成果。

雖然我不確定你的問題是什麼。我看到一些問號,但他們似乎沒有結束問題。您是否介意以實際問題更新您的問題?