質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

419閲覧

1〜5までのハイスコアの管理

sena14

総合スコア109

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/11/28 13:33

ゲームのハイスコアを1〜5位まで保持しておきたいです。

UserDefaultsを使って保持しようと思うのですが
スコアが5位までに該当するかどうか判定する部分で困っています。
下記の様なコードで実装できるのかなと考えているのですが何回繰り返すと期待通りの結果になるのかがわからず困っています。

自分の考えとしてはhighScores0から順に今回のスコアと比較して今回のスコアがhighScoresを上回った時点でその順位より下のハイスコアを一つ下に移していき最後に今回のスコアをその順位に代入という方法で考えています。

forのここと書かれている部分をどの様にしたらいいのか教えていただきたいです。
またそもそもこの方法でできない場合どの様な方法が良いか教えていただきたいです。

import UIKit class ViewController: UIViewController { var score = 0 let userDefaults = UserDefaults.standard var highScores:[Int] = [] override func viewDidLoad() { super.viewDidLoad() saveHighScore() // Do any additional setup after loading the view. } //ハイスコアを保存 func saveHighScore(){ userDefaults.register(defaults: ["highScore": [0,0,0,0,0]]) highScores = userDefaults.object(forKey: "highScore") as! [Int] /* for i ここ{ if highScores[i] < score{ for c ここ{ highScores[highScores.count - c] = highScores[highScores.count - c - 1] } highScores[i] = score } } */ userDefaults.set(highScores, forKey: "highScore") } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SwiftではArrayにソート関数があるのでソートアルゴリズムを考える必要はありません。

swift

1var array = [0, 0, 0, 0, 0] 2 3array.append(500) // 新しいスコアを追加 4array.sort(by: >) // 大きい順にソート 5array.removeLast() // 最後の要素を削除

あたりで

最後の1行は

swift

1array = Array(array.prefix(5))

としたが方が安全かもしれません。

投稿2018/11/28 14:12

MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sena14

2018/11/28 15:51

なるほど。 ありがとうございます! 無事できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問