2015-04-17 110 views
1

我是iOS開發和開發數學遊戲的新手,其中我有3個級別Easy,Normal和Hard。我想爲每個關卡都以編程方式保存高分,但不知道如何?爲ios中的每個級別的遊戲節省高分

[[NSUserDefaults standardUserDefaults]integerForKey:@"highScore"]<[SingletonClass sharedSingleton].Score){ 

[[NSUserDefaults standardUserDefaults] setInteger:[SingletonClass sharedSingleton].Score forKey:@"highScore"]; 

[[NSUserDefaults standardUserDefaults]synchronize]; 

我正在使用此代碼來保存高分。但是這個代碼爲每個級別保存相同的高分。

+0

爲什麼不使用Game Center來管理分數和成就它的易於使用和無需處理使用NSUserDefault。 –

回答

1

您可以使用三種不同的密鑰店highScore - MGHighScoreEasyMGHighScoreNormalMGHighScoreHard

if(gameMode == MGGameModeEasy) { 

    [[NSUserDefaults standardUserDefaults] setInteger:[SingletonClass sharedSingleton].Score forKey:@"MGHighScoreEasy"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} else if (....) { 

} 
0

有遊戲得分存儲創建Database和存儲記分卡陣列NSUserDefault雙向的。

將計分卡數組存儲在NSUserDefault中。

[[NSUserDefaults standardUserDefaults] setValue:arrayHighScore forKey:@"highScore"]; 
[[NSUserDefaults standardUserDefaults] setValue:arrayMiddiumScore forKey:@"MediaumScore"]; 
[[NSUserDefaults standardUserDefaults] setValue:arrayEasyScore forKey:@"EasyScore"]; 
[[NSUserDefaults standardUserDefaults]synchronize]; 
+0

由於您對所有人使用相同的密鑰,因此將會保存一個'arrayEasyScore'。 – rckoenes

+0

其實我離開去換鍵。:) –

1

這更多的是關於如何構建代碼/數據而不是如何保存它的問題。考慮到高分是玩家的一個屬性,而且你的用戶類的一個NSDictionary屬性(猜測這是單數)可以存儲所有高分。

例如:

NSArray *keys = [NSArray arrayWithObjects:@"easy", @"medium", @"hard", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects 
                forKeys:keys]; 

現在可以將這個NSDictionary的存儲和NSUserDefaults的,當你找回你所有得分。

例如:

[[NSUserDefaults standardUserDefaults] setObject:dictionary forKey:@"highScores"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

謝謝,它沒有進入我的腦海使用字典和數組。再次感謝 –

+0

@ Mikael-我認爲它會幫助我。 –

+0

@MSwapnil這是我認爲最有效的方式:) – Mika

0

NSUserDefaults的使用,以節省比分將讓你輕鬆遊戲被破解。

可以使用的NSKeyedArchiver將數據保存到一個文件

-(void)saveState { 


    NSLog(@"Saving state"); 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *statePath = [documentsDirectory stringByAppendingPathComponent:someFileName]; 

    NSMutableData *appData; 
    NSKeyedArchiver *encoder; 
    appData = [NSMutableData data]; 
    encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:appData]; 
    // SaveData using [encoder encodeObject:(id)object forkey(NSString *)key] 
    [encoder encodeObject:someUserObject forKey:@"someUserKey"]; 
    [encoder encodeInteger:someUserscore forKey:@"someUserScoreKey"]; 


    // Finish encoding and write the contents of gameData to file 
    [encoder finishEncoding]; 
    [appData writeToFile:statePath atomically:YES]; 


} 

然後,您可以用文件加載數據傳回,像這樣

-(void)loadState 
{ 
    NSLog(@"Loading state"); 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *statePath = [documentsDirectory stringByAppendingPathComponent:someFileName]; 

    NSData *appData; 
    NSKeyedUnarchiver *decoder; 

    appData = [NSData dataWithContentsOfFile:statePath]; 
    if (appData) 
    { 
     NSLog (@"file Loaded"); 
     decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:appData]; 
     // set data here using [decoder decodeObject for key... 
     someUserObject = [decoder decodeIntegerForKey:@"someUserKey"]; 
     someUserScore = [decoder decodeObjectForKey:@"someUserScoreKey"]; 

    } 
    else 
    { 
     NSLog(@"No saved data available or incorrect file name"); 
    } 

} 

你編碼/解碼你需要的任何自定義類以確保它們符合NSCoding。