Tower Defense - Walls Games

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

Moderator: julianmartinez16

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

Re: Tower Defense - Walls Games

Post by xacarana » Fri Feb 21, 2020 2:32 pm

Image

Van bien con la responsabilidad 👌🔥, sin embargo, deben poner atención a la redacción y a la asignación de responsabilidades.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
daniela.atencia
Posts: 76
Joined: Tue Jan 22, 2019 6:20 am

Re: Tower Defense - Walls Games

Post by daniela.atencia » Fri Feb 21, 2020 11:06 pm

¿Qué hemos hecho?
  • Se eliminaron figuras innecesarias del fondo.
Image

¿Qué falta por hacer?
  • Pooling de enemigos (Santiago)
¿Qué dificultades hemos tenido?

Santiago tuvo un problema personal, por lo cual no pudo terminar su tarea de la semana (el pooling), ni subirlo. Esta tarea se completará lo más pronto posible.
Daniela Atencia

Programación y diseño orientado a objeto, 2020-1.

User avatar
daniela.atencia
Posts: 76
Joined: Tue Jan 22, 2019 6:20 am

Re: Tower Defense - Walls Games

Post by daniela.atencia » Thu Feb 27, 2020 9:17 am

¿Qué se ha hecho?

Se implementó la detección de enemigos.

Code: Select all

public class Torre : MonoBehaviour
{
    public GameObject enemigo;
    private float distancia_umbral = 2;

   
    // Update is called once per frame
    void Update()
    {
        float dist = (enemigo.transform.position - this.transform.position).magnitude;

        if (dist < distancia_umbral)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position,Color.blue);
        }
    }
}
¿Qué se va a hacer?
  • Se empezará a hacer el disparo de los enemigos. (Santiago)
  • Se empezará a crear la funcionalidad del hud para la próxima semana. (Daniela)
¿Qué dificultades hemos tenido?

Al llegar a casa anoche no tenía internet ni datos para escribirle a mi compañero y decirle que no podía subir los avances el día de ayer, por eso se sube hoy.
Daniela Atencia

Programación y diseño orientado a objeto, 2020-1.

User avatar
daniela.atencia
Posts: 76
Joined: Tue Jan 22, 2019 6:20 am

Re: Tower Defense - Walls Games

Post by daniela.atencia » Wed Mar 04, 2020 9:18 am

¡Publicación del viernes!

La publicación del viernes estaba asignada a Santiago, quien no la subió.

¿Qué hemos hecho?
  • Se empezó a codificar la detección de enemigos para hacer los disparos.

Code: Select all

private bool esta_activa;
 void Update()
    {
        float dist = (enemigo.transform.position - this.transform.position).magnitude;

        if (dist < distancia_umbral)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position,Color.blue);
        }

        enemigo = BuscarEnemigoCercano();
        if (enemigo!=null)
        {
            Debug.DrawLine(this.transform.position, enemigo.transform.position, Color.blue); 
        }

    }

    GameObject BuscarEnemigoCercano
    {
        ArrayList enemigos = Unidad.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;
    }
}
¿Qué falta por hacer?
  • Buscar el error que da el código al ejecutarlo y corregirlo.(Daniela)
Image
  • Hacer el HUD funcional(Daniela)
¿Qué dificultades hemos tenido?
Santiago no está subiendo avances al proyecto.
Daniela Atencia

Programación y diseño orientado a objeto, 2020-1.

User avatar
daniela.atencia
Posts: 76
Joined: Tue Jan 22, 2019 6:20 am

Re: Tower Defense - Walls Games

Post by daniela.atencia » Wed Mar 04, 2020 9:48 pm

¿Qué hemos hecho?
  • Se actualizó el código de "Torre" y "Unidad".
Código de Torre:

Code: Select all

public class Torre : MonoBehaviour
{
    private bool esta_activa;
    public GameObject enemigo;
    private float distancia_umbral = 2;



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

    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;
        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; 
    }

    public bool Esta_activa { get => esta_activa; set => esta_activa = value; }

}
Código de Unidad:

Code: Select all

public class Unidad : MonoBehaviour
{

    public GameObject ruta;
    private int indice;
    private Vector3 posicion_incial;
    private Vector3 posicion_siguiente;
    private float vel = 1f;
    private float distancia_punto = 0.5f;
    private bool esta_viva;


    void Start()
    {
        posicion_incial = this.transform.position;
        posicion_siguiente = ruta.transform.GetChild(0).position;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 dir = posicion_siguiente - this.transform.position;
        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;
            }
            else
            {
                indice = 0;
                this.transform.position = posicion_incial;
                posicion_siguiente = ruta.transform.GetChild(0).position;
            }
        }
       
    }

    private void OnTriggerEnter2D(Collider2D otro)
    {
        if (otro.gameObject.tag == "bala")
        {
            Destroy(otro.gameObject);
        }
    }

    public bool Esta_viva { get => esta_viva; set => esta_viva = value; }

}
  • Se implementó código para el pooling de unidades.

