2011-08-05 13 views
12

Im haciendo un juego PHP basado en navegador y en mi base de datos para los jugadores tiene un registro de EXP o experiencia total de esos jugadores.php juego, fórmula para calcular un nivel basado en exp

Lo que necesito es una fórmula para traducir esa exp en un nivel o rango, sobre 100.

Así que empiezan en el nivel 1, y cuando llegan a decir, 50 exp, ir al nivel 2, a continuación, cuando llegan a tal 125/150, nivel 2.

Básicamente una fórmula que hace constantemente ya cada nivel (más exp)

¿alguien puede ayudar? No soy muy bueno en matemáticas: P

+4

¿Podría usted elegir una respuesta aceptada? Esto permite que todos sepan que ha encontrado una respuesta a su pregunta. Puede hacerlo haciendo clic en la marca de verificación junto a la respuesta que cree que es mejor. –

Respuesta

20

Muchas fórmulas se ajustan a tus necesidades, dependiendo de qué tan rápido quieras que se repita la exp requerida.

De hecho, deberías hacer esto configurable (o al menos cambiar fácilmente en una ubicación central), para que puedas equilibrar el juego más tarde. En la mayoría de los juegos, estas (y otras) fórmulas se determinan solo después de playtesting y prueban varias opciones.

Aquí hay una fórmula: El primer nivel ocurre en 50 exp; segundo en 150exp; tercero a 300 exp; cuarto a 500 exp; etc. En otras palabras, primero debes reunir 50 exp, luego 100 exp, luego 150exp, etc. Es un Arithmetic Progression.

Para subir de nivel X necesita 25*X*(1+X) exp.

Agregado: Para obtenerlo al revés, solo usa matemática básica. De esta manera:

y=25*X*(1+X) 
0=25*X*X+25*X-y 

Eso es un estándar Quadratic equation, y se puede resolver para X con:

X = (-25±sqrt(625+100y))/50 

Ahora, ya que queremos que ambos X e Y a ser mayores que 0, podemos colocar una de las respuestas y se quedan con:

X = (sqrt(625+100y)-25)/50 

Así, por ejemplo, si tenemos 300 exp, vemos que:

(sqrt(625+100*300)-25)/50 = (sqrt(30625)-25)/50 = (175-25)/50 = 150/50 = 3 

Ahora bien, esta es la tercera LevelUp, lo que significa que el nivel 4.

+0

Gracias, pero digo que solo tengo caracteres EXP variables, y quiero poner eso en una ecuación y arroja un número de nivel. ¿Como podría hacerlo? – user880356

+0

Diría que esta fórmula es muy buena para nivelar. Crece más lento que la progesión geométrica, donde cada nuevo nivel necesita X veces más experiencia. Esta progesión mantiene un buen equilibrio y la sensación de que cada nivel es más difícil de lograr, pero no imposible. Pero creo que deberías usar Excel o algo para hacer dos gráficos y ver por ti mismo. –

+0

En realidad, 150/5 = 30 –

0

lo tomo lo que estás buscando es la cantidad de experiencia para decidir qué nivel están en? Tales como: Nivel 1: 50exp Nivel 2: 100exp Nivel 3: ¿150exp?

si ese es el caso, se puede utilizar un bucle de algo como:

$currentExp = x; 
$currentLevel; 
$i; // initialLevel 

for($i=1; $i < 100; $i *= 3) 
{ 
    if(($i*50 > $currentExp) && ($i < ($i+1)*$currentExp)){ 
     $currentLevel = $i/3; 
     break; 
    } 
} 

Esto es tan sencillo como puedo realizar un algoritmo de niveles, no he probado así que no se pueden producir errores.

Avísame si utilizas esto, ¡es genial pensar que un algoritmo que escribí podría estar en un juego!

+0

cuando pongo números altos en esa ecuación como el exp (p. Ej., 14554), entonces no está produciendo un nivel. – user880356

+0

Oh, agregaría una instrucción if después del ciclo for en caso de que haya superado el nivel máximo (que se estableció en 100). – John

4

Realmente depende de cómo quiera que la exp escale para cada nivel. Digamos

LvL1 : 50 Xp 
Lvl2: LvL1*2=100Xp 
LvL3: LvL2*2=200Xp 
Lvl4: LvL3*2=400Xp 

Esto significa que tiene una progresión geométrica El Xp necesario para completar el nivel n sería

`XPn=base*Q^(n-1)` 

En mi ejemplo de base es el inital 50 XP y Q es 2 (relación) .

Siempre que un jugador comienza a lvl1 sin XP:

when he dings lvl2 he would have 50 total Xp 
at lvl3 150xp 
at lvl4 350xp 

