Bonjour à tous,
j’essai de faire l’exercice créer et détruire un bots du cours apprendre la pop en Swift.
Je dois créer une fonction pour le lancer de dés. J’ai repris la fonction du nombre aléatoire en changeant les valeurs :
func rollTheDices(player:String) -> Int {
let throwValue = Math.nombreAleatoire(comprisEntre: 1, et: 12)
print("\(player), lance les dés ... \(throwValue)")
return throwValue
}
Seulement j’ai un souci quand j’exécute le jeu, à certain lancé j’ai le chiffre 13 qui sort et je ne comprends pas pourquoi.
Quelqu’un serait-il m’aiguiller sur mon erreur ?
Effectivement je viens de vérifier et il y avait bien un soucis dans le code de la fonction de génération de nombre aléatoires que j’ai inclue dans le projet.
C’est corrigé et mis à jour sur GitHub, merci pour l’info
C’est ce que j’ai fait dans la fonction avec le nom francais justement. Quand j’avais créé le projet en 2017 j’avais utilisé arc4random_uniform et je me suis mélangé dans le calcul min/max
@alexandre.cane Merci pour ton retour je ferais attention la prochaine fois, j’avais choisis texte preformaté, mais ca n’a pas l’air d’etre ça, tu serais me dire comment faire ?
Bah, cela n’as pas vraiment d’importance. Le plus important c’est que cela soit cohérent par rapport au jeu. Dans un autre topic j’ai parlé de mon expérience de joueur de jeux de rôles sur table (les jeux de sociétés bizarres des années 90, avant l’ère des jeux vidéos, qui ont donné naissance aux MMORPG comme World Of Warcraft).
L’ancêtre de tous ces jeux, Donjon&Dragon utilise de nombreux types de dés, pour simuler le hasard des affrontements. Par exemple (de mémoire) : un couteau fait 1d4 de dommage, une épée courte 1d8, une épée longue 1d12, un sort de boule de feu 2D20 de dégâts, etc …
Tout joueur de Donjon&Dragon avait une trousse pleine de dés rigolos de différentes formes : D4, D6, D8, D10, D12, D16, D20. Il y avait même des D100 avec 100 faces, pour tirer des probabilités directement !
Les jeux de rôles papier ne sont pas guère pratiqués de nos jours, mais on peut quand même acheter des lots de dés spéciaux sur Amazon.
Pour fair simple,
à ma connaissance,
oui la probabilité n’est pas la même.
en effet avec 1 dé de 12 faces vous avez 1 chance sur 12 de tirer 1 chiffre hors avec 2 dés vous avez plus de chance de faire un 7 que de faire un 2 (et 0 de faire un 1…).
1 + 1 = 2
1 + 2 = 3
2 + 1 = 3
1 + 3 = 4
2 + 2 = 4
3 + 1 = 4
1 + 4 = 5
2 + 3 = 5
3 + 2 = 5
4 + 1 = 5
… etc, je pense que vous avez compris …
var numberRound1de:[Int] = []
var numberRound2des:[Int] = []
var number:Int
var numberToSearch:Int = 7
for _ in 1...10 {
numberRound1de = []
numberRound2des = []
for _ in 1...1000 {
var tourIn:Int = 0
repeat {
number = Math.nombreAleatoir1des11Faces()
tourIn += 1
} while number != numberToSearch
numberRound1de.append(tourIn)
tourIn = 0
repeat {
number = Math.nombreAleatoir2des()
tourIn += 1
} while number != numberToSearch
numberRound2des.append(tourIn)
}
print("La moyenne de lancés avec 1 dé pour obtenir le \(numberToSearch) est de : \(Math.averageOf(Array: numberRound1de)) lancés")
print("La moyenne de lancés avec 2 dés pour obtenir le \(numberToSearch) est de : \(Math.averageOf(Array: numberRound2des)) lancés \n")
}
dans Math :
static func nombreAleatoir2des() -> Int {
return Int(Int.random(in: 1...6) + Int.random(in: 1...6))
}
static func nombreAleatoir1des11Faces() -> Int {
return Int(Int.random(in: 2...12))
}
static func averageOf(Array:[Int]) -> Double {
var somme:Double = 0
for i in 0..<100 {
somme += Double(Array[i])
}
return somme/100
}
Résultat :
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 11.07 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.18 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 11.66 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.96 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 12.24 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.23 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 9.71 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.69 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 12.89 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.36 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 11.71 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 5.89 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 11.91 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.54 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 11.73 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.55 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 9.72 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 5.48 lancés
La moyenne de lancés avec 1 dé pour obtenir le 7 est de : 10.75 lancés
La moyenne de lancés avec 2 dés pour obtenir le 7 est de : 6.3 lancés
On remarquera que le résultat pour le chiffre 7 tant vers le nombre de face du dé
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 11.21 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 40.3 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 10.09 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 35.55 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 10.67 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 36.01 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 11.03 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 41.12 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 10.62 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 36.9 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 11.95 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 34.8 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 12.08 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 39.0 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 10.74 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 35.17 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 11.36 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 29.85 lancés
La moyenne de lancés avec 1 dé pour obtenir le 2 est de : 10.35 lancés
La moyenne de lancés avec 2 dés pour obtenir le 2 est de : 35.59 lancés
Je vous laisse comparer pour le chiffre 2 (et les résultats devrais être les mêmes pour le nombre 12)
Le tirage 1D12 est a peu prés linéaire, avec quelques petites variations statistiques normales.
Le chiffre 1 ne sort jamais avec la formule 2D6 (c’est logique, mais je n’y avais pas pensé avant de faire le test)
Les probabilités ne sont absolument pas équivalentes avec 2D6, mais suivent une progression en forme de courbe de gauss, dont la valeur maximale se situe à la valeur 7. Au tirage, le 7 apparait SIX FOIS plus souvent que le 2 ou le 12 !!!
@Draken, @Guerno, ça c’est de la réponse. Merci à vous deux je crois que Maxime va avoir sa réponse maintenant et moi aussi du coup.
Bonne soirée à vous
Les quoi ? Ah oui, ce truc abstrait sans rapport avec l’univers de tous les jours, que je ne comprenais pas du tout en classe. Il a fallu que je me mette à l’informatique, pour commencer à vraiment comprendre les maths. C’est très mal expliqué à l’école, du moins pour les gens comme moi qui ne peuvent apprendre les choses qu’en les expérimentant et en jouant avec, pour faire des trucs avec …
Comme par exemple, utiliser une équation du second degré pour calculer la trajectoire d’un projectile, ou une équation géométrique pour calculer la surface de collision d’un sprite.