Algoritmo para calcular dinámicamente un nivel basado en puntos de experiencia? [cerrado]

42

Una de las dificultades que siempre tuve en el desarrollo del juego es decidir cómo implementar los puntos de experiencia atribuidos a ganar un nivel. No parece haber un patrón para ganar un nivel en muchos de los juegos que he jugado, así que supongo que tienen una tabla de diccionario estática que contiene puntos de experiencia frente al nivel. p.ej

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

... No hay una rima o razón por la cual 280 puntos es igual al nivel 4, simplemente lo es.

No estoy seguro de cómo se deciden esos niveles, pero ciertamente no sería dinámico. También he pensado en la posibilidad de niveles exponenciales, para no tener que mantener una tabla de búsqueda separada, p. Ej.

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

... pero parece que se descontrolaría bastante rápido, ya que hacia los niveles superiores, los enemigos en el juego tendrían que proporcionar una enorme cantidad de experiencia para nivelar, y eso sería demasiado difícil de controlar. La nivelación se convertiría en una tarea imposible.

¿Alguien tiene punteros o métodos que usan para decidir cómo nivelar un personaje en función de la experiencia? Quiero ser justo en la nivelación y quiero adelantarme a los jugadores para no preocuparme por agregar constantemente nuevas búsquedas de experiencia / nivel.

