Page 1 sur 1

Pourcentage "non lineaire"

Publié : mer. 15/mai/2019 11:49
par SPH
Salut, :wink:

je poste ici un truc et astuce.
Distribution de 20000 nombres :

Nombre 0 : 5582 (28%)
Nombre 1 : 3649 (18%)
Nombre 2 : 2776 (14%)
Nombre 3 : 2153 (11%)
Nombre 4 : 1639 (8%)
Nombre 5 : 1378 (7%)
Nombre 6 : 955 (5%)
Nombre 7 : 785 (4%)
Nombre 8 : 559 (3%)
Nombre 9 : 364 (2%)
Nombre 10 : 160 (1%)

Code : Tout sélectionner

;;;;;;;;;;;


cmb=20000
absis=10

;;;;;;;;;;;

Dim nb(absis)

For i=1 To cmb
  a=(Random(Random(absis)))
  nb(a)+1
Next

;;;;;;;;;;;

Dim pourcentage.f(absis)

Debug "Distribution de "+Str(cmb)+" nombres :"
Debug ""

For i=0 To absis
  pourcentage(i)=(nb(i)*100)/cmb
  Debug "Nombre "+Str(i)+" : "+Str(nb(i))+" ("+StrF(pourcentage(i))+"%)"
Next

;;;;;;;;;;;;;;;;;;;;;;;
Ca sert a quoi me direz vous ?
Imaginez que vous faisiez un jeu où il faut tuer des monstres qui droppent des items. Parmi ces items, un item tres rare. Et bien, il correspondrait au chiffre 10 qui sort a 1% du temps (grace a la ligne : (Random(Random(absis))) )

Re: Pourcentage "non lineaire"

Publié : mer. 15/mai/2019 11:51
par SPH
Alors que l'on obtient un pourcentage lineaire avec ce code :
Distribution de 20000 nombres :

Nombre 0 : 1846 (9.2299995422%)
Nombre 1 : 1838 (9.1899995804%)
Nombre 2 : 1874 (9.3699998856%)
Nombre 3 : 1830 (9.1499996185%)
Nombre 4 : 1770 (8.8500003815%)
Nombre 5 : 1756 (8.779999733%)
Nombre 6 : 1847 (9.2349996567%)
Nombre 7 : 1833 (9.1649999619%)
Nombre 8 : 1842 (9.2100000381%)
Nombre 9 : 1812 (9.0600004196%)
Nombre 10 : 1752 (8.7600002289%)

Code : Tout sélectionner

cmb=20000
absis=10

;;;;;;;;;;;

Dim nb(absis)

For i=1 To cmb
  a=(Random(absis)) ;;;;;;;;;;;;;;;; 1 seul random
  nb(a)+1
Next

;;;;;;;;;;;

Dim pourcentage.f(absis)

Debug "Distribution de "+Str(cmb)+" nombres :"
Debug ""

For i=0 To absis
  pourcentage(i)=(nb(i)*100)/cmb
  Debug "Nombre "+Str(i)+" : "+Str(nb(i))+" ("+StrF(pourcentage(i))+"%)"
Next


Re: Pourcentage "non lineaire"

Publié : mer. 15/mai/2019 12:41
par SPH
Avec 3 random :
Distribution de 20000 nombres :

Nombre 0 : 9759 (48.7949981689%)
Nombre 1 : 4246 (21.2299995422%)
Nombre 2 : 2346 (11.7299995422%)
Nombre 3 : 1459 (7.2950000763%)
Nombre 4 : 865 (4.3249998093%)
Nombre 5 : 567 (2.8350000381%)
Nombre 6 : 377 (1.8849999905%)
Nombre 7 : 218 (1.0900000334%)
Nombre 8 : 103 (0.5149999857%)
Nombre 9 : 48 (0.2399999946%)
Nombre 10 : 12 (0.0599999987%)

Re: Pourcentage "non lineaire"

Publié : mer. 15/mai/2019 14:39
par Ar-S
ça marche bien.
On a plus qu'à faire un jeu avec des lootbox payantes :mrgreen:

Re: Pourcentage "non lineaire"

Publié : mer. 15/mai/2019 15:10
par SPH
Figure toi que j'ai utilisé cette technique pour mon jeu de scrabble (pour faire la "rareté" des pieces d'argent, d'or et de diamant) 8)

Re: Pourcentage "non lineaire"

Publié : mer. 15/mai/2019 18:43
par Ollivier
Je ne connaissais pas cette méthode. C'est bien de voir les stats qui vont avec.
Je serais plus resté sur celle-ci :

Code : Tout sélectionner

Define Max.I ; racine du maximum (ou écart-type ? ou précision ?)
Define Scale.D ; échelle
X.D = Pow(Random(Max), 2.0) * Scale
Ce n'est pas forcément mieux. Merci pour l'astuce.