Je travaille sur un jeu et je recherche une formule.
Pour vous mettre dans le contexte, un personnage (P1) a un logement. Il peut y ajouter des objets pour le protéger des pillages.
Le pilleur (P2), quant à lui, a des points de compétences en pillage
Imaginons que P1 installe une porte qui protège a X%
Et P2 à Y points de compétence en pillage.
Je cherche donc une formule qui, en fonction du nombre de points de compétence en pillage, se rapproche de X sans jamais l'atteindre.
Par exemple, la porte protège a 80%. 10 points en pillage donne 10% de chance de passer la porte, 20 points donne 19%, ..... 100 points donne 78.9%, 500 points donne 79.9% etc.
J'imagine qui faut utiliser les logarithmes mais je ne sais pas quelle est la formule adaptée. Ça m'apprendra à ne pas écouter les cours de math...
Merci à vous pour les réponses que vous m'apporterez
La vrai question n'est pas de trouver une fonction qui tend vers X, mais qui tend vers X de la manière que tu veux. Des fonctions qui tendent vers X, il y en a une infinité. Il faudrait que tu soit plus précis sur ce que tu recherche. Une bonne étape serai de faire un graphe approximatif des valeurs que tu souhaites.
De plus je viens de regarder les valeurs de tes exemple et c'est un peu paradoxal: Tu dis que si une porte protège à 80%, alors quand le nombre de point de pillage de l'assaillant tend vers +inf, ses chances de passer la porte tendent vers 80% pars des valeurs inférieures. Je suis censé conclure que la chance de passer une défense est majorée par sa protection ? Alors autant mettre un objet à 0% de protection, histoire que ses chances tendent vers 0 et qu'il ne puisse pas rentrer.
Je pense que c'est une faute d’inattention et que dans ta tête tu voulais dire 1-80% = 20%. Tu peux donc essayer avec la fonction f(x) = a * (1 - 1/(e^(x/b))) avec a qui correspond à la valeur vers laquelle la fonction tend et b qui, plus il est haut, plus il ralentit la convergence de la fonction. ICI
Enfin: non. Ce ne sont pas les fonction logarithmiques qui risquent de t'aider de manière simple car elles tendent toutes vers l'infini, et très lentement, donc c'est pas pratique pour ce genre de situation.
Je me suis effectivement mal exprimé, même moi, je ne comprends plus ma phrase . Donc oui, 20% de protection donc jusqu'à 80% de chance de passer et vice-versa.
Les maths, c'est vraiment pas mon fort. Du coup, pour la formule que tu m'as donné, f(x) = a * (1 - 1/(e^(x/b))). En utilisant les nombres du dessus, 20% de protection donc 80% de chance de passer et 15 points de compétence, f(x) = 80 * (1 - 1/(e^(x/15)))
Je ne vois pas du tout ce que je peux faire du x pour avoir ce que je veux. Est-ce que je dois mettre un nombre aléatoire ?
Ou alors f(15) = 80 * (1 - 1/(e^(15/b)))avec b comme nombre aléatoire ?
En l'occurrence, le a représente bien les chances de passer l’obstacle mais c'est un pourcentage, c'est donc 80/100 = 0.80 qu'il faut mettre en facteur (enfin tout dépend de comment tu code ton aléatoire mais en maths, une proba c'est entre 0 et 1). Et b c'est comme tu veux. Tu peux tester avec les valeur que tu veux et il sert simplement à faire converger f(x) un peu moins vite.
C'est donc ta 2e interprétation de f(x) qui est correcte avec f(x) qui correspond à la probabilité de passer l'obstacle sachant qu'on a x points de compétence.
Enfin, faire un teste aléatoire, il y a deux méthodes:
Avec des nombres réels:
Générer un nombre entre 0 et 1 (réel hein).
Avec des entiers:
Générer un nombre entre 0 et 10^n et le diviser par 10^n avec n le nombre maximal de chiffre après la virgule(s'il existe).
Si ce nombre est inférieur à la probabilité on considère le test passé.
Okay, super. Merci pour ton explication intéressante et surtout compréhensible. Je vais étudier les deux formules même si elles font, pour mon cas, l'affaire l'une comme l'autre.
"Si ce n'est pas dur, ce n'est pas intéressant"
"Si ce n'est pas dur, ce n'est pas intéressant"