Algorithme de calcul dynamique d'un niveau basé sur les points d'expérience? [fermé]

42

L'une des difficultés que j'ai toujours eues dans le développement de jeux consiste à décider comment mettre en œuvre les points d'expérience attribués à l'obtention d'un niveau. Il ne semble pas y avoir de motif pour atteindre un niveau dans la plupart des jeux auxquels j'ai joué. Je suppose donc qu’ils ont un tableau de dictionnaire statique qui contient les points d’expérience par rapport au niveau. par exemple

Experience   Level
0            1
100          2
175          3
280          4
800          5

... Il n'y a pas de rime ou de raison pour laquelle 280 points équivalent au niveau 4, ça l'est tout simplement.

Je ne sais pas comment ces niveaux sont déterminés, mais ce ne serait certainement pas dynamique. J'ai aussi pensé à la possibilité de niveaux exponentiels, pour ne pas avoir à garder une table de recherche séparée, par exemple

Experience   Level
0            1
100          2
200          3
400          4
800          5
1600         6
3200         7
6400         8

... mais il semblerait que cela deviendrait incontrôlable assez rapidement, car vers les niveaux supérieurs, les ennemis dans le jeu devraient fournir une énorme quantité d’expérience - et ce serait trop difficile à contrôler. Le nivellement deviendrait une tâche impossible.

Quelqu'un a-t-il des indicateurs ou des méthodes qu'il utilise pour décider comment niveler un personnage en fonction de son expérience? Je veux être juste dans le nivellement et je veux rester en avance sur les joueurs en évitant de devoir constamment ajouter de nouvelles expériences / niveaux de recherche.

