League of Morgan - Hackveneno

Programación Orientada a Objetos (Tower defense - kingdom rush)

Moderator: julianmartinez16

User avatar
HugoHernandez2000
Posts: 22
Joined: Tue Jan 22, 2019 2:06 pm

Re: League of Morgan - Hackveneno

Post by HugoHernandez2000 » Tue Apr 02, 2019 5:20 pm

Diapositivas Preentrega:
Hugo Alejandro Hernández Cárdenas
POO#2

User avatar
felipeh323
Posts: 9
Joined: Tue Jan 22, 2019 2:09 pm

Re: League of Morgan - Hackveneno

Post by felipeh323 » Fri Apr 05, 2019 6:26 pm

Sprint #10

Martes se realizo la pre entrega del juego.


1. ¿Qué hemos hecho?

se clasificaron algunos miembros dato en private y se realizó su respectiva inicializacion en el método void start.

2. ¿Qué vamos a hacer?

vamos a volver a diseñar todo lo relacionando con el disparo de las torres y en la generacion de enemigo para generar copias que se vayan incrementado.

3. ¿Qué dificultades hemos tenido?

tenemos un error en la barra de vida ya que esta disminuye sin que las torretas disparen al mismo tiempo que estas no hacen esta acción.




Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Torre : MonoBehaviour
{

    private GameObject enemigo;
    private bool esta_activa;
    public GameObject bala;
    public float Hurt;
    private float distancia_umbral;

    public GameObject Enemigo
    {
        get
        {
            return enemigo;
        }

        set
        {
            enemigo = value;
        }
    }

    public bool Esta_activa
    {
        get
        {
            return esta_activa;
        }

        set
        {
            esta_activa = value;
        }

    }




    GameObject BuscarEnemigoCercano()
    {
        ArrayList enemigos = PoolingUnidades.unidades;
        GameObject temp;
        foreach (Object item in enemigos)
        {
            temp = (GameObject)item;
            if (Vector3.Distance(temp.transform.position, this.transform.position) < distancia_umbral)
            {
                return temp;
            }
        }
        return null;
    }

    // Use this for initialization
    void Start()
    {
        Hurt = 10f;
        distancia_umbral = 10;
    }

    // Update is called once per frame
    void Update()
    {
        Enemigo = BuscarEnemigoCercano();
        if (Enemigo != null)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.yellow);
        }
        float dist = (Enemigo.transform.position - transform.position).magnitude;
        /*Enemigo = BuscarEnemigoCercano();
        if (Enemigo != null)
        {
        Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.yellow);
        }
        float dist = (Enemigo.transform.position - transform.position).magnitude;

        if (dist <= distancia_umbral)
        {
        Debug.DrawLine(this.transform.position, Enemigo.transform.position, Color.red);
        Disparar();
        }*/
    }
    void Disparar()
    {
        GameObject obj = (GameObject)Instantiate(GameObject.Find("bala"), this.transform.position, Quaternion.identity);
        Bala bala = obj.GetComponent<Bala>();
        bala.ActivarBala(this);
    }

    /* GameObject BuscarEnemigoCercano()
    {
    ArrayList enemigos = PoolingUnidades.unidades;
    foreach (GameObject item in enemigos)
    {

    if (Vector3.Distance(item.transform.position, this.transform.position) < distancia_umbral) ;
    {
    return item;
    }
    }
    return null;

    }*/

}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bala : MonoBehaviour
{


    private GameObject objetivo;
    private float velocidad;
    public float Hurt { get; set; }





    // Start is called before the first frame update
    void Start()
    {
        velocidad = 2;
    }


    // Update is called once per frame
    void Update()
    {
        Vector3 direccion;
        if (objetivo != null)
        {
            direccion = objetivo.transform.position - this.transform.position;
            this.transform.position += velocidad * direccion * Time.deltaTime;

        }

    }
    public void ActivarBala(Torre torre)
    {
        objetivo = torre.Enemigo;
        Hurt = torre.Hurt;
    }
}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Unidad : MonoBehaviour
{

    public GameObject ruta;

    private int indice;
    private Vector3 posicion_inicial;
    private Vector3 posicion_siguiente;
    public float Vida;
    private float vel;
    private float distancia_punto;
    private bool esta_viva;

    // Use this for initialization
    void Start()
    {
        Vida = 100f;
        vel = 1f;
        distancia_punto = 0.5f;

        //posicion_inicial = this.transform.position;
        esta_viva = true;
        posicion_inicial = this.transform.position;
        posicion_siguiente = ruta.transform.GetChild(0).position;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 dir;

        if (esta_viva == true)
        {
            dir = posicion_siguiente - this.transform.position;
            dir.z = 0;
            this.transform.position += dir * vel * Time.deltaTime;

            if (dir.magnitude <= distancia_punto)
            {
                if (indice + 1 < ruta.transform.childCount)
                {
                    indice++;
                    posicion_siguiente = ruta.transform.GetChild(indice).position;
                    Debug.Log(" xs" + posicion_siguiente.x + " ys" + posicion_siguiente.y);
                }
                else
                {
                    indice = 0;
                    this.transform.position = posicion_inicial;
                    posicion_siguiente = ruta.transform.GetChild(0).position;
                }
            }
        }
    }



    private void OnTriggerEnter2D(Collider2D otro)
    {
        if (otro.gameObject.tag == "bala")
        {
            Destroy(otro.gameObject);
            this.Vida -= otro.gameObject.GetComponent<Bala>().Hurt;
        }
    }

    public bool Esta_viva
    {
        get
        {
            return esta_viva;
        }

        set
        {
            esta_viva = value;
        }
    }
}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LogicaBarraVida : Unidad
{


    public GameObject unidad0_1;
    public GameObject barra_verde;
    public GameObject barra_roja;
    private float lifeInicio;
    private float lifeActual;
    private float escala;
    private float escala01;
    SpriteRenderer sr;

    // Use this for initialization
    void Start()
    {
        escala = 0.001f;
        escala01 = 0f;
        sr = barra_verde.GetComponent<SpriteRenderer>();
        lifeInicio = unidad0_1.GetComponent<Unidad>().Vida;
        lifeActual = lifeInicio;

    }

    // Update is called once per frame
    void Update()
    {
        //escala = (lifeInicio - lifeActual) / 100f;
        if (sr.transform.localScale.x > 0)
        {

            sr.transform.localScale -= new Vector3(escala, 0);
            escala01 -= 1.85f * escala;

        }
        //se le asigna la posicion a la barra de vida
        barra_verde.transform.position = unidad0_1.transform.position - new Vector3(1.1f - sr.bounds.size.x / 2, -0.8f);
        barra_roja.transform.position = unidad0_1.transform.position - new Vector3(0f, -0.5f);
        lifeInicio = lifeActual;
        lifeActual = unidad0_1.GetComponent<Unidad>().Vida;

    }
}



