Example #1
0
 /// <summary>
 /// Verifica si hay un barco posicionado sobre una ona del mar del barco que se quiere posicionar
 /// </summary>
 /// <param name="barco">El barco a posicionar</param>
 /// <returns>true si hay superposicion, false si no</returns>
 bool verificarSuperposicionBarcoIA(BarcoEnPartida barco)
 {
     if (barco.infoInstancia.orientacion == OrientacionBarco.Vertical)
     {
         for (int i = 0; i < barco.longitud; i++)
         {
             if (tableroIA[barco.infoInstancia.coordenadaDeReferencia.FilaToNum() - i, barco.infoInstancia.coordenadaDeReferencia.Columna])
             {
                 return(true);
             }
         }
     }
     else
     if (barco.infoInstancia.orientacion == OrientacionBarco.Horizontal)
     {
         for (int i = 0; i < barco.longitud; i++)
         {
             if (tableroIA[barco.infoInstancia.coordenadaDeReferencia.FilaToNum(), barco.infoInstancia.coordenadaDeReferencia.Columna + i])
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Example #2
0
 /// <summary>
 /// Obetener el barco golpeado por un disparo
 /// </summary>
 /// <param name="coordenada">La cordenada del disparo</param>
 /// <returns>El barco golpeado</returns>
 private BarcoEnPartida getBarcoGolpeado(Coordenada coordenada)
 {
     if (turnoDelUsuario)
     {
         for (int i = 0; i < informacionDeLaPartida.barcosIA.Count; i++)
         {
             BarcoEnPartida barco = informacionDeLaPartida.barcosIA[i];
             for (int j = 0; j < barco.infoInstancia.coordenadasOcupadas.Length; j++)
             {
                 //SI este es el barco que golpeamos
                 if (barco.infoInstancia.coordenadasOcupadas[j].Equals(coordenada))
                 {
                     return(barco);
                 }
             }
         }
     }
     else
     {
         for (int i = 0; i < informacionDeLaPartida.barcosUsuario.Count; i++)
         {
             BarcoEnPartida barco = informacionDeLaPartida.barcosUsuario[i];
             for (int j = 0; j < barco.infoInstancia.coordenadasOcupadas.Length; j++)
             {
                 if (barco.infoInstancia.coordenadasOcupadas[j].Equals(coordenada))
                 {
                     return(barco);
                 }
             }
         }
     }
     return(null);
 }
Example #3
0
 /// <summary>
 /// Verificar la ubicacion de un barco de la IA y lo posiciona si se puede ubicar
 /// </summary>
 /// <param name="barco">El barco a ubicar</param>
 /// <returns></returns>
 private bool VerfiUbicacionBarcoIA(BarcoEnPartida barco)
 {
     if (barco.infoInstancia.orientacion == OrientacionBarco.Vertical)
     {
         //Verificamos si el barco cabe
         if (barco.infoInstancia.coordenadaDeReferencia.FilaToNum() + 1 - barco.longitud >= 0)
         {
             //verificar si no hay otro barco
             if (!verificarSuperposicionBarcoIA(barco))
             {
                 ubicarBarcoIA(barco);
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else//Si el barco no cabe
         {
             return(false);
         }
     }
     else
     if (barco.infoInstancia.orientacion == OrientacionBarco.Horizontal)
     {
         //Si el barco cabe
         if (barco.infoInstancia.coordenadaDeReferencia.Columna - 1 + barco.longitud <= 9)
         {
             if (!verificarSuperposicionBarcoIA(barco))
             {
                 ubicarBarcoIA(barco);
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             //Si no cabe
             return(false);
         }
     }
     return(false);
 }
Example #4
0
    /// <summary>
    /// Instanciar los barcos en el world space y mostrarlos en el tablero del jugador
    /// </summary>
    private void InstanciarMisBarcos()
    {
        for (int i = 0; i < informacionDeLaPartida.barcosUsuario.Count; i++)
        {
            BarcoEnPartida barco    = informacionDeLaPartida.barcosUsuario[i];
            Vector3        posicion = GameObject.Find("Escenario/TableroJugador/" + barco.infoInstancia.coordenadaDeReferencia).transform.position;
            Vector3        rotacion = barco.infoInstancia.orientacion == OrientacionBarco.Vertical ? Vector3.zero : new Vector3(0, 90, 0);
            GameObject     b        = Instantiate(Resources.Load <GameObject>("Barcos/" + barco.nombre), posicion, Quaternion.Euler(rotacion));
        }

        for (int i = 0; i < tableroUsuario.GetLength(0); i++)
        {
            for (int j = 0; j < tableroUsuario.GetLength(1); j++)
            {
                if (tableroUsuario[i, j])
                {
                    GameObject.Find("Escenario/TableroJugador/" + Coordenada.FILAS[i] + j).gameObject.GetComponent <Renderer>().material.color = Color.yellow;
                }
            }
        }
    }
Example #5
0
    /// <summary>
    /// Re seleccionar un barco previamente ubicado, para cambiar su posicion
    /// </summary>
    /// <param name="barco">El barco a reubicar</param>
    public void reUbicarBarco(Barco barco)
    {
        BarcoEnPartida barcoEnPart = null;

        //Ahora lo buscamos dentro de la lista de barcos
        for (int i = 0; i < informacionDeLaPartida.barcosUsuario.Count; i++)
        {
            if (barco.instanciaDelBarco.coordenadaDeReferencia.Equals(informacionDeLaPartida.barcosUsuario[i].infoInstancia.coordenadaDeReferencia))
            {
                barcoEnPart = informacionDeLaPartida.barcosUsuario[i];
                break;
            }
        }

        informacionDeLaPartida.barcosUsuario.Remove(barcoEnPart);
        if (barco.instanciaDelBarco.orientacion == OrientacionBarco.Vertical)
        {
            for (int i = 0; i < barco.informacionBarco.Longitud; i++)
            {
                int fila = barco.instanciaDelBarco.coordenadaDeReferencia.FilaToNum() - i;
                tableroUsuario[fila, barco.instanciaDelBarco.coordenadaDeReferencia.Columna] = false;
            }
        }
        else
        if (barco.instanciaDelBarco.orientacion == OrientacionBarco.Horizontal)
        {
            for (int i = 0; i < barco.informacionBarco.Longitud; i++)
            {
                int columna = barco.instanciaDelBarco.coordenadaDeReferencia.Columna + i;
                tableroUsuario[barco.instanciaDelBarco.coordenadaDeReferencia.FilaToNum(), columna] = false;
            }
        }
        pintarZonaDelMar(barco, TipoDePintado.Restablecer, barco.informacionBarco.Longitud);
        barco.ubicado          = false;
        barco.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
        this.barcoAUbicar      = barco;
    }
Example #6
0
 /// <summary>
 /// Ubica un barco de la IA, despues que se han hecho todas las verificaciones
 /// </summary>
 /// <param name="barco"></param>
 void ubicarBarcoIA(BarcoEnPartida barco)
 {
     barco.infoInstancia.coordenadasOcupadas = new Coordenada[barco.longitud];
     if (barco.infoInstancia.orientacion == OrientacionBarco.Vertical)
     {
         for (int i = 0; i < barco.longitud; i++)
         {
             int fila = barco.infoInstancia.coordenadaDeReferencia.FilaToNum() - i;
             tableroIA[fila, barco.infoInstancia.coordenadaDeReferencia.Columna] = true;
             barco.infoInstancia.coordenadasOcupadas[i] = new Coordenada(Coordenada.FILAS[fila], barco.infoInstancia.coordenadaDeReferencia.Columna);
         }
     }
     else
     if (barco.infoInstancia.orientacion == OrientacionBarco.Horizontal)
     {
         for (int i = 0; i < barco.longitud; i++)
         {
             int columna = barco.infoInstancia.coordenadaDeReferencia.Columna + i;
             tableroIA[barco.infoInstancia.coordenadaDeReferencia.FilaToNum(), columna] = true;
             barco.infoInstancia.coordenadasOcupadas[i] = new Coordenada(barco.infoInstancia.coordenadaDeReferencia.Fila, columna);
         }
     }
     informacionDeLaPartida.barcosIA.Add(barco);
 }
Example #7
0
    // para instanciar los barcos de la IA
    private void InstanciarBarcosIA()
    {
        Barco b = null;

        //Instanciamos todos los barcos tipo 4
        for (int i = 0; i < cantidadBarcos4; i++)
        {
            b = Instantiate <GameObject>(Resources.Load <GameObject>("Barcos/" + informacionDeLaPartida.BarcosDeLaPartida[3]), new Vector3(10000, 10000, 10000), Quaternion.identity).GetComponent <Barco>();
            Coordenada       coordenadaRandom  = new Coordenada("A", 0);
            OrientacionBarco orientacionRandom = OrientacionBarco.Horizontal;
            bool             posicionado       = false;
            while (!posicionado)
            {
                //obtenemos una orientacion y coordenada random
                orientacionRandom = Random.Range(0, 2) == 0 ? OrientacionBarco.Horizontal : OrientacionBarco.Vertical;
                coordenadaRandom  = new Coordenada(Coordenada.FILAS[(int)Random.Range(0, 10)], (int)Random.Range(0, 10));
                BarcoEnPartida barco = new BarcoEnPartida(b.informacionBarco.Nombre, b.informacionBarco.Longitud, orientacionRandom, coordenadaRandom);
                posicionado = VerfiUbicacionBarcoIA(barco);
            }
            Destroy(b.gameObject);
        }

        //barcos tipo 3
        for (int i = 0; i < cantidadBarcos3; i++)
        {
            b = Instantiate <GameObject>(Resources.Load <GameObject>("Barcos/" + informacionDeLaPartida.BarcosDeLaPartida[2]), new Vector3(10000, 10000, 10000), Quaternion.identity).GetComponent <Barco>();
            Coordenada       coordenadaRandom  = new Coordenada("A", 0);
            OrientacionBarco orientacionRandom = OrientacionBarco.Horizontal;
            bool             posicionado       = false;
            while (!posicionado)
            {
                //obtenemos una orientacion y coordenada random
                orientacionRandom = Random.Range(0, 2) == 0 ? OrientacionBarco.Horizontal : OrientacionBarco.Vertical;
                coordenadaRandom  = new Coordenada(Coordenada.FILAS[(int)Random.Range(0, 10)], (int)Random.Range(0, 10));
                BarcoEnPartida barco = new BarcoEnPartida(b.informacionBarco.Nombre, b.informacionBarco.Longitud, orientacionRandom, coordenadaRandom);
                posicionado = VerfiUbicacionBarcoIA(barco);
            }
            Destroy(b.gameObject);
        }

        //barcos tipo 2
        for (int i = 0; i < cantidadBarcos2; i++)
        {
            b = Instantiate <GameObject>(Resources.Load <GameObject>("Barcos/" + informacionDeLaPartida.BarcosDeLaPartida[1]), new Vector3(10000, 10000, 10000), Quaternion.identity).GetComponent <Barco>();
            Coordenada       coordenadaRandom  = new Coordenada("A", 0);
            OrientacionBarco orientacionRandom = OrientacionBarco.Horizontal;
            bool             posicionado       = false;
            while (!posicionado)
            {
                //obtenemos una orientacion y coordenada random
                orientacionRandom = Random.Range(0, 2) == 0 ? OrientacionBarco.Horizontal : OrientacionBarco.Vertical;
                coordenadaRandom  = new Coordenada(Coordenada.FILAS[(int)Random.Range(0, 10)], (int)Random.Range(0, 10));
                BarcoEnPartida barco = new BarcoEnPartida(b.informacionBarco.Nombre, b.informacionBarco.Longitud, orientacionRandom, coordenadaRandom);
                posicionado = VerfiUbicacionBarcoIA(barco);
            }
            Destroy(b.gameObject);
        }

        //barcos tipo 1
        for (int i = 0; i < CantidadBarcos1; i++)
        {
            b = Instantiate <GameObject>(Resources.Load <GameObject>("Barcos/" + informacionDeLaPartida.BarcosDeLaPartida[0]), new Vector3(10000, 10000, 10000), Quaternion.identity).GetComponent <Barco>();
            Coordenada       coordenadaRandom  = new Coordenada("A", 0);
            OrientacionBarco orientacionRandom = OrientacionBarco.Horizontal;
            bool             posicionado       = false;
            while (!posicionado)
            {
                //obtenemos una orientacion y coordenada random
                orientacionRandom = Random.Range(0, 2) == 0 ? OrientacionBarco.Horizontal : OrientacionBarco.Vertical;
                coordenadaRandom  = new Coordenada(Coordenada.FILAS[(int)Random.Range(0, 10)], (int)Random.Range(0, 10));
                BarcoEnPartida barco = new BarcoEnPartida(b.informacionBarco.Nombre, b.informacionBarco.Longitud, orientacionRandom, coordenadaRandom);
                posicionado = VerfiUbicacionBarcoIA(barco);
            }
            Destroy(b.gameObject);
        }

        for (int i = 0; i < tableroIA.GetLength(0); i++)
        {
            for (int j = 0; j < tableroIA.GetLength(1); j++)
            {
                if (tableroIA[i, j])
                {
                    GameObject.Find("Escenario/TableroEnemigo/" + Coordenada.FILAS[i] + j).gameObject.GetComponent <Renderer>().material.color = Color.yellow;
                }
            }
        }
    }
Example #8
0
    /// <summary>
    /// Realiza un disparo hacia el tablero del oponente
    /// </summary>
    /// <param name="coordDisparo">La coordenada dode se va a disparar</param>
    public void Disparar(Coordenada coordDisparo)
    {
        if (turnoDelUsuario)
        {
            tableroDisparosUsuario[coordDisparo.FilaToNum(), coordDisparo.Columna] = true;

            //if Hit
            if (tableroIA[coordDisparo.FilaToNum(), coordDisparo.Columna])
            {
                //buscamos el barco que golpie;
                BarcoEnPartida barcoGolpeado = getBarcoGolpeado(coordDisparo);
                barcoGolpeado.infoInstancia.golpesRestantes--;
                if (barcoGolpeado.infoInstancia.golpesRestantes == 0)
                {
                    //Se destuye el barco
                    informacionDeLaPartida.barcosIA.Remove(barcoGolpeado);
                    Debug.Log("Barco Enemigo Destruido");
                    dineroGanado += bonoDestruirBarco;
                }
                GameObject.Find("Escenario/TableroEnemigo/" + coordDisparo).GetComponent <Renderer>().material.color = Color.green;
            }
            else
            {
                GameObject.Find("Escenario/TableroEnemigo/" + coordDisparo).GetComponent <Renderer>().material.color = Color.red;
            }
        }
        else
        {
            tableroDisparosIA[coordDisparo.FilaToNum(), coordDisparo.Columna] = true;

            //if hit
            if (tableroUsuario[coordDisparo.FilaToNum(), coordDisparo.Columna])
            {
                BarcoEnPartida barcoGolpeado = getBarcoGolpeado(coordDisparo);
                barcoGolpeado.infoInstancia.golpesRestantes--;
                if (barcoGolpeado.infoInstancia.golpesRestantes == 0)
                {
                    //Se destuye el barco
                    informacionDeLaPartida.barcosUsuario.Remove(barcoGolpeado);
                    Debug.Log("Barco Usuario DEstruido");
                }
                GameObject.Find("Escenario/TableroJugador/" + coordDisparo).GetComponent <Renderer>().material.color = Color.green;
            }
            else
            {
                GameObject.Find("Escenario/TableroJugador/" + coordDisparo).GetComponent <Renderer>().material.color = Color.red;
            }
        }


        //Verificamos las condiciones de victoria o derr0ta
        if (informacionDeLaPartida.barcosIA.Count == 0)
        {
            Debug.Log("Se acabo la partida, has ganado");
            dineroGanado += bonoGanarPartida;
            status        = "gano";
            StartCoroutine(WaitForRequest());
            SceneManager.LoadScene("MenuPrincipal");
        }
        else
        if (informacionDeLaPartida.barcosUsuario.Count == 0)
        {
            Debug.Log("Se acabo la patida, ha ganado la maquina");
            status = "perdio";
            StartCoroutine(WaitForRequest());
            SceneManager.LoadScene("MenuPrincipal");
        }
        else
        {
            turnoDelUsuario = !turnoDelUsuario;
        }
    }