Nicolas Toledo Rodriguez
Al fin logre subir un gif
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.
¿Qué rangos definen max_health, max_manam, min_health, min_manam?
Los rangos aseguran coherencia en el juego: nunca vida o maná infinitos.
¿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.
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.
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.
Nicolas Toledo Rodriguez
Al fin logre subir un gif
Andres Moreno
this.manaPoints = this.manaPoints >= MAX_MANA ? MAX_MANA : this.manaPoints + points;
Alexis Duque
Creo que te falto asignar primero el valor, para que siempre se valide después de que capture los puntos de mana.
this.manaPoints = manaPoints; this.manaPoints = this.manaPoints >= MAX_MANA ? MAX_MANA : this.manaPoints;
Pedro Muñoz Becerra
Yo prefiero hacerlo así:
public void CollectMana(int points) { int totalPoints = manaPoints + points; if (totalPoints >= MAX_HEALTH) { manaPoints = MAX_HEALTH; } else { manaPoints = totalPoints; } }
Así siempre me aseguro que el valor que se asigne no sea mayor al máximo permitido y no sumo 2 veces el valor para hacer la comparación y asignarlo.
Tomas Leonardo Amaya Ríos
CollectMana  { this.initial = initial; this.max = max; this.min = min; } }
Quedaría así al momento de usarlos en el PlayerController:
public Stat healthStat = new Stat(100, 200, 10); public Stat manaStat = new Stat(15, 30, 0);
Luego creé una función que sirva como base para aumentar los puntos a cualquier collectable, recibe los datos y regresa los nuevos puntos, si es que cambiaron
public int CollectPoints(int points,int current, Stat stat) { int newPoints = current + points; if (newPoints > stat.max) return current; return newPoints; } public void CollectHealth(int points) => healthPoints = CollectPoints(points, healthPoints, healthStat); public void CollectMana(int points) => manaPoints = CollectPoints(points, manaPoints, manaStat);