EVIDENCIAS:
Image
Last edited by felipeh323 on Tue Apr 09, 2019 2:49 pm, edited 1 time in total.
Felipe herrera Arteaga
POO #2

User avatar
felipeh323
Posts: 9
Joined: Tue Jan 22, 2019 2:09 pm

Re: League of Morgan - Hackveneno

Post by felipeh323 » Tue Apr 09, 2019 2:54 pm

Felipe herrera Arteaga
POO #2

User avatar
felipeh323
Posts: 9
Joined: Tue Jan 22, 2019 2:09 pm

Re: League of Morgan - Hackveneno

Post by felipeh323 » Tue Apr 09, 2019 11:53 pm

Sprint # 11
Actividades de la Semana 11 (08/04/2019 - 14/04/2019)
. Organizar los post del blog
. Solucionar el error del disparo de las torres
. Modificar el pooling de unidades para que se generen más barcos de forma progresiva
. Empezar la programación de un menú y de un mensaje de Game Over
Martes(09/04/2019)
1. ¿Qué hemos hecho?
Se creó una nueva clase "Disparar" con el objetivo de solucionar el error al disparar en las torres, además se organizó el post del juego en el blog
2. ¿Qué vamos a hacer?
Modificar el pooling de unidades para generar barcos de forma progresiva con un aumento en la velocidad, tambíen se va a organizar el rango de la Torre al disparar la flecha
3. ¿Qué dificultades hemos tenido?
Se presentan algunos errores en el código pero son errores por falta de realizar la instancia de una clase dentro de otra


