Hola a todos.
Bueno he hecho un código en C# (!!! Fuera de unity !!!) , el problema es que tengo un if que no se como usarlo para que se salga de el si solo una de las condiciones sea 0 o menos.
He probado a usar un while pero tampoco. Claro lo que hacia era mientras vida1>0 o vida2>2 se repita claro esto no parara hasta que los dos sean 0 o negativos. Ese es el fallo (Me pregunto como se haría para que solo si fuera uno 0 o menos se parar)
Después probé el if, Si vida1> 0 || vida2>0 haga ... pero parte del código no acaba de ejecutarse. Es decir se va repitiendo todo correcto hasta que llega el momento que uno estará a 0 o menos, no acaba de hacer lo que quiero que haga y acaba el if como si ya hubiera acabado.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
byte Turno = 0;
int porcentageArmadura = 2;
//Personaje1
int vida1 = 200; //Vida del perosonaje o bicho.
int defensa1 = 50; //Cada 10 de armadura son - 5% menos de daño.
int daño1 = 100; // Daño fisico.
int dañomagico1 = 25; //Daño magico.
int velocidadA1 = 2; //Determina quien empiza primero.
//Personaje2
int vida2 = 150;
int defensa2 = 100;
int daño2 = 70;
int dañomagico2 = 10;
int velocidadA2 = 1;
if (velocidadA1 > velocidadA2){ Turno = 1; Console.WriteLine("P1 es mas rapido"); }else{ Turno = 2; Console.WriteLine("P2 es mas rapido"); }
if (vida1>0 || vida2>0) {
if (Turno==1) {
Console.WriteLine("P1 Vida: {0}",vida1);
Console.WriteLine("P2 Vida: {0}", vida2);
Console.WriteLine("P1 ATACA!!!");
Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////");
int dañoCausado;
dañoCausado = daño1 + dañomagico1 - defensa2/porcentageArmadura;
Console.WriteLine("P1 le causa {0} de daño a P2",dañoCausado);
vida2 = vida2 - dañoCausado;
Console.WriteLine("P2 Vida: {0}", vida2);
dañoCausado = 0;
Turno = 2;
Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////");
}
if (Turno == 2)
{
Console.WriteLine("P1 Vida: {0}", vida1);
Console.WriteLine("P2 Vida: {0}", vida2);
Console.WriteLine("P2 ATACA!!!");
Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////");
int dañoCausado;
dañoCausado = daño2 + dañomagico2 - defensa1/porcentageArmadura;
Console.WriteLine("P2 le causa {0} de daño a P1", dañoCausado);
vida1 = vida1 - dañoCausado;
Console.WriteLine("P1 Vida: {0}", vida1);
dañoCausado = 0;
Turno = 1;
Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////"); Console.WriteLine("/////");
}
}
Console.ReadKey();
}
}
}
(//<fileStore.core_Attachment>/monthly_2016_11/Error.png.b9037bc00b42e3e3f23207735e84261e.png)
Hola, la logica del juego tuyo es "Si los dos estas vivos metete en el loop" (Si no es que hay un ganador) --> && . Probalo asi:
if(vida1 > 0 && vida2>0 )
Si vas a pasar cosas asi a Unity tene en cuenta que en todo Game Engine tenes el famosisimo Game Loop que corre indefinidamente, es decir que sucede la parte de las fisicas, la parte del renderizado, la de la logica de juego via scripts propios, la de la GUI, etc. Si en la logica de tu juego (una partecita del gameLoop) pones un while y ese while depende de porej cuadros futuros todo se va a tildar y no vas a salir nunca mas de ahi. Ej si tenes while(jugador.vida > 0) { (acciones) } , como la vida depende del cuadro a cuadro te vas a quedar siempre ahi. Por eso nunca uses while ya que no tenes salida asegurada, distinto es con un for que ya tenes condiciones de salida.
Saludos