J'essaie de créer une formule qui peut être modifiée simplement en modifiant deux valeurs: number_of_levels et last_level_experience. Cela permet aux personnes qui modifient le jeu de modifier les exigences de mise à niveau.
Je l'ai afin de pouvoir spécifier le nombre d'XP nécessaire pour le dernier niveau, mais je veux pouvoir contrôler l'XP nécessaire pour le premier niveau, qui peut dans ce cas être très différent. Par exemple, si j'ai 40 niveaux et 1 000 000 XP pour le dernier niveau, l'exigence de premier niveau est alors de 625. Mais si je modifie les niveaux à 80, le premier niveau devient 156. Dans les deux cas, le dernier niveau nécessite 1 000 000.
Il doit y avoir un moyen de faire en sorte que l’ordinateur calcule une courbe appropriée en se basant uniquement sur ces deux valeurs fondamentales.
#include <iostream>
int main()
{
int levels = 40;
if (levels < 2) levels = 2;
int experience_for_last_level = 1e6;
float fraction = 1.0 / levels;
{
int i = 0;
float fraction_counter = fraction;
int counter = levels;
int total = 0;
for (i = 1; i <= levels; ++i, fraction_counter += fraction, --counter)
{
int a = static_cast<int>(fraction_counter * experience_for_last_level / counter);
std::cout <<"Level "<<i<<": "<<a<<" ("<<counter<<")"<<"\n";
total += a;
}
std::cout << "\nTotal Exp: " << total;
}
}
Sortie:
Level 1: 625 (40) Level 15: 14423 (26) Level 29: 60416 (12)
Level 2: 1282 (39) Level 16: 16000 (25) Level 30: 68181 (11)
Level 3: 1973 (38) Level 17: 17708 (24) Level 31: 77499 (10)
Level 4: 2702 (37) Level 18: 19565 (23) Level 32: 88888 (9)
Level 5: 3472 (36) Level 19: 21590 (22) Level 33: 103124 (8)
Level 6: 4285 (35) Level 20: 23809 (21) Level 34: 121428 (7)
Level 7: 5147 (34) Level 21: 26250 (20) Level 35: 145833 (6)
Level 8: 6060 (33) Level 22: 28947 (19) Level 36: 179999 (5)
Level 9: 7031 (32) Level 23: 31944 (18) Level 37: 231249 (4)
Level 10: 8064 (31) Level 24: 35294 (17) Level 38: 316666 (3)
Level 11: 9166 (30) Level 25: 39062 (16) Level 39: 487499 (2)
Level 12: 10344 (29) Level 26: 43333 (15) Level 40: 999999 (1)
Level 13: 11607 (28) Level 27: 48214 (14)
Level 14: 12962 (27) Level 28: 53846 (13)
la source
Réponses:
Bien qu'il existe une infinité de façons de les choisir, il est courant que les courbes de nivellement suivent une règle de puissance telle que la suivante:
L’avantage majeur de cette formule s’explique aisément: pour une règle donnée, il existe une valeur fixe N telle que chaque niveau coûte N pour cent de plus que le précédent .
Vos variables initiales ajoutent les restrictions suivantes:
Deux équations, deux inconnues. Cela semble bon. Les mathématiques simples donnent
A
etB
:Résultat dans le code suivant:
Et la sortie suivante:
la source
N
-vous ce que vous avez décrit ci-dessus? Et si vous vouliez créerN
la variable enfichable? Faites-moi savoir si je devrais poser une question distincte pour cela.N
etB
estexp(B) = 1 + N
, ouB = log(1 + N)
. Donc, si vous voulez que chaque niveau nécessite, par exemple, 15% de plus que le précédent, vous en aurez besoinB = log(1 + 0.15) = 0.13976
.N'oubliez pas d'arrondir les chiffres après avoir déterminé votre courbe. Il n’a pas de sens de dire au joueur qu’il a besoin de 119 378 points d’expérience pour passer au niveau suivant, car il comprendrait toujours "environ 120 000". Ainsi, vous ferez mieux de faire le tour vous-même et de présenter des résultats "nets" à vos joueurs. Par exemple, le code suivant (qui s’applique à celui de Sam Hocevar) tentera d’arrondir à environ 2,2 chiffres significatifs (évidemment, cette constante peut être modifiée à votre guise):
La sortie est:
la source