Evidencias :
Image

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Flechas : MonoBehaviour
{
    private GameObject objetivo;
    private float disparoLife = 2f;
    private float speed = 5f;

    private const string ENEMIGO = "Enemigo";
    // Use this for initialization
    void Start()
    {

    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag.Equals(ENEMIGO))
        {
            Debug.Log("Ataco al enemigo");
            Destroy(this.gameObject);
        }
    }
    public void ActivarFlecha(Torre torre)
    {
        objetivo = torre.Enemigo;
    }
    // Update is called once per frame
    void Update()
    {

        Vector3 direccion;

        if (objetivo != null)
        {
            direccion = objetivo.transform.position - this.transform.position;
            this.transform.position += speed * direccion * Time.deltaTime;
            Destroy(this.gameObject, disparoLife);

        }

    }
}
Felipe herrera Arteaga
POO #2

User avatar
felipeh323
Posts: 9
Joined: Tue Jan 22, 2019 2:09 pm

Re: League of Morgan - Hackveneno

Post by felipeh323 » Thu Apr 11, 2019 11:58 pm

Inicio de Menu Principal:

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MenuPricipal : MonoBehaviour {

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    public void EmpezarJuego()
    {
        ScenaManager.LoadScene(SceneMaganer.GetActiveScene().buildIndex + 1);

    }
}
Evidencia:
Image
Mensaje de GameOver:

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Over : MonoBehaviour
{
    public GameObject GameOverText;
    public static GameObject GameOverStatic;

    void Start()
    {
        Over.GameOverStatic = GameOverText;
        Over.GameOverStatic.gameObject.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {

    }
    public static void Show()
    {
        Over.GameOverStatic.gameObject.SetActive(true);

    }
}
Evidencia:
Image
Felipe herrera Arteaga
POO #2

User avatar
xacarana
Site Admin
Posts: 1170
Joined: Fri Jan 15, 2016 6:13 pm

Re: League of Morgan - Hackveneno

Post by xacarana » Fri Apr 12, 2019 10:27 am

Image
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
HugoHernandez2000
Posts: 22
Joined: Tue Jan 22, 2019 2:06 pm

Re: League of Morgan - Hackveneno

Post by HugoHernandez2000 » Tue Apr 30, 2019 11:42 pm

Sprint # 12
Actividades de la Semana 12 (22/04/2019 - 28/04/2019)
  • Modificar el código del juego
  • Realizar la clase GameOver
  • Buscar nuevas guías para solucionar los errores del juego
Martes(23/04/2019) y Viernes(26/04/2019)

1. ¿Qué hemos hecho?

Se trato de dar solución a los errores en el juego, se volvió a realizar el código de todo el juego, pero aún se presentan los mismos errores

2. ¿Qué vamos a hacer?
Realizar el código e implementación del mensaje Game Over pero para hacer que esto funcione es necesario darle solución a los errores

3. ¿Qué dificultades hemos tenido?

El diseño del menú no se pudo completar debido a que el vídeo en el que nos basamos tiene una versión de Unity diferente a la que tenemos instaladas, en el juego no se están generando las flechas en las copias de las torretas, por lo tanto la vida del barco no se ve afectada en ningún momento, otro error que presenta el juego es la creación de los barcos, estos no se están generando de forma progresiva, solo se generan dos y luego dos en el mismo intervalo de tiempo, no aumentan las copias del barco.

Evidencias:

Image

Image

Código:

Code: Select all

 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bala : MonoBehaviour
{


    private GameObject objetivo;
    private float velocidad;
    public float Hurt { get; set; }





    // Start is called before the first frame update
    void Start()
    {
        velocidad = .5f;
    }


    // Update is called once per frame
    void Update()
    {
        Vector3 direccion;
        if (objetivo != null)
        {
            direccion = objetivo.transform.position - this.transform.position;
            this.transform.position += velocidad * direccion * Time.deltaTime;

        }

    }
    public void ActivarBala(Torre torre)
    {
        objetivo = torre.Enemigo;
        Hurt = torre.Hurt;
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Disparar : MonoBehaviour
{
    private GameObject objetivo;
    private float disparoLife = 2f;
    private float speed = 5f;

    private const string ENEMIGO = "Enemigo";
    // Use this for initialization
    void Start()
    {

    }
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag.Equals(ENEMIGO))
        {
            Debug.Log("Ataco al enemigo");
            Destroy(this.gameObject);
        }
    }
    public void ActivarFlecha(Torre torre)
    {
        objetivo = torre.Enemigo;
    }
    // Update is called once per frame
    void Update()
    {

        Vector3 direccion;

        if (objetivo != null)
        {
            direccion = objetivo.transform.position - this.transform.position;
            this.transform.position += speed * direccion * Time.deltaTime;
            Destroy(this.gameObject, disparoLife);

        }

    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LogicaBarraVida : Unidad
{


    public GameObject unidad0_1;
    public GameObject barra_verde;
    public GameObject barra_roja;
    private float lifeInicio;
    private float lifeActual;
    private float escala;
    private float escala01;
    SpriteRenderer sr;

    // Use this for initialization
    void Start()
    {
        escala = 0.001f;
        escala01 = 0f;
        sr = barra_verde.GetComponent<SpriteRenderer>();
        lifeInicio = unidad0_1.GetComponent<Unidad>().Vida;
        lifeActual = lifeInicio;

    }

    // Update is called once per frame
    void Update()
    {
        //escala = (lifeInicio - lifeActual) / 100f;
        if (sr.transform.localScale.x > 0)
        {

            sr.transform.localScale -= new Vector3(escala, 0);
            escala01 -= 1.85f * escala;

        }
        //se le asigna la posicion a la barra de vida
        barra_verde.transform.position = unidad0_1.transform.position - new Vector3(1.1f - sr.bounds.size.x / 2, -0.8f);
        barra_roja.transform.position = unidad0_1.transform.position - new Vector3(0f, -0.5f);
        lifeInicio = lifeActual;
        lifeActual = unidad0_1.GetComponent<Unidad>().Vida;

    }
}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LogicaPonerTorreta : MonoBehaviour {

    public GameObject torre;


    void OnMouseDown()
    {
        GameObject temp;
        Vector3 pos = this.transform.position;
        pos.y = pos.y + .4f;
        temp = Instantiate(torre);
        temp.transform.position = pos;
        temp.layer = 5;
        Destroy(this.gameObject);
    }

}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PoolingUnidades : MonoBehaviour
{

    public static ArrayList unidades = new ArrayList();

    // Use this for initialization
    void Start()
    {
        GameObject unidad = GameObject.Find("unidad_01");
        GameObject temp;
        Vector3 incremento = new Vector3(0, 1);
        Vector3 posicion_actual = unidad.transform.position;

        //se controla el numero de enemigos a salir
        /*for (int i = 0; i < 2; i++)
        {
            temp = (GameObject)Instantiate(unidad, posicion_actual + incremento, Quaternion.identity);
            posicion_actual = temp.transform.position;
            unidades.Add(temp);
        }   */
        for (int i = 0; i < 2; i++)
        {
            temp = (GameObject)Instantiate(unidad, posicion_actual + incremento, Quaternion.identity);
            posicion_actual = temp.transform.position;
            unidades.Add(temp);
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Torre : MonoBehaviour
{

    private GameObject enemigo;
    private bool esta_activa;
    public GameObject bala;
    public float Hurt;
    private float distancia_umbral;

    public GameObject Enemigo
    {
        get
        {
            return enemigo;
        }

        set
        {
            enemigo = value;
        }
    }

    public bool Esta_activa
    {
        get
        {
            return esta_activa;
        }

        set
        {
            esta_activa = value;
        }

    }
    
    // Use this for initialization
    void Start()
    {
        Hurt = 10f;
        distancia_umbral = 10;
    }

    // Update is called once per frame
    void Update()
    {
        Enemigo = BuscarEnemigoCercano();
        if (Enemigo != null)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.red);

        }
        float dist = (enemigo.transform.position - this.transform.position).magnitude;

        if (dist <= distancia_umbral)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.cyan);
            Disparar();
        }
    }
    void Disparar()
    {
        GameObject obj = (GameObject)Instantiate(GameObject.Find("bala"), this.transform.position, Quaternion.identity);
        Bala bala = obj.GetComponent<Bala>();
        bala.ActivarBala(this);
    }

    GameObject BuscarEnemigoCercano()
    {
        ArrayList enemigos = PoolingUnidades.unidades;
        foreach (GameObject item in enemigos)
        {

            if (Vector3.Distance(item.transform.position, this.transform.position) < distancia_umbral) ;
            {
                return item;
            }
        }
        return null;
    }

}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Unidad : MonoBehaviour
{

    public GameObject ruta;

    private int indice;
    private Vector3 posicion_inicial;
    private Vector3 posicion_siguiente;
    public float Vida;
    private float vel;
    private float distancia_punto;
    private bool esta_viva;

    // Use this for initialization
    void Start()
    {
        Vida = 100f;
        vel = 1f;
        distancia_punto = 0.5f;

        //posicion_inicial = this.transform.position;
        esta_viva = true;
        posicion_inicial = this.transform.position;
        posicion_siguiente = ruta.transform.GetChild(0).position;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 dir;

        if (esta_viva == true)
        {
            dir = posicion_siguiente - this.transform.position;
            dir.z = 0;
            this.transform.position += dir * vel * Time.deltaTime;

            if (dir.magnitude <= distancia_punto)
            {
                if (indice + 1 < ruta.transform.childCount)
                {
                    indice++;
                    posicion_siguiente = ruta.transform.GetChild(indice).position;
                    //Debug.Log(" xs" + posicion_siguiente.x + " ys" + posicion_siguiente.y);
                }
                else
                {
                    indice = 0;
                    this.transform.position = posicion_inicial;
                    posicion_siguiente = ruta.transform.GetChild(0).position;
                }
            }
        }
        if(Vida == 0)
        {
            esta_viva = false;
            Destroy(gameObject, 0.3f);

            GameOver.Show();
        }
    }


    private void OnTriggerEnter2D(Collider2D otro)
    {
        if (otro.gameObject.tag == "bala")
        {
            Destroy(otro.gameObject);
            this.Vida -= otro.gameObject.GetComponent<Bala>().Hurt;
        }
    }

    public bool Esta_viva
    {
        get
        {
            return esta_viva;
        }

        set
        {
            esta_viva = value;
        }
    }
}



Hugo Alejandro Hernández Cárdenas
POO#2

User avatar
xacarana
Site Admin
Posts: 1170
Joined: Fri Jan 15, 2016 6:13 pm

Re: League of Morgan - Hackveneno

Post by xacarana » Fri May 03, 2019 3:48 pm

Image

Falta la publicación del día de hoy
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
felipeh323
Posts: 9
Joined: Tue Jan 22, 2019 2:09 pm

Re: League of Morgan - Hackveneno

Post by felipeh323 » Fri May 03, 2019 10:36 pm

Martes(30/04/2019) y Viernes(3/05/2019)

1. ¿Qué hemos hecho?

se re diseño el código de acuerdo a los vídeos guía para dar solución a los errores del código pero aun no se a podido solucionar al igual de adaptar el GAME OVER del juego ya que este aun lo rechaza pensamos que nos presenta errores el Unity pero aun no se a comprobado

2. ¿Qué vamos a hacer?
nos guiares de otros vídeos de referencia para poder encontrar el error dado el caso que no, pediremos ayuda a nuestro docente.

3. ¿Qué dificultades hemos tenido?
aunque ya acabamos lo vídeos guía del juego este nos presenta errores que aún no hemos podido solucionar aunque se desarrolló el código desde cero, nuestra versión de unity puede estar presentando problemas y puede ser causa de algunos de nuestros errores al ejecutar el juego además el GAME OVER no funciona ya que el barco nunca muere por lo cual no se ha podido comprobar si este esta bueno.

Code: Select all

 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameOver : MonoBehaviour
{
    public GameObject GameOverText;
    public static GameObject GameOverStatic;

    void Start()
    {
        GameOver.GameOverStatic = GameOverText;
        GameOver.GameOverStatic.gameObject.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {

    }
    public static void Show()
    {
        GameOver.GameOverStatic.gameObject.SetActive(true);

    }
}
Evidencias:
Image
Image
Image
Felipe herrera Arteaga
POO #2

User avatar
xacarana
Site Admin
Posts: 1170
Joined: Fri Jan 15, 2016 6:13 pm

Re: League of Morgan - Hackveneno

Post by xacarana » Fri May 10, 2019 10:29 am

Image
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

Post Reply