En mi juego, el XP necesario para alcanzar el siguiente nivel es Nivel actual × Umbral de nivel . Teniendo en cuenta eso, ¿cómo puedo obtener mi nivel actual del XP total obtenido?
Por ejemplo:
Level Threshold = 50
Current Level = 1
Comenzando en el nivel 1, necesitaría (1 × 50) = 50 XP para llegar al nivel 2, y así sucesivamente.
Level 1: 50 XP needed to reach level 2
Level 2: 100 more XP needed to reach level 3
Level 3: 150 more XP needed to reach level 4
En otras palabras, la tabla de progresión es la siguiente:
Level 1: 0 XP to 49 XP
Level 2: 50 XP to 149 XP
Level 3: 150 XP to 299 XP
Level 4: 300 XP to 499 XP
Si tengo 300 XP, llegaré al nivel 4. ¿Cómo puedo calcular eso en general?
levels
mathematics
progression
Jay van Diyk
fuente
fuente
Respuestas:
Al resolver las matemáticas y resolver la
Level
condición condicional de la experienciaXP
, obtenemos:Por ejemplo, ¿cuál es el nivel del jugador para ?XPAGS= 300
De acuerdo a lo pedido.
¿O para qué es el nivel
XP = 100000
?En términos más generales, para un umbral de inicio arbitrario en el Nivel 1:
También puede hacer lo contrario y calcular lo
XP
necesario para cualquier nivel dado resolviendo la fórmula anterior para XP.Tenga en cuenta que la fórmula anterior funciona con fracciones, pero debe redondear al siguiente valor entero. Por ejemplo, en C ++ / C # podría usar (int) Level.
Para obtener la fórmula de forma cerrada anterior, utilicé ecuaciones de diferencia, suma de Gauss y una fórmula cuadrática.
Si está interesado en la solución de esta fórmula paso a paso ...
Hacemos un algoritmo recursivo comenzando nuestras consideraciones que finalmente
Experience(next_level) = Experience(current_level) + current_level*50
.Por ejemplo, para obtener tenemos:XPAGSL e v e l 3
Donde,
2*50
proviene de la solicitud del OP que la experiencia necesaria para alcanzar el siguiente nivel es el nivel actual * 50.Ahora, sustituimos con la misma lógica en la fórmula. Es decir:XpagsL e v e l 2
Sustituya en la fórmula anterior:XPAGSL e v e l 2= XPAGSL e v e l 1+ 2 × 50
y es solo 50, que es nuestro punto de partida. Por lo tantoXpagsL e v e l 1
Podemos reconocer un patrón para calcular recursivamente niveles más altos y una cadena finita de sumatorias.
Donde N es el nivel a alcanzar. Para obtener el XP para el nivel N, necesitamos resolver para N.
o solo
Finalmente, poniendo todo de un lado:
Esta es ahora una fórmula cuadrática que produce una solución negativa y positiva, de la cual solo lo positivo es relevante ya que no hay niveles negativos. Ahora obtenemos:
El nivel actual condicional en XP y umbral lineal es por lo tanto:
XP
Level 100
Editar : esta fórmula funciona completamente como debería y genera correctamente el
level
condicional actualXP
con una progresión de umbral lineal según lo solicitado por el OP. (La fórmula anterior arrojó "nivel + 1" al suponer que el jugador comenzó desde el Nivel 0, que era mi error: ¡lo había resuelto en mi hora de almuerzo escribiendo en un pañuelo! :)fuente
La solución simple y genérica , si no necesita repetir este cálculo millones de veces por segundo (y si lo hace, probablemente esté haciendo algo mal), es usar un bucle:
La gran ventaja de este método, además de no requerir matemáticas complicadas, es que funciona para cualquier función arbitraria de exp-por-nivel. Si lo desea, incluso puede inventar valores de exp arbitrarios por nivel y almacenarlos en una tabla.
Si necesita (por alguna extraña razón) una solución aún más rápida, también puede calcular previamente la cantidad total de experiencia necesaria para alcanzar cada nivel, almacenar esto en una tabla y utilizar una búsqueda binaria para encontrar el nivel del jugador. La precalculación todavía lleva un tiempo proporcional al número total de niveles, pero la búsqueda solo requiere un tiempo proporcional al logaritmo del número de niveles.
fuente
La pregunta ha sido respondida con código, pero creo que debería responderse con matemáticas. Alguien puede querer entender en lugar de solo copiar y pegar.
(truncar a entero, porque el jugador necesita todos los XP requeridos para obtener cualquiera de los bonos de nivel)
fuente
XP_Level(0) = 50
y luego podemos evitar resolver? ¿Algún beneficio, pros y contras? Creo que sería bueno tocar esta respuesta. +1Aquí hay un enfoque para resolver el problema usando álgebra básica. Si no te importan los pasos, salta al final.
Una cosa fácil de lograr es, dado un nivel
n
, la experiencia totale
necesaria para obtener ese nivel:El
t
término representa el aumento de XP necesario por nivel: 50, en el ejemplo.Podemos resolver lo anterior usando la fórmula para secuencias aritméticas ( identidad de suma ):
Sin embargo, queremos la fórmula opuesta: el nivel del jugador dada su experiencia total. Lo que realmente queremos hacer es resolver el nivel
n
,. Primero, agrupemos los términos:Ahora podemos usar la fórmula cuadrática:
Ecuación final:
fuente
Es muy importante conocer todas las matemáticas involucradas aquí por todo tipo de razones, algunas de ellas aplicables al desarrollo de juegos.
PERO
Este es un sitio de desarrollo de juegos, no un sitio de matemáticas. Entonces, analicemos cómo funcionan estas cosas, no como series algorítmicas, sino como conjuntos , porque ese es el tipo de matemática que se aplica a la nivelación en juegos que realmente podría desarrollar para vender, y este es el sistema que subyace a la mayoría (pero no a todas) la nivelación sistemas (al menos históricamente).
Los jugadores tienden a preferir números agradables y redondos que son fáciles de recordar y visualizar, y en ninguna parte es esto más importante que en un sistema de juego basado en niveles donde el jugador necesita X cantidades de xp para avanzar al nivel Y.
Hay dos buenas razones para elegir números redondos:
Los números redondos son agradables. El propósito de los juegos es ser agradable. El placer es importante, especialmente porque los dilemas del juego a menudo serán cualquier cosa menos agradables por diseño.
¿Por qué es importante tener esto en cuenta?
La mayoría de los algoritmos de series compuestas no producen buenos números redondos.
La mayoría de las series no se detienen en un punto bonito (cada respuesta que he visto hasta ahora solo continúa para siempre). ¿Asi que que hacemos? Nos aproximamos y luego determinamos qué conjunto de niveles debe aplicarse al sistema de juego .
¿Cómo sabemos qué aproximaciones son apropiadas? Consideramos cuál es el punto de nivelación dentro del sistema de juego.
La mayoría de los juegos tienen límites de nivel que se activan en algún momento. Hay algunas maneras en que esto puede desarrollarse:
XP + (XP * Modifier)
o lo que sea).No son unos sistemas de juego donde no hay límite de nivel y el sistema se determina mediante algoritmos. Por lo general, sistemas como este utilizan un sistema X-powers-of-Y para hacer que los números exploten rápidamente. Esto hace que sea muy fácil llegar al nivel L-1, se espera razonablemente que la mayoría de los jugadores lleguen al nivel L, excesivamente difícil llegar al nivel L + 1, y los jugadores envejecerán y morirán antes de llegar a L + 2. En este caso, "L" es un nivel que ha decidido que es el nivel objetivo apropiado para jugar y en el que normalmente habría limitado el sistema, pero dejaría la opción abierta para que las personas se engañen y piensen que es una buena idea XP para siempre. (Siniestro!) En este tipo de sistema, las matemáticas que se encuentran aquí tienen mucho sentido. Pero es un caso muy estrecho, y rara vez se encuentra en los juegos reales.
¿Asi que que hacemos?
Calcular los niveles y XP? No. ¿ Determinar los niveles y XP? Sí.
Usted determina qué significan los niveles y luego decide qué conjunto de niveles debería estar disponible. Esta decisión se reduce a la granularidad dentro del sistema de juego (¿Existe una gran diferencia en el poder entre los niveles? ¿Cada nivel confiere una nueva habilidad? Etc.) y si los niveles se usan o no como un sistema de activación ("No se puede ir a la siguiente ciudad hasta que tengas 10 años, niño ", o un sistema de escalera competitivo aplica niveles basados en niveles, etc.).
El código para esto es bastante sencillo, y es solo determinación de rango:
O con una declaración if, o un caso, o una cadena de if / elif, o cualquiera que sea el idioma en el que esté utilizando soportes (Esta parte es el elemento menos interesante de cualquier sistema de juego, solo proporciono dos formas porque sucede que esté en modo Erlang en este momento, y la sintaxis anterior puede no ser obvia para todos.):
¿Es asombrosa la matemática? No, en absoluto. ¿Es la implementación manual de la determinación del elemento establecido? Sí. Eso es todo lo que es, y esto es más o menos la forma en que he visto en realidad hace en la mayoría de los juegos a lo largo de los años.
Como nota al margen, esto no debe hacerse cada vez que el jugador gana experiencia. Por lo general, realiza un seguimiento de "XP to go" como un valor, y una vez que el jugador agota o supera el valor "to go" (de cualquier forma que lo esté haciendo), calcula esto una vez para averiguar dónde está realmente el jugador en, almacene eso, calcule el próximo "ir" menos las sobras (si se permite llevar XP hacia adelante) y repita.
fuente