Нужна помощь в автоматическом сохранении игры Swift Cookie Clicker

#ios #swift #save #saving-data #state-saving

#iOS #swift #Сохранить #сохранение -данные #Сохранение состояния

Вопрос:

Я 9-классник, только что изучающий программирование. После того, как я получил основы, я решил, что сделаю игру cookie Clicker в swift. Я выполнил это и все еще работаю над этим, чтобы усовершенствовать его и сделать более воспроизводимым, но я не могу заставить его автоматически сохраняться. Я пробовал вставлять и изменять некоторые другие строки, но я делаю что-то не так. Я хочу, чтобы она автоматически сохраняла переменные click и mult при обновлении. Любая помощь приветствуется, спасибо.

 //
//  ViewController.swift
//  EthanClicker
//
//  Created by Ethan on 10/4/20.
//
import UIKit
class ViewController: UIViewController {
    //Outlets/////////////////////////////////
    @IBOutlet weak var clickOutput: UILabel!
    @IBOutlet weak var multOutput: UILabel!
    @IBOutlet weak var messageOutput: UILabel!
    //Variables/////////////////////////////////
    @objc var click = 0
    var mult = 1
    @IBAction func clickMeButton(_ sender: Any) {
        click = click   (1 * mult)
        clickOutput.text = "(click)"
    }
    @IBAction func twoX(_ sender: Any) {
        if ((click >= 100) amp;amp; (mult == 1)) {
            mult = 2
            click = click - 100
            multOutput.text = "(mult)"
            clickOutput.text = "(click)"
            messageOutput.text = "Nice Job! Keep Going!"
        } else {
            error()
        }
    }
    @IBAction func fourX(_ sender: Any) {
        if ((click >= 1000) amp;amp; (mult == 2)) {
            mult = 4
            click = click - 1000
            clickOutput.text = "(click)"
            multOutput.text = "(mult)"
            messageOutput.text = "Getting closer, Keep Going!"
        } else {
            error()
        }
    }
    @IBAction func eightX(_ sender: Any) {
        if ((click >= 10000) amp;amp; (mult == 4)) {
            mult = 8
            click = click - 10000
            clickOutput.text = "(click)"
            multOutput.text = "(mult)"
            messageOutput.text = "You Did It! Now Keep Playing To See How High You Can Go"
        } else {
            error()
        }
    }
    @IBAction func sixteenX(_ sender: Any) {
        if ((click >= 100000) amp;amp; (mult == 8)) {
            mult = 16
            click = click - 100000
            clickOutput.text = "(click)"
            multOutput.text = "(mult)"
            messageOutput.text = "You Did It! Now Keep Playing To See How High You Can Go"
        } else {
            error()
        }
    }
    @IBAction func thirtytwox(_ sender: Any) {
        if ((click >= 1000000) amp;amp; (mult == 16)) {
            mult = 32
            click = click - 1000000
            clickOutput.text = "(click)"
            multOutput.text = "(mult)"
            messageOutput.text = "You Did It! Now Keep Playing To See How High You Can Go"
        } else {
            error()
        }
    }
    @IBAction func sixtyfourX(_ sender: Any) {
        if ((click >= 10000000) amp;amp; (mult == 32)) {
            mult = 64
            click = click - 10000000
            clickOutput.text = "(click)"
            multOutput.text = "(mult)"
            messageOutput.text = "You Did It! Now Keep Playing To See How High You Can Go"
        } else {
            error()
        }
    }
    
    func error() {
        messageOutput.text = "Not enough Clicks, keep going!"
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        clickOutput.text = "(click)"
        multOutput.text = "(mult)"
        messageOutput.text = ""
    }
}
  

Ответ №1:

Я думаю, это сработает

Вариант 1. добавьте первый фрагмент кода в конец вашего кода

 func updateUI(){
clickOutput.text = "(click)"
        }
        
        
          

затем на вашем

 @IBAction func clickMeButton(_ sender: Any) {
        click = click   (1 * mult)
        clickOutput.text = "(click)"
        
       }  

измените его на это

 @IBAction func clickMeButton(_ sender: Any) {
            click = click   (1 * mult)
            clickOutput.text = "(click)"
            updateUI()
       }  

Вариант 2: Другая идея заключается в том, чтобы updateUI() также выполнял подсчет, а также вы должны использовать оператор = , чтобы добавить к числу, если хотите

 func updateUI() { 
  click  = 1
  clickOutput.text = "(click)"
}  

Следующий шаг такой же, как шаг 3 в варианте 1