Estoy tratando de crear una fórmula que pueda modificarse simplemente cambiando dos valores: number_of_levels y last_level_experience. Esto es para permitir que las personas que modifican el juego cambien los requisitos de nivelación.
Lo tengo para poder especificar la cantidad de XP necesaria para el último nivel, pero quiero poder controlar la XP necesaria para el primer nivel, que en este caso puede variar enormemente. Por ejemplo, si tengo 40 niveles y 1,000,000 XP para el último nivel, el requisito de primer nivel es 625. Pero si cambio los niveles a 80, el primer nivel se convierte en 156. En ambos casos, el último nivel necesita 1,000,000.
Debe haber alguna forma de hacer que la computadora calcule una curva adecuada dados estos dos valores básicos.
#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;
}
}
Salida:
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)
fuente
Respuestas:
Aunque hay infinitas maneras de elegirlas, es común que las curvas de nivelación sigan una regla de poder como la siguiente:
La principal ventaja de esta fórmula se puede explicar fácilmente: para una regla dada, hay un valor fijo N tal que cada nivel cuesta N por ciento más que el anterior .
Sus variables iniciales agregan las siguientes restricciones:
Dos ecuaciones, dos incógnitas. Esto luce bien. Las matemáticas simples dan
A
yB
:Resultando en el siguiente código:
Y la siguiente salida:
fuente
N
que describiste anteriormente? ¿Qué pasa si desea hacerN
la variable conectable? Avíseme si debo hacer una pregunta por separado para esto.N
yB
esexp(B) = 1 + N
, oB = log(1 + N)
. Entonces, si desea que cada nivel requiera, por ejemplo, un 15% más que el anterior, lo necesitaráB = log(1 + 0.15) = 0.13976
.No olvide redondear los números después de calcular su curva. No tiene mucho sentido decirle al jugador que necesita 119,378 puntos de experiencia para alcanzar el siguiente nivel, porque la persona siempre lo entendería como "aproximadamente 120,000". Por lo tanto, será mejor hacer el redondeo usted mismo y presentar resultados "limpios" a sus jugadores. Por ejemplo, el siguiente código (que se extiende sobre Sam Hocevar's) intentará redondear a ≈2.2 dígitos significativos (obviamente, esa constante se puede ajustar como desee):
El resultado es:
fuente