Estoy desarrollando un juego de batalla de texto simple y tengo algunos problemas para calcular cuánto XP se debe ganar después de una batalla, hay algunos factores que quiero considerar:
1) Los jugadores, por supuesto, deben ganar buenos XP si vencen a alguien del mismo nivel
2) Los jugadores deberían obtener una gran XP si vencen a alguien de un nivel superior
3) Los jugadores deberían ganar XP pobre si derrotan a alguien de un nivel inferior
4) Lo anterior debería escalar bien, es decir, si el jugador A es de nivel 10 y lucha contra el jugador B de nivel 9 u 11, la diferencia no debería ser enorme (por supuesto, obtendrían más XP por derrotar al personaje de nivel 11, pero no lo haríamos) esperar que esto sea enorme), pero si él luchara contra un nivel 5 o 15, esta diferencia debería ser enorme.
Solo teniendo problemas para calcular algo que funciona bien en todos los escenarios, actualmente mi tabla de XP se parece a la siguiente:
Current Level XP Needed Increase from Last Level
1 30 0
2 65 35
3 106 41
4 154 48
5 210 56
...
10 672 123
En PHP mi código se ve a continuación para calcular el XP necesario:
$offset = 30;
$multiplier = 1.17;
$base = $prevXp * $multiplier;
$xp = $base + $offset;
He intentado algunas cosas diferentes, pero no me han impresionado, me gustaría trabajar calculando la diferencia en XP y luego usando algún tipo de multiplicador, pero no me han impresionado los resultados.
Cualquier ayuda / aportación sería apreciada.
Respuestas:
Dos sugerencias:
Exponentes! Calcule alguna "recompensa base xp" para cada nivel. Entonces la fórmula para matar es base_xp_reward * pow (1.1, target_level - player_level). Es posible que desee limitar la ganancia al máximo, para anular de alguna manera las vulnerabilidades, y puede que desee dar cero XP por debajo de una cierta diferencia, para evitar el cultivo de lowbies.
(La recompensa de XP base también puede ser una progresión exponencial simple, si lo desea - constant_factor * pow (1.25, nivel), tal vez. Entonces puede definir "exp to level" en términos de un múltiplo de la recompensa de XP base. Podría ser más fácil de equilibrar de esta manera.)
Alternativamente, hagamos esto realmente simple. Haz lo mismo con base-XP-recompensa. Luego, calcula una tabla a mano para obtener las bonificaciones que deseas de los distintos niveles de diferenciales. Haz que se base en una relación, de modo que matar a alguien un nivel por encima de ti siempre dé, por ejemplo, un 10% de XP adicional sobre la recompensa base. Y ahora no necesita preocuparse por una fórmula en absoluto: simplemente puede hacer que los números hagan lo que quiera.
Las fórmulas están sobrevaloradas, a veces solo necesitas meter algunos números y jugarlos de oído.
fuente
Formulas are overrated, sometimes you just need to jam some numbers in and play it by ear.
Yo diría algo como "ganar xp por el daño delt / recibido". Entonces, si un nivel 10 con 100 CV lucha contra un nivel 15 con 200 CV. Parece injusto, pero si el nivel 10 pudiera matar al nivel 15, obtendría el doble de XP de lo que obtendría si luchara contra un nivel 10 con solo 100 CV.
Además, de esta manera no tienes que preocuparte por cosas como si dos personas pelearan contra el mismo enemigo con diferentes equipos. Por ejemplo, si un nivel 8 y un nivel 10 luchan contra un nivel 13. Si el nivel 8 tiene un mejor equipo / armadura, entonces obtendría más XP, entonces el nivel 10 simplemente porque causa más daño al nivel 13.
Pero lo más importante: establecer reglas, playtest, establecer reglas, playtest, establecer reglas, plasytest, etc., etc.
Incluso los mejores MMO de los mejores desarrolladores ajustan su sistema de distribución xp mientras dure el juego.
fuente
Solo en mi humilde opinión, lo más importante para acertar es la cantidad de XP de escala requerida para subir de nivel. Un amigo mío usó una variación de Fibonacci para su navegador Rogue-like, por ejemplo 100XP, 100XP, 200XP, 300XP, 500XP, 800XP, etc.
También he oído hablar de una mecánica en algunos juegos donde el nivel se resta del XP obtenido en cada batalla. Por ejemplo, si una batalla en particular gana 50XP, y están en el nivel 20, entonces solo reciben 30XP. Si estuvieran en el nivel 50 o superior, no ganarían nada.
fuente