我有一个应用程序,您可以在其中投注一定数量。您可以使用滑块来确定要下注多少。
每回合(掷骰子),您的总宝藏会更新(无论输赢)。滑块的最大值与宝物相同。
我希望滑块在每次掷骰子后(即每次更新总宝藏时)更新其最大值。
这是一个非常简短的应用程序,所以我要复制整个代码
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)
}
}
答案 0 :(得分:0)
在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)