как обновить максимальное значение слайдера? - PullRequest
0 голосов
/ 19 января 2020

У меня есть приложение, в котором вы можете поставить определенную сумму. Вы используете ползунок, чтобы определить, сколько ставить.

При каждом ходу (бросок костей) обновляется ваше общее сокровище (будь то выигрыш или проигрыш). Максимальное значение ползунка совпадает со значением сокровища.

Я бы хотел, чтобы ползунок обновлял свое максимальное значение после каждого броска костей (т.е. каждый раз, когда обновляется общее сокровище).

это очень короткое приложение, поэтому я копирую весь код


class ViewController: UIViewController {
    @IBOutlet weak var gains: UILabel!
    @IBOutlet weak var dicePlayer: UIImageView!
    @IBOutlet weak var diceComputer: UIImageView!

    //slider et label approprié
    @IBOutlet weak var slider: UIView!

    @IBOutlet weak var sliderValueLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        // on appelle le generateur de gains ici
        gainsAleatoires()
        // et on genere aleatoirement les dés
        //lancerDeDes()

    }

    //MARK: - Variables pour l'application
    //tableau qui contient le nom des differents dés
    let des: Array = ["one", "two", "three", "four", "five", "six"]

    // tableau qui genere les gains
    var generateurDeGains = Int.random(in: 100 ... 1000)

    // deux variables qui vont simuler les lancers pour le joueur et l'ordinateur
    var lancerJoueur: Int = 1
    var lancerOrdinateur: Int = 1

    // deux variables pour enregistrer le tresor initial ainsi que le tresor mis a jour
    var initialGains = 0




    //MARK: - Gestion lancer de dés

    @IBAction func boutonLancerDes(_ sender: UIButton) {
        // on appelle la fonction lancer de dés
        lancerDeDes()

    }
    //MARK: - Gestion reinitialisation du jeu et des gains

    @IBAction func boutonReinitialisation(_ sender: UIBarButtonItem) {
        // on appelle de nouveau la fonction gains aleatoires
        gainsAleatoires()
        // on change la valeur du slider
        //sliderValueLabel.text = "0"
    }

    //MARK: - Fonction qui genere un gain aleatoire entre 100 et 1000
    func gainsAleatoires () {
        gains.text = String(generateurDeGains)

    }
    //MARK: - Bouton pour changer la valeur de la somme que le joueur parie
    @IBAction func sliderValueChanged(_ sender: UISlider) {
        // on s'assure que la valeur du slider est affichée dans le label correspondant
        let currentValue = Int(sender.value)
        sliderValueLabel.text = String(currentValue)

        // on donne la valeur maximale du slider qui est celle des gains générés aleatoirement
        sender.maximumValue = Float(generateurDeGains)
    }


    //MARK:- Fonction qui gere le lancer des deux dés
    func lancerDeDes() {
        //on rend aleatoire les lancers du joeur et de l'ordinateur
        self.lancerJoueur = Int.random(in: des.indices) + 1 // code qui rend les erreurs plus faciles a detecter
        //autre ecriture : self.lancerJoueur = Int.random(in: 1...6)
        self.lancerOrdinateur = Int.random(in: des.indices) + 1

        UIView.animate(withDuration: 0.5) {
            self.dicePlayer.image = UIImage(named: self.des[self.lancerJoueur - 1])
            self.diceComputer.image = UIImage(named: self.des[self.lancerOrdinateur - 1])

        }
        // on appelle la fonction qui gere les scores
        gestionDesScores()
    }

    //MARK: - Fonction qui gere les scores pour le joueur et l'ordinateur

    func gestionDesScores() {
        // 2 switch statements

        //on appelle ici la fonction qui va donner une alerte en fonction du resultat du lancer
        alertesEnFonctionDuResultat()
    }

    //MARK: - Fonction qui gere les resultats
    func alertesEnFonctionDuResultat() {
        // si le joueur gagne
        if lancerJoueur > lancerOrdinateur {
            // on recupere la valeur actuelle des gains
            initialGains = generateurDeGains
            // on appelle l'alerte
            alerteSucces()
            // on met a jour la valeur des gains initiale
            initialGains = generateurDeGains + Int(sliderValueLabel.text!)!
            //on change la valeur totale des gains
            gains.text = String(initialGains)
            // et on change la valeur maximale du slider


        } // si l'ordinateur gagne
        else if lancerJoueur < lancerOrdinateur {
            //idem
            initialGains = generateurDeGains
            alerteEchec()
            initialGains = generateurDeGains - Int(sliderValueLabel.text!)!
            gains.text = String(initialGains)
        } // en cas de parité
        else {
            alerteParite()
        }
        // fin de partie
        if gains.text == "0" {
            //on appelle la fonction fin de partie
            finDeLaPartie()

        }

    }

    //MARK: - Fonction avec alerte en cas de succès du joueur
    func alerteSucces() {
        let alert = UIAlertController(title: "Votre lancer est supérieur !", message: "Vous gagnez votre mise", preferredStyle: .actionSheet)
        let action = UIAlertAction(title: "Continuer", style: .default, handler: nil)
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }

    //MARK: - Fonction avec alerte en cas d'echec du joueur
    func alerteEchec() {
        let alert = UIAlertController(title: "Votre lancer est inférieur !", message: "Vous perdez votre mise", preferredStyle: .actionSheet)
        let action = UIAlertAction(title: "Continuer", style: .default, handler: nil)
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }

    //MARK: - Fonction en cas de parité entre joueur et ordinateur
    func alerteParite() {
        let alert = UIAlertController(title: "Vos lancers sont égaux !", message: "Vous devez de nouveau lancer les dés", preferredStyle: .actionSheet)
        let action = UIAlertAction(title: "Continuer", style: .default, handler: nil)
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }

    //MARK: - Fonction qui gere le cas où on n'a plus de tresor et donc il faut reinitialiser
    func finDeLaPartie() {
        let alert = UIAlertController(title: "Vous n'avez plus d'argent !", message: "Réinitialisez ou secouez l'appareil pour débuter une nouvelle partie", preferredStyle: .alert)
        let action = UIAlertAction(title: "Compris", style: .default, handler: nil)
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }


}

1 Ответ

0 голосов
/ 19 января 2020

В вашем alertesEnFonctionDuResultat() после обновления gain вы можете добавить:

// et on change la valeur maximale du slider
yourSlider.maximumValue = Float(initialGains)

В любом случае, я думаю, вы должны еще раз подумать о том, что вы делаете в своем приложении ... Например, почему здесь вы используете текст, а не значение вашего слайдера?

// on met a jour la valeur des gains initiale
initialGains = generateurDeGains + Int(sliderValueLabel.text!)!

И снова, почему здесь вы обновляете свой слайдер maximumValue каждый раз, когда слайдер перемещается?

// on donne la valeur maximale du slider qui est celle des gains générés aleatoirement
sender.maximumValue = Float(generateurDeGains)
...