Programación de Pociones de Vida y Maná en Videojuegos

Clase 40 de 53Curso de C# para Videojuegos

Resumen

Sumar pociones sin romper el balance es clave. Aquí verás cómo definir variables y constantes, inicializar valores en start_game, y crear métodos como collect_health y collect_maná con límites seguros, además de exponer datos con getters para la interfaz. Todo se centra en mantener la vida y el maná del jugador dentro de rangos coherentes.

¿Cómo estructurar variables y constantes para vida y maná?

Para controlar puntos de vida y de maná, se separan dos tipos de datos: estado actual y límites. El estado se guarda en variables privadas, mientras que los límites y valores iniciales van en constantes públicas. Además, se recuerda una convención útil: las constantes suelen escribirse en mayúsculas para distinguirlas de variables que cambian.

  • Variables de estado: private int health_points y mana_points.
  • Constantes: public const int para valores iniciales y rangos.
  • Objetivo: mantener valores dentro de mínimos y máximos definidos.

¿Qué rangos definen max_health, max_manam, min_health, min_manam?

Los rangos aseguran coherencia en el juego: nunca vida o maná infinitos.

  • initial_health: 100 puntos.
  • initial_manam: 15 puntos.
  • max_health: 200 puntos.
  • max_manam: 30 puntos.
  • min_health: 10 puntos.
  • min_manam: 0 puntos.

¿Cómo inicializar en start_game los puntos?

El momento ideal para asignar los valores iniciales es el inicio de la partida: start_game.

// Variables de estado
private int health_points;
private int mana_points;

// Constantes de configuración
public const int initial_health = 100;
public const int initial_manam = 15;
public const int max_health = 200;
public const int max_manam = 30;
public const int min_health = 10;
public const int min_manam = 0;

void start_game()
{
    health_points = initial_health;
    mana_points = initial_manam;
}

¿Cómo implementar collect_health y collect_maná con límites?

Al recoger pociones, el jugador incrementa sus puntos. Para evitar desbordes, se trunca el valor si supera el máximo permitido. Así se impide que la vida o el maná se vuelvan infinitos.

  • Sumar puntos recibidos por parámetro.
  • Verificar si se supera el máximo.
  • Truncar al valor máximo si ocurre.
public void collect_health(int points)
{
    this.health_points += points; // Suma los puntos recibidos.

    if (this.health_points > max_health)
    {
        this.health_points = max_health; // Trunca al máximo permitido.
    }
}

// Análogo para el maná: collect_maná(int points)
// Misma lógica: sumar y truncar con max_manam.

¿Cómo truncar al superar max_health o max_manam?

La comprobación es directa: si el valor actual supera el máximo, se asigna el máximo. Con esto, el player controller puede tomar seis pociones sin romper los límites.

¿Qué ejercicio se propone para collect_maná?

Replicar exactamente el algoritmo de vida cambiando “vida” por “maná”. Así se refuerza el patrón y se mantiene la coherencia de límites.

¿Cómo exponer datos con getters para la interfaz?

Para “pintar” barras de vida y maná en la interfaz gráfica de usuario, se crean métodos públicos que devuelven enteros. Esto desacopla el estado interno de su representación visual y facilita la actualización de la GUI.

  • Encapsular acceso con métodos públicos.
  • Devolver valores listos para la GUI.
  • Mantener privada la mutación del estado.
public int get_health()
{
    return health_points;
}

public int get_manam()
{
    return mana_points;
}

¿Te gustaría compartir cómo gestionarías el descenso de vida bajo el mínimo o cómo mostrarías las barras en la interfaz? Comenta tus ideas y enfoques.

      Programación de Pociones de Vida y Maná en Videojuegos