2017-01-16 1 views
0

Mein Code unten berechnet die Reaktionszeit für das Spiel. Die Gesamtreaktionszeit wird in totalTime berechnet. Gerade jetzt speichert der Code die Reaktionszeit. Allerdings entspricht die totalTime immer dem Highscore. Es wird also kein Highscore gespeichert, nur der aktuelle Score wird gespeichert. Ich möchte, dass der Code die niedrigste totalTime speichert, wenn es weniger als die derzeit niedrigste totalTime ist.Wie überschreibt man einen Highscore in swift3

import UIKit 
class winViewController: UIViewController { 
    @IBOutlet var score2: UILabel! 
    @IBOutlet var winningLabel: UILabel! 
    @IBOutlet var foxMill: UILabel! 
    @IBOutlet var hhighscore: UILabel! 

    public var LebelText: String? 
    public var LebelText2: String? 
    public var LebelText3: String? 
    public var LebelText4: String? 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    timeCalculation() 
    loadState() 
    } 

    func saveScore(score: Double) { 
    // Instantiate user defaults 
    let userDefaults:UserDefaults = UserDefaults.standard 

    // Set your score 
    userDefaults.set(score, forKey: "highScore") 

    // Sync user defaults 
    userDefaults.synchronize() 
    } 

    func loadState() { 
    let userDefaults = UserDefaults.standard 
    let score = userDefaults.double(forKey: "highScore") 
    foxMill.text = "High Score: \(score)" 
    } 

    func timeCalculation(){ 
    guard let unwrapedText = self.LebelText2 else { return } 
    guard let unwrapedText2 = self.LebelText else { return } 
    guard let unwrapedText3 = self.LebelText3 else { return } 
    guard let unwrapedText4 = self.LebelText4 else { return } 

    if let myInt = Double(unwrapedText), let myInt2 = Double(unwrapedText2), let myInt3 = Double(unwrapedText3), let myInt4 = Double(unwrapedText4) { 
     var totalTime = myInt + myInt2 + myInt3 + myInt4 
     self.winningLabel.text = "You won"+"\n"+"Reaction time :" + String(totalTime) + " Seconds" 

     guard let highScore = UserDefaults.standard.value("highScore") as? Double else { return } 

     if totalTime > highScore { 
     saveScore(score: totalTime) 
     } 
    } 
    } 
} 
+0

verbesserte Formatierung – budidino

Antwort

0

Sie timeCalculation zuerst aus Ihrer Sicht haben Last Aufruf, die Ihre „aktuellen Highscores“ berechnet nehme ich an und du bist Speichern dass userdefaults. Aber bevor Sie sparen, überprüfen Sie nicht, ob es wirklich der Highscore ist. Sie müssen dort eine Bedingungsprüfung hinzufügen.

guard let highScore = UserDefaults.standard.value(forKey: "highScore") as? Double 
else{return} 
if totalTime>highScore{ 
    saveScore(score: totalTime) 
} 
+0

in welcher Funktion stelle ich die Wache? In zeitlicher Berechnung oder saveScore? –

+0

Ersetzen Sie in Ihrer 'timeCalculation'' saveScore (score: totalTime) 'durch den obigen Code. – ebby94

+0

Sie brauchen auch nicht 'userDefaults.synchronize()' – ebby94

Verwandte Themen