George
la source
4
Non, c'est juste une exponentielle plus lente (multipliant par 10 tous les ~ 3,3 niveaux, ou 100 tous les ~ 6,6 niveaux, au lieu de chaque niveau). Géométrique serait comme 1 [00], 4, 9, 25, 36, etc. Même 1100 1210 1331 1464 est une série exponentielle, multipliant par 1,1.
Random832
1
en.wikipedia.org/wiki/Exponential_growth Devrait éclaircir les choses.
aaaaaaaaaaaaa
1
@Stephen: @ Random832 est correct, la croissance "exponentielle" et la croissance "géométrique" se réfèrent à un rapport constant entre les termes successifs / équidistants (ce qui signifie que le taux de croissance est proportionnel à la valeur actuelle. fonction exponentielle a f'(x) = c*f(x)) . Le terme "géométrique" est utilisé lorsque le domaine (entrée) est discret (par exemple, entier). La formule pour l'exemple de @ George, au-dessus du niveau 1, Experience = 100 * 2^(Level-2)est exponentielle. La formule de votre progression, au-dessus du niveau 1, est Experience = 100^(Level-1)également exponentielle.
BlueRaja - Danny Pflughoeft Le

Réponses:

37

Il est assez courant d'utiliser une relation carrée.

level = constant * sqrt(XP)

Ou l'équivalent approximatif d'un écart de niveau en augmentation linéaire.

Level   XP      Difference
1       0       -
2       100     100
3       300     200
4       600     300
5       1000    400

Ces systèmes fonctionnent plutôt bien lorsque le gain en XP est approximativement linéaire. Si un personnage de haut niveau peut gagner des XP plus rapidement qu'un personnage de bas niveau, ce n'est pas le bon système.

aaaaaaaaaaaa
la source
3
Pour les joueurs de type Achiever, je pense qu’il est fort probable que les gains d’XP augmentent à mesure que leur personnage progresse. Je trouve votre solution intéressante et je ne la modifierai probablement que légèrement pour produire des différences telles que 107-214-321-428, empêchant ainsi le joueur de ne voir que des chiffres ronds et dans l’espoir que cela pourrait contribuer à rendre le jeu encore plus agréable. juste un petit peu plus "bio" (j'essaie de trouver un meilleur mot que cela, mais "bio" est tout ce que j'ai pour le moment).
Randolf Richardson
1
+1 c'est exactement ce que j'ai fait dans le passé, fonctionne très bien
BlueRaja - Danny Pflughoeft
3
Équations pour l'écart de niveau en augmentation linéaire. niveau = (sqrt (100 (2experience + 25)) + 50) / 100 et expérience = (niveau ^ 2 + niveau) / 2 * 100- (niveau * 100)
C9HDN le
3
Grande réponse et j'aime la courbe que cela produit. J'ai fini par utiliser une constante de 0,04. Pour ceux qui s’interrogent, l’inverse de cette formule à calculer pour XP est la suivante: XP = niveau ^ 2 / constant.
BradH
3
@BradH En fait, il semble que ce soit XP = (niveau / constant) ^ 2. En php, cela peut être représenté par XP = pow (niveau / constante, 2) ou dans les versions ultérieures, (niveau / constante) ** 2
Taylor Dondich
17

Vous trouverez probablement des fonctions logarithmiques utiles car elles peuvent être utilisées pour ralentir l'augmentation à mesure que vous gagnez des points d'expérience. Voici deux pages Web expliquant leur fonctionnement:

  Graphes de fonctions logarithmiques
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Introduction à la représentation graphique des fonctions logarithmiques
  http://www.purplemath.com/modules/graphlog.htm

Voici à quoi cela ressemble sur un graphique qui, espérons-le, répondra à vos besoins:

entrez la description de l'image ici

Randolf Richardson
la source
1
@ George En jouant avec les coefficients, vous pouvez facilement utiliser une fonction logarithmique pour mettre à niveau le niveau de votre joueur. +1 pour utiliser les mathématiques
Stephen
2
Notez qu'il s'agit d'une implémentation de l'exigence exponentielle de XP. level = log(XP) <=> XP = e^level. L'exigence peut s'avérer un peu raide pour les derniers niveaux, mais cela fonctionnera correctement avec une croissance appropriée de l'accumulation d'XP.
aaaaaaaaaaaaa
@ eBusiness: C'est un bon point, mais ce n'est peut-être pas un problème, car les personnages de niveau supérieur ont tendance à gagner plus de points plus facilement et en moins de temps (par exemple, en attaquant / tuant des monstres plus puissants avec une vitesse de frappe plus rapide). C'est l'une des raisons pour lesquelles je pense que ces calculs pourraient bien convenir aux jeux vidéo (en particulier dans un contexte de MMORPG).
Randolf Richardson
2
Je trouve juste un peu étrange que l’OP s’inquiète spécifiquement de la croissance exponentielle et accepte ensuite une réponse qui décrit simplement la même chose d’une autre manière. Mais je suppose que c'est son problème.
aaaaaaaaaaaa
1
@ eBusiness: Peut-être que ma réponse a clarifié quelque chose à propos de la croissance exponentielle qui n'était pas claire auparavant? Il existe de nombreuses façons différentes d'appliquer les mathématiques, et je ne suis pas sûr que même le meilleur professeur de mathématiques puisse toutes les connaître (enfin, peut-être le deuxième meilleur professeur de mathématiques de toute façon).
Randolf Richardson
9

Ce sont des moyens que j'ai utilisés jusqu'à présent. Ils sont triés par taux de croissance (il suffit de multiplier chaque équation par une valeur constante):

  1. exp = niveau (celui-ci peut sembler étrange, mais pour certains jeux, la récompense exp change en fonction du niveau du joueur, comme celui de borderlands)

  2. exp = niveau * log 10 (niveau)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
  3. exp = niveau ^ valeur_ const: pour mon exemple, je règle la valeur const sur 3/2

    1   1
    2   2.8
    3   5.1
    4   8
    5   11.2
    6   14.7
Ali1S232
la source
4

Je pense que cela dépend de la facilité avec laquelle le joueur peut obtenir l'expérience. Si le joueur peut obtenir 200 xp au niveau 1 en 20 minutes, puis 200 xp au niveau 2 en 2 minutes, vous devez redimensionner votre xp de manière exponentielle.

Cependant, si gagner un niveau ne permet que marginalement de gagner plus facilement xp, alors vous devriez créer une fonction xp de niveau supérieur. (Peut-être linéaire avec un coefficient> 1)

Wangburger
la source
4

Souvent, les points nécessaires pour atteindre un niveau sont basés sur une courbe. Dans beaucoup de RPG, il y a aussi beaucoup d'autres caractéristiques et attributs de votre personnage qui augmentent avec votre niveau, ils seront également sur leurs propres courbes.

Jetez un coup d'œil à RPGMaker pour voir comment ils font les choses. Examinez plus particulièrement les courbes de paramètres dans les captures d'écran de la section "Ajouter un caractère unique en personnalisant l'équipement de départ" du document Création d'un personnage principal .

Fondamentalement, vous pourriez avoir une courbe indiquant la quantité d’XP nécessaire pour passer à la suivante, puis différentes courbes indiquant le nombre de points de vie (PV), de ressources physiques, d’endurance, de résistance, etc.

entrez la description de l'image ici

Adam Harte
la source
2

Considérer le temps

Vous devez d’abord comprendre comment le taux d’expérience gagne en niveau. Ensuite, vous pouvez personnaliser votre mise à niveau en fonction du temps requis . Si chaque niveau supplémentaire vous permet de gagner de l'expérience deux fois plus vite et que vous avez besoin de deux fois plus d'expérience pour passer au niveau supérieur, chaque niveau nécessitera le même temps.

Ma suggestion est de penser au temps que devrait passer le joueur, puis d’adapter la mise à niveau à ce niveau.

Willy Goat
la source
-3

Peut-être devrais-je utiliser un système de nivellement uniforme, chaque niveau nécessitant exactement la même expérience.

Łukasz Baran
la source
3
Les réponses devraient être un peu plus étoffées qu'une simple suggestion. Essayez de relier certains des avantages de cette stratégie par rapport à un système dynamique tel que celui demandé.
MichaelHouse
Notez également que les informations supplémentaires doivent être publiées par l' auteur original ; si d'autres utilisateurs ont d'autres problèmes à ajouter, ils devraient envisager de publier une réponse distincte.
Gnemlock