y así sucesivamente El XP total que un jugador tiene cuando llega un nuevo nivel hacia arriba sería:

base*(Q^n-1)/(Q-1) 

En su caso ya sabes cuánto xp tiene el jugador. Para una proporción de 2 la fórmula se simplifica:

base * (2^n-1)=total xp at level n 

para averiguar el nivel de una cantidad XP dado todo lo que tiene que hacer es aplicar una fórmula simple

$playerLevel=floor(log($playerXp/50+1,2)); 

Pero con una progresión geométrica se será cada vez más difícil para los jugadores nivelar.

Para mostrar los XP necesarios para el siguiente nivel, puede calcular el total de XP para el siguiente nivel.

$totalXpNextLevel=50*(pow(2,$playerLevel+1)-1); 
$reqXp=$totalXpNextLevel - $playerXp; 

Comprobar inicio del mensaje: para llegar desde lvl1 -> lvl2 necesita 50 XP lvl2 -> lvl3 100XP

para ir de lvl x para lvl (x + 1) lo haría necesitará

$totalXprequired=50*pow(2,$playerLevel-1); 
+0

gracias hombre, perfecto: D hay de todos modos puedo hacer un ciclo para mostrar una lista de los requisitos de EXP para cada nivel? – user880356

+0

también hay alguna fórmula para averiguar cuánto exp queda en su nivel actual? por lo que genera la marca exp de su nivel actual, y exp para golpear la siguiente. Así que puedo calcular un porcentaje de cuánto han progresado en su nivel actual. – user880356

+0

editado con xp necesario para el siguiente nivel, para mostrar algo% de base solo usa el nivel requerido de XP requerido – Sleeperson

4

Si quería lo siguiente:

  • Nivel 1 0 @ puntos
  • Nivel 2 @ 50 puntos
  • Nivel 3 @ 150 puntos
  • Nivel 4 @ 300 puntos
  • Nivel 5 @ 500 puntos etc.

Una ecuación experiencia (X) con el nivel (L) relativo es:

X = 25 * L * L - 25 * L 

para calcular el nivel de experiencia dada utilizar la ecuación de segundo grado para obtener:

L = (25 + sqrt(25 * 25 - 4 * 25 * (-X)))/ (2 * 25) 

Este simplifica a:

L = (25 + sqrt(625 + 100 * X))/50 

Luego redondee usando el la función del suelo para obtener su fórmula final:

L = floor(25 + sqrt(625 + 100 * X))/50 

Donde L es el nivel, y X es la experiencia señala

+0

gracias. Digamos que quería que la nivelación fuera más lenta que la tuya, ¿qué variable tendría que editar? – user880356

+0

y qué fórmula usaría para encontrar cuánto exp se necesita hasta el siguiente nivel? gracias. Soy horrible en matemáticas y necesito esto. – user880356

+0

La primera ecuación en mi respuesta anterior 'X = 25 * L * L - 25 * L' proporciona la cantidad de puntos de experiencia requeridos para llegar a un nivel específico – Mike

2

Google me dio esto:

function experience($L) { 
$a=0; 
    for($x=1; $x<$L; $x++) { 
    $a += floor($x+300*pow(2, ($x/7))); 
    } 
return floor($a/4); 
} 

for($L=1;$L<100;$L++) { 
echo 'Level '.$L.': '.experience($L).'<br />'; 
} 

Se supone que el ser la fórmula que utiliza RuneScape, es posible que pueda modificarlo según sus necesidades. salida Ejemplo:

Level 1: 0 
Level 2: 55 
Level 3: 116 
Level 4: 184 
Level 5: 259 
Level 6: 343 
Level 7: 435 
Level 8: 536 
Level 9: 649 
Level 10: 773 
1

Aquí es una solución rápida que utilicé para un problema similar. Es probable que desee cambiar las matemáticas, por supuesto, pero le dará el nivel de un xp sumado.

$n = -1; 
    $L = 0; 

    while($n < $xp){ 
     $n += pow(($L+1),3)+30*pow(($L+1),2)+30*($L+1)-50; 
     $L++; 
    } 

    echo("Current XP: " .$xp); 
    echo("Current Level: ".$L); 
    echo("Next Level: " .$n); 
0

El original se basa en una base de 50, por lo tanto, los 25 dispersos en la ecuación.

Esta es la respuesta como una ecuación real. Simplemente suministre su multiplicador (base) y su negocio.

$_level = floor(floor(($_multipliter/2) 
         + sqrt(($_multipliter^2) + (($_multipliter*2) * $_score)) 
        ) 
        /$_multipliter 
       ) ; 
Cuestiones relacionadas