2012-02-09 9 views
5

Estoy desarrollando un juego y no quería una matriz llena de niveles que probablemente aumentaría la carga de la página al recorrerlos para encontrar el nivel de los usuarios. Necesitaba un algoritmo para resolver esto de forma independiente con solo la experiencia del usuario a mano. Esto se debe a que quiero que el nivel máximo sea de alrededor de 1,000, y una matriz de ese tamaño tardaría un poco en pasar.Experiencia con el algoritmo de nivel PHP

que tienen, con algo de ayuda, llegar a la siguiente algoritmo para la diferencia entre cada nivel:

difference = difference + (difference/7) 

y funciona bien en los niveles más bajos, pero este gráfico son los niveles 1-141 , y como puede ver, es extremadamente fácil hasta aproximadamente la mitad del camino, luego dispara y sigue disparando, hasta llegar al punto 1.500.000.000 de experiencia es nivel ~ 250, lo que no es suficiente.

The Graph for Levels 1-141

lo tanto, mi pregunta es, ¿cuál cree usted que es una mejor manera de hacer la diferencia entre cada nivel? Cualquier consejo es bienvenido, voy a probar todos los algoritmos.

Gracias.

+0

Votando para reabrir, no tengo idea de por qué esto fue cerrado. Es un problema que casi todos los programadores de juegos * (cuyo juego contiene xp-points) * se enfrentan. Sin embargo, ** podría ** ver moverlo a [gamedev.SE] (http://gamedev.stackexchange.com), donde probablemente estaría cerrado, no por estar fuera de tema sino por ser [un duplicado] (http://gamedev.stackexchange.com/questions/18867). –

+0

El tema de la pregunta es totalmente de carácter de diseño. Su problema es cómo mostrar el cambio de dificultades a un jugador para que se sienta crecer lo suficiente en todos los niveles. Es solo una cuestión de diseño de UI. Sí, debería ir a gamedev. El hecho de que ya haya una pregunta similar, solo lo prueba. – Gangnus

Respuesta

4

En primer lugar, está el sistema lineal.

Level = Experience/1000 

Cada 1.000 experiencia equivale a un nivel. Para ralentizar la nivelación, disminuye la velocidad a la que se adquiere la experiencia. Esto tiene la ventaja adicional de hacer que las actividades súper fáciles cuenten como cero experiencia después, por lo que no puedes convertirte en épico matando ratas.

Luego hay curvas de regresión decreciente de varios géneros. Por ejemplo:

Level = (Experience/1000)^(1/scale) 

Con una escala de 2 (curva sqrt), para el nivel 1, necesita 1,000 experiencia. Para dos, necesitas cuatro mil. Por tres, nueve mil. Cada nivel se vuelve más y más difícil. Si reduces la escala, la velocidad a la que aumenta la dificultad disminuye (la pendiente se hace menos empinada).

Sugiero construir la función en sí, en lugar de construir la primera derivada (como parece haber intentado hacer). Eso te dará una mejor idea sobre el gráfico antes de integrarte.

+0

Lo siento si esto suena estúpido, pero^significa raíz cuadrada? Gracias. – Oyed

+0

Significa "en la potencia n-ésima". x^(1/n) = n-ésima raíz de x. – axiomer

+0

@axiomer Gracias. ¿Cómo voy a hacer eso en PHP? – Oyed

3

Probablemente desee algo que tenga una asíntota horizontal en y = 1,000, que crece más rápido para x pequeño que para x grande.Por ejemplo, lo que se quiere resolver el sistema

dy/dx = a/x 
lim (x->infinity) y = 1,000 

Tenemos que

y = C_0 - a/(x^2) 

Usando el límite, tenemos que

lim (x->infinity) y = C_0 

Así obtenemos la ecuación

level = 1,000 - a/(exp^2) 

Podemos hacer que todos los usuarios comiencen con o ne experiencia, o simplemente cambiar esto a

level = 1,000 - a/(exp^2 + 1) 

De cualquier manera, los usuarios podrían comenzar a cabo a nivel

level(0) = 1,000 - a 

lo tanto, si desea que los usuarios comienzan en el nivel 0, dejar que a = 1,000; si los usuarios comienzan en el nivel 1, y mucho a = 999. Por lo tanto, podría recomendar lo siguiente:

level(0) = 1,000 - 1,000(exp^2 + 1) 

Por la experiencia a partir de 0. Puede cambiar la velocidad de convergencia cambiando el poder de exp; las potencias más altas significan una convergencia más rápida a la experiencia máxima, las potencias más bajas significan una convergencia más larga. El poder 2 es solo una sugerencia; cualquier poder real positivo estará bien.

Tenga en cuenta que este es solo un enfoque para la construcción de dicha función. Puede integrar cualquier dy/dx que sea más grande para x pequeña que para x grande, y obtendrá otra función que puede parametrizar de forma más o menos igual.

0

Realmente, todo depende de cómo se hace un nivel de acuerdo a su dificultad. Ese algoritmo podría establecerse de modo que el cambio de 1 a 1.1 se sentiría mucho más que el cambio de 1000 a 1000000. O, por el contrario.

¿Será la sensibilidad de algorythm a la dificultad en diferentes rangos ser la misma para el mismo cambio relativo? O para un cambio absoluto? ¿O para otra función de la dificultad y su cambio? Es para que usted decida.

Por lo tanto, el valor de la dificultad y la estrategia de su crecimiento es solo un problema psicológico.

Lo que me gusta: hacer que estos números crezcan linealmente y que sean pequeños. 1-1000 por 1 es más que suficiente. Puede incluir algunos nombres para diferentes rangos de dificultades, de acuerdo con el tema de su juego. Pero, por supuesto, puedes comenzar en millones e ir a cuatrillones. Nuevamente, es tu elección. Es diseño, no programación o algoritmos.

Cuestiones relacionadas