Jorge
fuente
44
No, es solo un exponencial más lento (multiplicado por 10 cada ~ 3.3 niveles, o 100 cada ~ 6.6 niveles, en lugar de cada nivel). Geométrico sería como 1 [00], 4, 9, 25, 36, etc. Incluso 1100 1210 1331 1464 es una serie exponencial, que se multiplica por 1.1.
Random832
1
en.wikipedia.org/wiki/Exponential_growth Debería aclarar las cosas.
aaaaaaaaaaaa
1
@Stephen: @ Random832 es correcto, tanto el crecimiento "exponencial" como el "geométrico" se refieren a tener una relación constante entre términos sucesivos / equidistantes (lo que significa que la tasa de crecimiento es proporcional al valor actual; en cálculo, esto se afirma diciendo un función exponencial tiene f'(x) = c*f(x)) . El término "geométrico" se utiliza cuando el dominio (entrada) es discreto (por ejemplo, entero). La fórmula para el ejemplo de @ George, por encima del nivel 1, Experience = 100 * 2^(Level-2)es exponencial. La fórmula para su progresión, por encima del nivel 1, es Experience = 100^(Level-1)también exponencial.
BlueRaja - Danny Pflughoeft

Respuestas:

37

Es bastante común usar una relación cuadrada.

level = constant * sqrt(XP)

O el equivalente aproximado de una brecha de nivel linealmente ascendente.

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

Estos sistemas funcionan bastante bien cuando la ganancia de XP es aproximadamente lineal. Si un personaje de alto nivel puede ganar XP más rápido que un personaje de bajo nivel, entonces este no es el sistema correcto.

aaaaaaaaaaaa
fuente
3
Para los jugadores de tipo Achiever, sospecho que hay una gran expectativa de una mayor ganancia de XP a medida que su personaje progresa. Encuentro su solución interesante, y probablemente la modifique solo ligeramente para producir diferencias como 107-214-321-428, evitando así que el jugador vea solo números redondos y también con la esperanza de que esto pueda contribuir a hacer que el juego se sienta solo un poco más "orgánico" (estoy tratando de encontrar una palabra mejor que esta, pero "orgánico" es todo lo que tengo en este momento).
Randolf Richardson
1
+1 esto es exactamente lo que he hecho en el pasado, funciona muy bien
BlueRaja - Danny Pflughoeft
3
Ecuaciones para la brecha de nivel linealmente ascendente. level = (sqrt (100 (2experience + 25)) + 50) / 100 and experience = (level ^ 2 + level) / 2 * 100- (level * 100)
C9HDN
3
Gran respuesta y me gusta la curva que esto produce. Terminé usando una constante de 0.04. Para aquellos que se preguntan, el reverso de esta fórmula para calcular XP es: XP = nivel ^ 2 / constante.
BradH
3
@BradH En realidad, parece ser XP = (nivel / constante) ^ 2. En php, esto puede representarse como XP = pow (nivel / constante, 2) o en versiones posteriores, (nivel / constante) ** 2
Taylor Dondich
17

Probablemente encontrará útiles las funciones logarítmicas, ya que pueden usarse para ralentizar el aumento a medida que se obtienen más puntos de experiencia. Aquí hay dos páginas web que explican cómo funcionan:

  Gráficos de funciones logarítmicas
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Introducción a la representación gráfica de funciones logarítmicas
  http://www.purplemath.com/modules/graphlog.htm

Esto es lo que parece en un gráfico, que esperamos satisfaga sus necesidades:

ingrese la descripción de la imagen aquí

Randolf Richardson
fuente
1
@George Al jugar con los coeficientes, puede usar fácilmente una función logarítmica para escalar la nivelación de su jugador. +1 por usar las matemáticas
Stephen
2
Tenga en cuenta que esta es una implementación del requisito de XP exponencial. level = log(XP) <=> XP = e^level. El requisito puede resultar un poco elevado para los últimos niveles, pero funcionará bien con un crecimiento adecuado en la acumulación de XP.
aaaaaaaaaaaa
@eBusiness: Buen punto, pero esto puede no ser un problema ya que los personajes de nivel superior tienden a ganar más puntos con mayor facilidad y en un período de tiempo más corto (por ejemplo, atacando / matando monstruos más poderosos con una velocidad de golpe más rápida). Esta es una razón por la que creo que esta matemática podría ser adecuada para los videojuegos (especialmente en un contexto MMORPG).
Randolf Richardson
2
Me parece un poco extraño que OP se preocupe específicamente por el crecimiento exponencial y luego acepte una respuesta que describa lo mismo de otra manera. Pero supongo que ese es su problema.
aaaaaaaaaaaa
1
@eBusiness: ¿Quizás mi respuesta aclaró algo sobre el crecimiento exponencial que antes no estaba claro? Hay muchas formas diferentes de aplicar las matemáticas, y no estoy seguro de que incluso el mejor maestro de matemáticas pueda conocerlas todas (bueno, tal vez el segundo mejor maestro de matemáticas de todos modos).
Randolf Richardson
9

Estas son algunas formas que he usado hasta ahora. Se ordenan por tasa de crecimiento (simplemente multiplican cada ecuación por un valor constante):

  1. exp = level (este puede parecer extraño, pero para algunos juegos que recompensan los cambios de exp según el nivel del jugador, como borderlands, este puede encajar)

  2. exp = nivel * log 10 (nivel)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
  3. exp = level ^ const_value: para mi ejemplo configuré el valor const en 3/2

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

Creo que depende de cuán fácil pueda obtener la experiencia el jugador. Si el jugador puede obtener 200 xp en lvl 1 en 20 minutos y luego obtener 200 xp en lvl 2 en 2 minutos, entonces necesita escalar su xp exponencialmente.

Sin embargo, si ganar un nivel solo hace que sea un poco más fácil ganar xp, entonces debería hacer una función de nivel xp más. (Tal vez lineal con algún coeficiente> 1)

wangburger
fuente
4

A menudo, los puntos necesarios para ganar un nivel se basan en una curva. En muchos juegos de rol donde también hay muchas otras características y atributos de tu personaje que aumentan con tu nivel, también estarán en sus propias curvas.

Echa un vistazo a RPGMaker para ver cómo hacen las cosas. Mire específicamente las curvas de parámetros en las capturas de pantalla de la sección "Agregar algo de singularidad al personalizar el equipo inicial" del documento Creación de un personaje principal .

Básicamente, puede tener una curva de cuánto XP se necesita para subir de nivel, luego diferentes curvas de cuánto HP, MP, resistencia, resistencia, etc. se gana en cada nivel.

ingrese la descripción de la imagen aquí

Adam Harte
fuente
2

Considerar el tiempo

Primero debe descubrir cómo la tasa de ganancia de experiencia aumenta con el nivel. Luego puede adaptar su nivelación según el tiempo requerido . Si cada nivel adicional le permite ganar experiencia el doble de rápido, y necesita el doble de experiencia para nivelar, cada nivel requerirá la misma cantidad de tiempo.

Mi sugerencia es pensar cuánto tiempo debe pasar el jugador, luego adaptar la nivelación a eso.

Cabra Willy
fuente
-3

Tal vez debería usar un sistema de nivelación plano, donde cada nivel requeriría exactamente la misma cantidad de experiencia.

Łukasz Baran
fuente
3
Las respuestas deberían ser un poco más detalladas que una simple sugerencia. Intente relacionar algunos de los beneficios de esta estrategia en lugar de tener un sistema dinámico como el solicitado.
MichaelHouse
También tenga en cuenta que el autor original debe publicar información adicional ; Si otros usuarios tienen más que agregar, deberían considerar publicar una respuesta por separado.
Gnemlock