Juego php, fórmula para calcular un nivel basado en exp

Estoy 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.

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

Entonces comienzan en el nivel 1, y cuando golpean dicen, 50 exp, pasan al nivel 2, luego cuando alcanzan quizás 125/150, nivel 2.

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

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

Muchas fórmulas pueden adaptarse a sus necesidades, dependiendo de qué tan rápido desee que se amplíe la exp requerida.

De hecho, debes 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 probar y probar varias opciones.

Aquí hay una fórmula: el primer nivel ocurre a los 50 años; 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 una progresión aritmética .

Para el nivel X , necesitas 25*X*(1+X) exp.

Agregado: Para obtenerlo al revés, solo usa matemáticas básicas. Me gusta esto:

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

Esa es una ecuación cuadrática estándar, y puedes resolver para X con:

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

Ahora, dado que queremos que tanto X como Y sean mayores que 0, podemos descartar una de las respuestas y quedarnos con:

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

Entonces, 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, este es el 3er nivel , así que eso significa el nivel 4.

Si quisiera 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 que relaciona la experiencia (X) con el nivel (L) es:

 X = 25 * L * L - 25 * L 

Para calcular el nivel de una experiencia determinada, utiliza la ecuación cuadrática para obtener:

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

Esto simplifica a:

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

Luego redondee usando la función de piso para obtener su fórmula final:

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

Donde L es el nivel, y X es los puntos de experiencia

Realmente depende de cómo quieras que el exp escale para cada nivel. Digamos

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

Esto significa que tienes una progresión geométrica. El Xp requerido para completar el nivel n sería

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

En mi ejemplo base es el 50 xp inicial y Q es 2 (relación).

Siempre que un jugador comience en lvl1 sin xp:

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

y así sucesivamente El total de xp que un jugador tiene cuando sube un nuevo nivel sería:

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

En tu caso, ya sabes cuánto tiene xp el jugador. Para una relación de 2, la fórmula es más simple:

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

para averiguar el nivel de una cantidad xp determinada, todo lo que necesita hacer es aplicar una fórmula simple

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

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

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

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

Compruebe el inicio de la publicación: para obtener de lvl1 -> lvl2 necesita 50 xp lvl2 -> lvl3 100xp

para obtener de lvl x a lvl (x + 1) necesitaría

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

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).'
'; }

Se supone que sea la fórmula que use RuneScape, es posible que yo pueda modificarla según sus necesidades. Ejemplo de salida:

 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 

Aquí hay 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 sumdo.

  $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); 

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

si ese es el caso, podrías usar un ciclo 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 simple como puedo hacer un algoritmo para niveles, no lo he probado para que haya errores.

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

El original se basó en una base de 50, por lo tanto, los 25 dispersos a través de 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 ) ; 
Intereting Posts