スコアを保存する場合、NSUserDefaultsを使うというのは
以前も書いたのですが、(参照:【スコアの保存】アプリ開発日記(4/21))
今回はランキングを1〜5位まで保存しておくようなアプリにしたい!(要件定義!)
鉄壁のコタローの際に、ハイスコアはゲーム中に比較して更新してたんですが
(ゲーム中に表示してるので)
今回はゲーム終わりに比較するような仕様で書きました。
てか、、ゲーム中で比較するって言うのはどっかのサイト様のコピペなので
今回もコピペしたくて探したんですけど5分も探さず
「これ自分で作った方が早くね?」という結論に
詳細な要件
1.ゲーム完了後のスコアを取得する
2.現在のランキングのスコアと比較
3.比較した結果、いい(今回は小さい値)スコアなら更新
4.比較した結果、だめ(今回は大きい値)スコアなら下位のスコアへ
5.2.に戻る
6.5位まで比較してなければランク外
こんなかんじ
では実装
まずは初期設定
initメソッドへ書き書き((φ( ̄Д ̄ )
1 2 3 4 5 6 7 8 |
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; [defaults setObject:@"100.00" forKey:@"one"]; [defaults setObject:@"150.00" forKey:@"two"]; [defaults setObject:@"200.00" forKey:@"three"]; [defaults setObject:@"300.00" forKey:@"four"]; [defaults setObject:@"500.00" forKey:@"five"]; [ud registerDefaults:defaults]; |
で、ゲームが終わった後に呼ばれるメソッドに((φ( ̄Д ̄ )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-(void)setHighScore{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults floatForKey:@"one"] > _highScore) { [defaults setFloat:_highScore forKey:@"one"]; }else if ([defaults floatForKey:@"two"] > _highScore) { [defaults setFloat:_highScore forKey:@"two"]; }else if ([defaults floatForKey:@"three"] > _highScore) { [defaults setFloat:_highScore forKey:@"three"]; }else if ([defaults floatForKey:@"four"] > _highScore) { [defaults setFloat:_highScore forKey:@"four"]; }else if ([defaults floatForKey:@"five"] > _highScore) { [defaults setFloat:_highScore forKey:@"five"]; } [defaults synchronize]; } |
こんな感じで。簡単だったけどもっといい方法あるのかしら
てか、簡単だからいろんなサイトで見つからなかったのかな?
今後も使う処理なのでしっかり理解しておきたい。
[…] 投稿ナビゲーション ← 前へ […]