Code: Select all

public class PoolingUnidades : MonoBehaviour
{
    public static ArrayList unidades = new ArrayList();


    // Start is called before the first frame update
    void Start()
    {
        GameObject unidad = GameObject.Find("Unidad01");
        GameObject temp;
        Vector3 incremento = new Vector3(0, 1);
        Vector3 posicion_actual = unidad.transform.position;

        for (int i = 0; i < 10; i++)
        {
            temp = (GameObject) Instantiate(unidad, posicion_actual + incremento, Quaternion.identity);
            posicion_actual = temp.transform.position;
            unidades.Add(temp);
        }
    }


}
  • Se implementó el código para la bala.

Code: Select all

public class Bala : MonoBehaviour
{
    private GameObject objetivo;
    private float velocidad = 2;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // 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;
    }

}

¿Qué falta por hacer?
  • La torre no dispara. Se detecta al enemigo pero esta no dispara, falta corregir esto.
  • Funcionalidad del HUD y de la barra de vida.
¿Qué dificultades hemos tenido?

No salen balas de la torre, estas quedan en la escena, se intentó cambiar código pero no funcionó.

Daniela Atencia

Programación y diseño orientado a objeto, 2020-1.

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

Re: Tower Defense - Walls Games

Post by xacarana » Fri Mar 06, 2020 2:51 pm

Image

Bien, sin embargo han estado carias clases con el mismo problema de código y no lo han preguntado en los horarios de asesoría. Busquen apoyo para que no los afecte en el cronograma.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
kr29
Posts: 5
Joined: Fri Jan 24, 2020 2:21 pm

Re: Tower Defense - Walls Games

Post by kr29 » Sat Mar 07, 2020 12:19 am

Que hemos hecho?
-se trabajo en la barra de vida
codigo:

Code: Select all

public class logicabarra : MonoBehaviour
{
    public Gameobject unidad01;
    public Gameobject barra_verde;
    public Gameobject barra_roja;
    float escala = .001f;
    SpriteRenderer sr;

}
    
    // Start is called before the first frame update
    void Start()
    {
     SpriteRender sr = barra_verde.Getcomponent<SpriteRender>();
    }

// Update is called once per frame
void Update()
{
    if (sr.transform.localScale.x > 0)
    {
        sr.transform.localScale -= new vector3(escala, 0);
        barra_verde.transform.position = unidad01.transform.position - new vector3(.3f - sr.bounds.size.x/2, -.4f);
        barra_roja.transform.position = unidad01.transform.position - new vector3(.05f, -.4f);
    }
}
-codigo del HUD

Code: Select all

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

public class HUD : MonoBehaviour
{
    [SerializeField]
    private Text monedas;
    public static int contador_monedas;

        public static void ActualizarMoneda(int valor)
    {
        contador_monedas += valor;
    }

    // Update is called once per frame
    void Update()
    {
        monedas.text = contador_monedas.ToString();  
    }
}
Que falta por hacer?
-arreglo de la torre que no dispara
-dirección movimiento de enemigos
Image

Que dificultades hemos tenido?
- la barra verde de la vida no baja,la vida no persigue al enemigo y el código presenta el mismo error.

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

Re: Tower Defense - Walls Games

Post by xacarana » Wed Mar 11, 2020 2:25 pm

Image

Siguen con el mismo error y no lo han resuelto, tampoco lo han traído a la clase o han pedido ayuda. El seguimiento no se trata simplemente de publicar un error y no buscar la solución. Además no publicaron el día que era, arreglen la última publicación y si necesitan ayuda podemos reservar un espacio o en las monitorias también los pueden ayudar.

No olviden la publicación de hoy.
Andrés Bedoya Tobón
Profesor
"I only smile in the dark, I only smile when it's complicated" Raybiez

User avatar
daniela.atencia
Posts: 76
Joined: Tue Jan 22, 2019 6:20 am

Re: Tower Defense - Walls Games

Post by daniela.atencia » Wed Mar 11, 2020 4:22 pm

¿Qué se ha hecho?
  • Se actualizó el código de Bala.

Code: Select all

public class Bala : MonoBehaviour
{
    private GameObject objetivo; // El objeto al que la bala se dirigira, asignado por la torre.
    private float velocidad = 5; // La rapidez de la bala.

    void OnTriggerEnter(Collider collider)
    {
        if (collider.gameObject.CompareTag("Enemigo"))
        {
            Destroy(this.gameObject);
        }
    }

