Problema
El jugador obtiene 5 puntos por nivel hasta el nivel 80 con un máximo de 400. Hay 5 estadísticas para distribuir y no hay límite máximo de cuánto puede agregar a una estadística.
- Fuerza
- Resistencia
- Inteligencia
- Agilidad
- Suerte - Otorga probabilidad crítica y daño crítico
Me gustaría implementar una ecuación de retorno decreciente en digamos Suerte. Para una probabilidad crítica, no deseo que el jugador pueda alcanzar una probabilidad crítica del 100%.
Habrá un límite al que alcanzará a medida que el crecimiento cada vez más decreciente llegue a 0 por punto agregado.
Por ejemplo, si la probabilidad crítica máxima que quiero que tenga el jugador es del 40%, cada punto de suerte aumentará la probabilidad crítica cada vez menos, hasta que la probabilidad crítica alcance el 40%. Por el cual 1 suerte dará una cantidad muy muy minúscula.
¿Alguna solución? ¡Gracias y su ayuda es muy apreciada!
Respuestas:
Desea comenzar con una función asintótica. Es decir, uno que comienza en un número
a
y se acerca a otro númerob
, pero en realidad nunca lo alcanza. Probablemente será más fácil sia = 0
yb = 1
. Tomarás esta ecuación, ingresarás el número de puntos de estadística (puntos de suerte) que tiene el personaje y obtendrás el valor de estadística real (probabilidad de crítico) como salida.Un ejemplo muy simple es
y = x / (x + n)
donden
hay alguna constante positiva. Aquíx
está su entrada, donde introduce el número de puntos de estadísticas, yy
es su salida, donde obtiene el valor de estadística final.Para
n = 5
ver cómo se ve:Cuando te alimentas
x = 0
, obtienesy = 0
, pero no importa cuán grandex
lo pones,y
nunca llega a 1. Perfecto.Ahora, puede ajustar esto al deseo de su corazón. Puede multiplicar por un factor de escala para establecer el 'límite' a lo que desee.
y = a * x / (x + 5)
. Si desea que el límite sea del 40%, multiplique por .4.y = .4 * x / (x + n)
. Ahora, cuando alimente enx
's,y
aumentará, pero nunca llegará a .4.Ajuste
n
para establecer qué tan rápido o lento aumenta la ecuación.n = 100
va a aumentar mucho más lento quen = 5
:Puede resolver esta ecuación
n
si sabe que desea el valor de estadística que desea alcanzar en un número específico de puntos de estadística. Digamos que el personaje debería tener un 35% de probabilidad de crítico con 100 puntos de suerte. Resolviendo.35 = .4 * 100 / (100 + n)
paran
los rendimientosn = 14.29
.Estos números tampoco tienen que ser constantes en bruto. Tal vez otras estadísticas entran en el cálculo de los valores de
n
. Tal vez algunos personajes tienen diferentesn
's para que escalen mejor en su estadística' preferida '.Si desea una curva que tenga una forma diferente o sea más compleja, hay muchos otros ejemplos de funciones asintóticas que también podría usar. Te dejaré para explorar eso como quieras.
fuente
P = x/(x+n)
es la probabilidad, dada una bolsa con n piedras negras y x piedras blancas, de que saque una piedra blanca de la bolsa ciega. Un enfoque que puede hacer es establecer los criterios X = su suerte y N = su suerte. Tu oportunidad de criticar es del 50% si tienes la misma suerte que tu enemigo. Si desea que la probabilidad básica sea del 10%, entonces nosotros X = su suerte, N = 9x su suerte.Una buena base sería una función como
arctan
, ya que pasa a través del origen y exhibe una asíntota horizontal.Escala por
40 / (pi/2)
o80/pi
para el límite deseado. Luego, transformaluck
para obtener la inclinación de la curva que deseas.fuente
Me gusta mucho la forma en que los juegos de Souls abordan este problema. En lugar de hacer que cada estadística otorgue bonificaciones basadas en una función continua como se ha sugerido, otorga bonificaciones en una función lineal por partes.
No puedo recordar los números exactos de la parte superior de mi cabeza, pero las funciones están en la línea de lo siguiente (cada estadística tiene sus propias constantes)
Este método proporciona muchos beneficios para el diseñador y el jugador. El diseñador se beneficia ya que puede ajustar el beneficio exacto por punto en una habilidad de manera bastante trivial, y el jugador se beneficia ya que saben exactamente cuánto beneficio verán de un nivel a otro.
En el caso de una función continua, algunos niveles pueden dar un beneficio que no se refleja en los números debido al alias de medición. Seguro que el último nivel te dio un aumento de 0.9 en la bonificación XYZ, pero como el valor real pasó de 23.52 a 24.42, y redondeas el número antes de mostrarlo, el jugador no se da cuenta de que algo ha cambiado.
Desde una perspectiva UX, definitivamente sugeriría ir con una función lineal por partes. Sin embargo, usar una función continua puede ser más fácil de sintonizar más adelante, ya que los jugadores no estarán tan apegados a las constantes de ronda.
fuente
ceil
la cantidad aumento antes de añadir, y sólo permiten entero niveles de estadísticas. ofloor
entoncesx <= 0: x = 1
para evitar accidentalmente pasarse de la tapa suave.Jan Dvorak señala la función exponencial en un comentario. Lo explicaré aquí.
Tenga en cuenta que las operaciones exponenciales (y trigonométricas) son considerablemente más costosas desde el punto de vista computacional que incluso las operaciones de raíz cuadrada, que son mucho peores que las matemáticas básicas, por lo que probablemente sea mejor con el enfoque de Adam si va a hacer estos cálculos muchas veces por segundo . Si solo calcula los valores cuando el jugador nivela, cambia de equipo, etc., la velocidad no es importante, así que use lo que le dé la mejor curva.
Una función exponencial es alguna base, B , a alguna potencia, x ,
y=B^x
. Los matemáticos usan comúnmente una base de e , (~ = 2.718), pero no hay razón para que no puedas usar 2 o 10 si lo prefieres.y=e^x
Se ve como esto:Observe que el lado izquierdo se mueve asintóticamente a 0. Entonces podemos voltear el eje x haciendo
y=e^(
-x)
, pero todavía está descendiendo de 1 a 0 y queremos que ascienda. Entonces podemos voltearlo a través del eje y cony=
-e^(-x)
. Ahora está ascendiendo de -1 a 0. Podemos sumar 1 para obtenery=
1- e^(-x)
y está ascendiendo de 0 a 1.A partir de aquí, solo es cuestión de escalarlo vertical y horizontalmente. Podemos multiplicar todo por algún valor, llamémoslo A , que establece el límite asintótico. Entonces podemos multiplicar x por un valor de tasa de cambio, k , para ajustar la rapidez con que se acerca al límite.
Esto nos da una ecuación final de
y=A*(1 - e^(-k*x))
. Usando los valores dek=0.012
yA=0.5
, podemos establecer el límite al 50% y dejar que se acerque bastante a ese límitex=400
.Ahora, puedes hacer algunos ajustes a esto. Un ajuste que hice estaba cambiando
A=0.5041
, así que si redondeamos a un porcentaje con 2 decimales (como 32.23%), y (399) = 49.99% e y (400) = 50.00%. A partir de y (347), hay varios lugares donde se necesitan dos puntos para obtener un cambio de 0.01%. Pero ese último punto posible aún ofrece un beneficio (apenas) tangible y lo lleva a un 50%.Alternativamente, podríamos ajustar el
k
valor para tener un efecto similar. Enk=0.02305
, el valor se redondea a 49.99% ay=399
y 50.00% ay=400
. Sin embargo, esto tiene el problema de que el gráfico es muy poco profunda en el extremo - se tarda 48 puntos para conseguir que la última centésima de un por ciento (dey(352)=49.99%
ay(399)=49.99%
ay(400)=50.00%
) y el último 1% de probabilidad crit toma la friolera de 230 puntos (dey(170)=49.01%
ay(400)=50.00%
) que probablemente disminuya demasiado en los retornos.Si lo desea, puede ajustar tanto A como k para que disminuya a un límite algo más alto a una velocidad más lenta, para dar algo entre decadencia lineal y exponencial. Al hacerlo
y=0.6*(1-e^(-0.00447*x))
, terminas con esto:Tenga en cuenta que la curva continúa más allá del 50%, pero dado que hay un límite difícil de calificación de 400, el jugador no puede pasar ese punto (y si logran pasarlo, todavía hay un límite difícil de 60% crítico). Con esta ecuación, puede usar 1 lugar decimal y aún ver ganancias cada 2 a 3 puntos, con un tic final de
y(399)=49.9%
ay(400)=50.0%
.Matemáticamente, las ecuaciones anteriores pueden parecer mejores, ya que en realidad se están acercando al 50%, pero personalmente creo que las ganancias del 0.1% cada par de puntos se sienten mejor que las ganancias del 0.01%. Incluso con
A=0.05041
yk=0.012
, se necesitan 102 puntos para pasar dey(298)=49.00%
ay(400)=50.00%
. El 25% de tus puntos gastados en el 2% de tu crítico probablemente esté demasiado disminuido. La ecuación del 60% solo toma 20 puntos para el último porcentaje (que sigue siendo 5 veces mayor que los 4 puntos necesarios para el primer porcentaje).Con estas últimas ecuaciones, simplemente conecté las ecuaciones en una hoja de cálculo y ajusté manualmente los valores hasta que se veían bien. Tendrías que hacer algo similar si quisieras una gorra diferente.
fuente
Para una solución muy simple, ¿qué tal raíz cuadrada x 2
La raíz cuadrada de 400 (máximo posible) es 20, 20 * 2 = 40.
fuente
1/2
) y no explica el razones por las cuales esto podría ser útil.