Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Sobre simular resultados

Iniciado por Phantom3D, Octubre 03, 2017, 01:10:46 PM

Tema anterior - Siguiente tema
Buenas, ante todo saludar a todos, y quiero hacer una pregunta que me dijeron que en unity es posible hacerlo, pero no encuentro documentación al respecto.
 
Quisiera saber si es posible crear una "simulación" de este tipo
 
Suponemos que tenemos a un guerrero de nivel 1, con armadura 1,y 10 puntos de vida,  y lo queremos pelear contra un enemigo nivel2 sin armadura y 10 ptos de vida. pero queremos simular el resultado sin "interfaz 3D" ni interfaz "2D" , solo rellenando casilla y dar a boton de ver resultado de combate. y saber si muere el enemigo o si muere mi soldado y si es así volver con la reompensa añadida a la misión de matar al enemigo. "sólo simulado" (a lo pcfutbol - ver resultado). Eso es viable en unity? Algún tutorial que explique eso y en donde se puede ver?
 
Saludos,

La respuesta rapida es si, utilzando las variables del propio "script" como entrada y la consola como salida. El como de realizarlo depende de la complejidad que se busca y de tus conocimientos. Que sabes hacer, o que tenes claro?

 

Yo tengo claro la idea de un videojuego que "no existe" es nuevo en la idea. y sobre programar "ni idea" solo se como sería el videogame. xD

basicamente quieres "dungeon&dragons" juego de tablero, pero que el que tira los dados (el dungeonMaster) sea el PC, jeje
 
muy sencillo, solo depende de las "reglas" de juego que uses, y de como quieres que sea la "Interfaz de Usuario"(como introduces los datos del "combate" y como se muestra el resultado en pantalla)

Es viable, solo tendrias que encargarte del "dado"(probabilidades) y de como afecta esto a las salidas ataque, daño, bloqueo, etc , Por ejemplo por mencionar algo, un guerrero de armadura 90/100 tendra 10% de probabilidades de recibir un ataque, vs alguien con armadura 10/100 el 90% de recibirlo. Podes seguir jugando mas con las probabilidades como si tiene tal tipo de armadura tendra un rezacho a tal tipo de ataques fijo, y no para otros, y podes ser mas creativo pero la idea de estos juegos es esa, el RNG (random number generator).
 
En Unity te recomiendo ver esto, es bastante general y te habla de como crear distintos "pesos" hablando de probabilidades, aunque hay formas mucho mas simples: https://docs.unity3d.com/Manual/RandomNumbers.html
 
Tenes la clase Random para meter aleatoriedad en general, y el randon.range que te devuelve un numero entre los valores que le pasas de rango con distribucion uniforme (todos tienen igual probabilidad de salir, no se si habra otras distribuciones disponibles).
 
El truco es que si algo tiene el 98% de salir es muy probable que si haces un random.range entre 0 y 100 y evaluas el 98% salga con el 98% de probabilidades,
 
entonces suponete que el recibir o no daño depende de armadura, defensa, etc metes todo eso en una probFinal entre 0 y 100 , haces el if(resultado < probFinal) y te deberia dar un true o false, es decir recibio o no recibio daño. si fuera el caso del daño especifico que antes mencione, si alguien te ataca con determinado ataque al que sos inmune, el gran numero ese es cero, entonces nunca se tiene probabilidad de que se reciba el ataque, es decir no aporta al probFinal sino que lo cambia directamente, no es necesario tirar el dado o podes hacerlo al final metiendo 100 o 0 de probabilidad, es identico. Para concatenar probabilidades independientes podes multiplicarlas (floats entre 0 y 1) y luego x100.
 
Un Ejemplito:
 

//Un caso podria ser
if(tipodeAtaque == Ataque.espadaNivel2)
{  
//el sujeto es inmune a este ataque, no es necesario tirar los dados
     //o podria ser que sea su debilidad, entonces --> RecibirDaño();
    Bloquear();
     return;
 
}
//probDefender, probArmadura, probSuerte floats entre 0f y 1f
//probSuerte podria tirarse un dado para esta prob sola,para que exista apenas entre 0.8f y 1f por ejemplo
probFinalNORecibirDaño = probDefender * probArmadura * probSuerte;
//Numero Ej inventado
//probFinalNORecibirDaño = 0.57f;
probFinalNORecibirDaño *= 100;   //prob del 57% de no recibir daño
//se tira el dado
if(Random.range(,101) <= probFinalNORecibirDaño)   //101 proque es exclusivo, toma hasta 100
RecibirDaño();
else
     Bloquear();

 
OSea un vez tengas esto del dado el resto es hacer todo por pasos de forma personalizada, por ej el atacante ataca, dicho ataque llena en un numero o algo (estructura o lo que sea) que sea portador de informacion (tipo de ataque, daño, extras....), esa informacion la recibe el defensor, se tira el dado (fijate que el dado lo podes tirar como defensor o atacante), resulta en que hay o no ataque, si lo hay, la info sacada del ataque influye.

Ese tipo de juegos se pueden hacer hasta con php, no te hace falta un super engine jaja es todo a base de picar codigo, yo programé algo parecido en un examen de c( la profesora era un friki y te metía examenes que eran locura pura)
El resiltado era un texto que aparecia en la consola  de windows 

Etiquetas: