JeuWeb - Crée ton jeu par navigateur
[PHP] Algorithme de calcul du niveau d'un joueur - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Algorithme de calcul du niveau d'un joueur (/showthread.php?tid=6658)

Pages : 1 2 3


[PHP] Algorithme de calcul du niveau d'un joueur - starmindfr - 20-02-2013

bonjour

petite question je cherche à gérer les niveaux de mes joueurs en fonction de leur gains d'xp mais je n'arrive pas a trouver le bon calcul php :

exemple niveau 0 , avec 10 xp on passe au niveau 1
niveau 1, avec 100 xp on passe niveau 2
niveau 3 avec 2500 xp on passe niveau 4 etc...

Je suppose qu'il faut utiliser un logarithme ? j'aimerais que le plafond soit vers le niveau 100.


RE: [algo php] calcul du niveau d'un joueur - php_addict - 20-02-2013

oulalala...tu te fait une jolie courbe dans excel ou open office calc, et tu calcule ta fonction mathematique


RE: [algo php] calcul du niveau d'un joueur - Thêta Tau Tau - 20-02-2013

Encore faut il avoir un minimum de bagage en informatique, ce qui n'est pas (ou plus) le cas de tout le monde.

Bon, au niveau des gains d'XP, si t'as pas de besoins hyper spécifiques, il n'y a pas à se casser la tête :
-Soit tu utilise une fonction exponentielle, si tu veux que le coût en xp soit multiplié par un facteur fixe (ex : ogame coût d'un bâtiment = coût lvl1 * facteur^(niveau-1))
-Soit tu utilise un polynôme, ce qui laisse pas mal de liberté (exemple : coût pour passer au niveau n = A * n + B * n² + C * n^3)

Et oui passer par un tableur est indispensable.


RE: [algo php] calcul du niveau d'un joueur - Xenos - 20-02-2013

Non, ce n'est pas indispensable Wink Ca dépend du baggage mathématique.
Un polynome est non-borné: tu ne pourra pas dire "je veux pas dépasser le niveau 100".
Exponentielle/logarithme (sa réciproque) est souvent choisie car elle présent plusieurs intérêts:
- Le "travail" requis pour passer du niveau N au niveau N+1 est de plus en plus important, ce qui permet de passer rapidement les niveaux au début (pour pas être frustré), puis de corser la difficulté ensuite
- Elle se borne soit d'elle même (faute de temps, on peut pas dépasser un seuil) soit par calcul
- Elle se calcule assez bien (y'a plyus léger, mais j'ai pas vu beaucoup de langage n'ayant pas cette fonction pré-programmée).

exponentielle/log ne seront pas bornées non plus. Même si "c'est de plus en plus dur", ca sera toujours possible de dépasser un niveau.
Par exponentielle, on entend aussi ses "dérivées" (e^x est l'exponentielle, mais 2^x marche sur le même principe).
Pour les bornées, il faut utiliser les quotients (masqués dans la puissance négative, car x^(-y) = 1/(x^y)):

N = 100*(1 - exp(-Xp))

Ici, si Xp=0, alors exp(-Xp) = exp(0) = 1 donc N=0
Si Xp tend vers l'infini, exp(-xp) tend vers 0, et N tend vers 100.
Tu peux après ajouter un facteur constant:

N = 100*(1 - exp(-xp/k))

Une calculatrice t'aidera à trouver la "bonne" valeur de k.
Autre avantage: cette fonction est (continue) dérivable, même, elle est de classe C_infini. En d'autres mots, elle est "lisse". Avec un "si xp>... alors N est bloqué à 100", tu aurait une "brisure" sur ta courbe, due au plafonnement du niveau.


RE: [algo php] calcul du niveau d'un joueur - Thêta Tau Tau - 20-02-2013

(20-02-2013, 10:49 PM)Xenos a écrit : Non, ce n'est pas indispensable Wink Ca dépend du baggage mathématique.
Bah là tu parles de fonctions étudiées en bac S, c'est pas du super bagage, mais s'en est déjà un. Et après il y a plus compliqué parfois, surtout quand il faut bidouiller pour avoir le résultat qu'on veut (utiliser une loi de poisson, ça doit pas être intuitif pour tout le monde, pourtant c'est utile).

Sinon j'aime pas trop ta formule, du moins dans le cas des niveaux (c'est plus le genre de truc que j'utiliserais pour la réduction des dégâts par l'armure par exemple). Par ce que oui, comme tu le dis, elle permet de ne pas avoir de "brisures", mais bon, avec un polynôme, tu dis qu'il est pas possible de dépasser 100, certes t'as une brisure, mais je vois pas en quoi ça gène. Mieux si tu veux augmenter la limite par la suite, t'as rien à faire, alors qu'avec ta formule ça risque d'être compliqué.


RE: [algo php] calcul du niveau d'un joueur - Ter Rowan - 21-02-2013

Le plus simple a mon sens : une suite arithmétique avec un Max (si niv=100 alors plus de gain d xp)


RE: [algo php] calcul du niveau d'un joueur - Xenos - 21-02-2013

Si tu veux du polynôme (quotient):

N = 100*(XP/(XP+1))*k

(k étant probablement de l'ordre de 1/1000, car ici, pour XP=1, N=100*(1/2)*k = 50*k donc k doit être assez petit)

La difficulté d'une suite c'est qu'on a besoin de l'ordre N pour calculer N+1, ce qui peut vite devenir lourd/long.
Pour le problème de brisure, si le joueur s'aperçoit, après 6 mois ou 1 an de jeu, que son niveau est plafonné à 100 par une limite brutale, il risque de trèèèès mal le prendre...


RE: [algo php] calcul du niveau d'un joueur - Ter Rowan - 21-02-2013

(21-02-2013, 09:29 AM)Xenos a écrit : La difficulté d'une suite c'est qu'on a besoin de l'ordre N pour calculer N+1, ce qui peut vite devenir lourd/long.
ben non, l'intérêt des suites, c'est que la formule est ultra simple et ne nécessite pas de calcul récursif :

1 + 2 + 3 + 4 + ... + n = n*(n+1)/ 2

ie :
1*2/2 = 1 xp pour avoir le niveau 1
2*3/2 = 3 xp pour avoir le niveau 2 (soit 2 xp pour passer du niveau 1 au niveau 2)
3*4/2 = 6 xp pour avoir le niveau 3 (soit 3 xp pour passer du niveau 2 au niveau 3)
4*5/2 = 10 xp pour avoir le niveau 4 (soit 6 xp pour passer du niveau 3 au niveau 4)

etc ... et si le pas n'est pas de 1 mais de 10 ça marche aussi

1*pas + 2*pas + 3*pas + .... + pas* n = pas * n * (n+1)/2

(21-02-2013, 09:29 AM)Xenos a écrit : Pour le problème de brisure, si le joueur s'aperçoit, après 6 mois ou 1 an de jeu, que son niveau est plafonné à 100 par une limite brutale, il risque de trèèèès mal le prendre...
a mon sens, soit on décide de ne pas mettre de niveau maximum, soit on affiche clairement qu'il y a x niveaux.

Tout les joueurs de wow connaissent le niveau max (même s'il change chaque année) pas pour autant qu'ils abandonnent le jeu une fois celui ci atteint. il y a d'autres mécanismes de fidélisation que le niveau


dans tous les cas je si l'arithmétique n'est pas assez rapide, on peut passer au géométrique ou a d'autres suites. Les formules sont ultra simples et surtout facilement assimilables par les joueurs


RE: [algo php] calcul du niveau d'un joueur - niahoo - 21-02-2013

C'est pas toutes les 0.1 seconde qu'on calcule l'XP ... et faire une bête multiplication récursive sur 100 niveaux ça prends quelques milièmes de secondes. donc utiliser une suite récursive n'est pas du tout un problème. Surtout qu'on peut coder certains paliers en dur.


RE: [algo php] calcul du niveau d'un joueur - starmindfr - 21-02-2013

merci bien je comprend je vais deja tester sous excel avec :

N = 100*(1 - exp(-xp/k))


voir ce que cela donne avec pas mal de valeurs

pour la suite je ne comprend pas trop comment concretiser la formule avec en entrée l'xp ?