    void Update()
    {
        Vector3 direccion; // Le indica la direccion de su objetivo.
        if (objetivo != null) // Mantiene la bala activa mientras su objetivo lo este.
        {
            direccion = objetivo.transform.position - this.transform.position; // Mueve la bala hacia su objetivo.
            this.transform.position += velocidad * direccion * Time.deltaTime; // Maneja la velocidad de la bala.
        }
        else { Destroy(this.gameObject); }

    }
    public void ActivarBala(Torre torre)
    {
        objetivo = torre.Enemigo; // Usado por la torre para asignar un objetivo a la bala.
    }

}
¿Qué falta por hacer?
  • La dirección de movimiento de enemigos
  • Pedir asesoría para corregir errores presentes.
¿Qué dificultades hemos tenido?
  • Problemas en la corrección de algunos errores y en la asignación de tareas.
Daniela Atencia

Programación y diseño orientado a objeto, 2020-1.

User avatar
daniela.atencia
Posts: 76
Joined: Tue Jan 22, 2019 6:20 am

Re: Tower Defense - Walls Games

Post by daniela.atencia » Fri Mar 13, 2020 11:25 pm

¿Qué hemos hecho?
  • Se implementó el código de las oleadas.(Daniela)

Code: Select all

public class oleadas : MonoBehaviour
{

    [SerializeField]
    private int waves;
    [SerializeField]
    private int[] enemiesPerWave;
    [SerializeField]
    private Transform enemyPrefab;
    [SerializeField]
    private Transform spawnPoint;
    [SerializeField]
    private float timeBetweenWaves;
    [SerializeField]
    private float timeBetweenEnemies;
    [SerializeField]
    private float countdown;
    [SerializeField]
    private int waveNumber = 0;
    [SerializeField]
    public bool wavesCompleted;
    [SerializeField]
    private int enemySpawnCount;

    void spawnEnemy()
    {
        //enemiesPerWave = new int[];
        Instantiate(enemyPrefab, spawnPoint.position, spawnPoint.rotation);
    }

    IEnumerator spawnWave()
    {
        enemySpawnCount = enemiesPerWave[waveNumber];

        for(int i = enemySpawnCount; i > 0; i--)
        {
            spawnEnemy();
            yield return new WaitForSeconds(timeBetweenEnemies);
        }
    }
   

    // Update is called once per frame
    void Update()
    {
        if (countdown <= 0f && waveNumber != waves)
        {
            StartCoroutine(spawnWave());
            countdown = timeBetweenWaves;
            waveNumber++;
        }
        else if(waveNumber == waves) { wavesCompleted = true; }
        countdown -= Time.deltaTime;
        countdown = Mathf.Clamp(countdown, 0f, Mathf.Infinity);
       
    }
}
  • Se empezó a implementar funcionalidad al HUD. (Daniela)
  • Se implementó código de monedas. (Daniela)

Code: Select all

public class Moneda : MonoBehaviour
{
    //[SerializeField]
    public int moneda;
    private int monedaDisplay;
    [SerializeField]
    private Text uiMoneda;
    AudioSource audio;
    [SerializeField]
    private AudioClip masDinero;
    [SerializeField]
    private AudioClip menosDinero;
    public bool estaCambiando;

    void Start()
    {
        audio = GetComponent<AudioSource>();
    }
    
    void Update()
    {
        if (monedaDisplay != moneda)
        {
            estaCambiando = true;
            if (monedaDisplay > moneda)
            {
                monedaDisplay -= 1;
            }
            if (monedaDisplay < moneda)
            {
                monedaDisplay += 1;
            }
        }
        else {estaCambiando= false;}
        uiMoneda.text = monedaDisplay.ToString();

    }

    public void AgregarDinero(int dinero)
    {
        moneda += dinero;
        audio.clip = masDinero;
        audio.Play();
    }

    public void QuitarDinero(int dinero)
    {
        moneda -= dinero;
        audio.clip = menosDinero;
        audio.Play();
    }
}
  • Se implementó código de corazones (vida). (Daniela)

Code: Select all

public class Corazon : MonoBehaviour
{
    [SerializeField]
    private Image corazon;
    [SerializeField]
    private int numeroCorazon;
    [SerializeField]
    private Sprite corazon_roto;
    private byte alpha;
    [SerializeField]
    private GameObject concluir;

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

    // Update is called once per frame
    void Update()
    {
        GameObject vida = GameObject.FindWithTag("Vida");

        if (vida.GetComponent<Vida>().vida < numeroCorazon && alpha != 0)
        {
            corazon.sprite = corazon_roto;
            alpha -= 1;
            corazon.color = new Color32(255, 0, 0, alpha);
        }
        if (concluir.GetComponent<Conclusion>().victoria == true)
        {
            corazon.color = new Color32(255, 255, 0, 255);
        }
    }
}
¿Qué falta por hacer?
  • Crear diagrama de clases de los códigos que se llevan.
  • Buscar asesoría para corregir los errores que tiene el cógido.
  • Dirección de enemigos.
¿Qué dificultades hemos tenido?
  • En la responsabilidad y asignación de tareas.
Daniela Atencia

Programación y diseño orientado a objeto, 2020-1.

Post Reply