Módulo 2

TUS en Diseño de Videojuegos

Ayose Lomba Pérez (LinkedIn)

Módulo 2: Programación Orientada a Objetos

Programación I (24/25)

Ayose Lomba Pérez

Universidad del Atlántico Medio

Enlace principal  

📌 Programacion I

Tema 1: Introducción a la Programación Orientada a Objetos (POO)

🌟 ¿Qué es la Programación Orientada a Objetos?

La Programación Orientada a Objetos (POO) es un paradigma que se basa en modelar el mundo real a través de objetos. Piensa en cualquier cosa a tu alrededor: un coche, un personaje en un videojuego o un enemigo en Unity. Cada uno tiene:

  • Propiedades (atributos): Color, tamaño, vida, daño.

  • Comportamientos (métodos): Acelerar, atacar, saltar.

🎯 Principios fundamentales de la POO

  1. Encapsulación: Protege los datos dentro de una clase, evitando modificaciones accidentales.

  2. Herencia: Permite que una clase “herede” atributos y métodos de otra.

  3. Polimorfismo: Un mismo método puede comportarse de manera distinta según la clase.

  4. Abstracción: Oculta detalles innecesarios y expone solo lo esencial.

🚀 ¿Por qué usar POO en videojuegos?

Los videojuegos están llenos de objetos interactuando entre sí: jugadores, enemigos, ítems, proyectiles… Sin POO, manejar todo esto sería un caos. Con POO, organizamos nuestro código en clases reutilizables y fáciles de mantener.

🛠️ Ejemplo práctico en Unity: Creando un personaje



public class Personaje

{

    public string nombre;

    public int vida;

  

    public void MostrarVida()

    {

        Debug.Log("Vida de " + nombre + ": " + vida);

    }

}

  

public class Juego : MonoBehaviour

{

    void Start()

    {

        Personaje jugador = new Personaje();

        jugador.nombre = "Link";

        jugador.vida = 100;

        jugador.MostrarVida();

    }

}

🏆 Reto 1: Agrega un ataque al personaje

Modifica la clase Personaje para incluir un método llamado Atacar() que imprima en consola el mensaje "¡Link ha atacado!".

🔍 Solución



public class Personaje

{

    public string nombre;

    public int vida;

  

    public void MostrarVida()

    {

        Debug.Log("Vida de " + nombre + ": " + vida);

    }

  

    public void Atacar()

    {

        Debug.Log(nombre + " ha atacado!");

    }

}

  

public class Juego : MonoBehaviour

{

    void Start()

    {

        Personaje jugador = new Personaje();

        jugador.nombre = "Link";

        jugador.vida = 100;

        jugador.Atacar();

    }

}

🏆 Reto 2: Implementa una barra de vida en Unity

Crea una función MostrarBarraDeVida() en la clase Personaje, que imprima "Vida: [■■■■■■■■■■]" en función de su salud.

🔍 Solución



public class Personaje

{

    public string nombre;

    public int vida;

  

    public void MostrarBarraDeVida()

    {

        int bloques = vida / 10;

        string barra = new string('■', bloques);

        Debug.Log("Vida: [" + barra.PadRight(10, ' ') + "]");

    }

}

  

public class Juego : MonoBehaviour

{

    void Start()

    {

        Personaje jugador = new Personaje();

        jugador.nombre = "Link";

        jugador.vida = 70;

        jugador.MostrarBarraDeVida();

    }

}

Tema 2: Clases, Objetos y Métodos en C#

🔹 ¿Qué es una clase y qué es un objeto?

Una clase es un molde que define la estructura y el comportamiento de los objetos.

Ejemplo:


public class Enemigo

{

    public string tipo;

    public int salud;

}

¿Qué es un objeto?

Un objeto es una instancia de una clase:


Enemigo goblin = new Enemigo();

goblin.tipo = "Goblin";

goblin.salud = 50;

🔹 Métodos en una Clase

Los métodos son acciones que un objeto puede realizar.


public class Enemigo

{
    public string tipo;
    public int salud;

    public void Atacar()

    {
        Debug.Log(tipo + " ha atacado!");
    }
}

🏆 Reto 1: Añadir un método RecibirDaño

Añade un método RecibirDaño(int daño) a la clase Enemigo que reduzca la salud del enemigo e imprima su nueva vida.

🏆 Reto 2: Crear una clase ‘Arma’ en Unity

Crea una nueva clase llamada Arma, con dos atributos: nombre y daño. Además, crea un método Disparar().

🔍 Solución


public class Arma

{

    public string nombre;
    public int daño;  

    public void Disparar()
    {
        Debug.Log("Disparando con " + nombre + ", daño: " + daño);
    }
}

Tema 3: Herencia, Polimorfismo y Encapsulación

🏛 Herencia en C#

Permite que una clase derive de otra.


public class Animal

{

    public void HacerSonido()
    {
        Debug.Log("Sonido genérico...");
    }
}

🌀 Polimorfismo en C


public class Gato : Animal
{
    public override void HacerSonido()
    {
        Debug.Log("Miau Miau");
    }
}

🔒 Encapsulación en C


public class CuentaBancaria

{
    private double saldo;
    public void Depositar(double cantidad)
    {
        saldo += cantidad;
        Debug.Log("Nuevo saldo: " + saldo);
    }
}

🏆 Reto 1: Crear una clase Vehículo con herencia

🏆 Reto 2: Implementa una clase ‘EnemigoVolador’ que herede de ‘Enemigo’

Crea una subclase EnemigoVolador que herede de Enemigo.

🔍 Solución


public class EnemigoVolador : Enemigo
{
    public void Volar()
    {
        Debug.Log("El enemigo " + tipo + " está volando a gran altura.");
    }

}

Ponte a prueba

Cuestionario