diff --git a/src/main/java/fr/univamu/progav/td5/Character.java b/src/main/java/fr/univamu/progav/td5/Character.java index 4a7c081c37d334e73e269d25878f2b391ad50469..e35e40c7b813194bbdfdef3865a83c4a3a2d0778 100644 --- a/src/main/java/fr/univamu/progav/td5/Character.java +++ b/src/main/java/fr/univamu/progav/td5/Character.java @@ -1,23 +1,35 @@ package fr.univamu.progav.td5; public abstract class Character { + protected int healthPoints; + public Character(int initialHealth) { + this.healthPoints = initialHealth; + } // TODO add health points public boolean isAlive() { // TODO + if (healthPoints > 0) { + return true ; // Le personnage est vivant si les points de vie sont supérieurs à 0 + } return false; } protected int getHealth() { // TODO - return 0; + return healthPoints; // Retourne les points de vie } protected void reduceHealth(int amount) { // TODO + healthPoints -= amount; // Réduit les points de vie + if (healthPoints < 0) { + healthPoints = 0; // S'assure que les points de vie ne sont pas négatifs + } } protected void setHealth(int health) { // TODO + healthPoints = health; // Définit les points de vie } public abstract Blow attack(); diff --git a/src/main/java/fr/univamu/progav/td5/Warrior.java b/src/main/java/fr/univamu/progav/td5/Warrior.java index 1090f39118e089e6e48a70bf7db991f8484aa19e..125639e6f333502e6d281fa4875e75f4a491b3df 100644 --- a/src/main/java/fr/univamu/progav/td5/Warrior.java +++ b/src/main/java/fr/univamu/progav/td5/Warrior.java @@ -7,29 +7,53 @@ public class Warrior extends Character { public static final int RAGE_DAMAGE_THRESHOLD = 5; // TODO add rage + private int rageCounter; // Compteur pour la rage + private boolean isRaging; // Indicateur pour savoir si le guerrier est en rage public Warrior() { // TODO + super(BASE_HEALTH); // Appelle le constructeur de la super-classe avec les points de vie de base + this.rageCounter = 0; // Initialise le compteur de rage + this.isRaging = false; // Initialise l'état de rage } @Override public Blow attack() { // TODO - return null; + if (isRaging && rageCounter > 0) { + rageCounter--; // Diminue le compteur de rage + return new Blow(RAGE_DAMAGE, 0); // Retourne un Blow avec des dommages de rage + } + return new Blow(BASE_DAMAGE, 0); // Retourne un Blow avec des dommages de base } @Override public void defend(Blow blow) { // TODO + // Réduit les dommages physiques de moitié car le guerrier est costaud + int reducedPhysicalDamage = blow.physicalDamage() / 2; + + // Applique les dommages + int totalDamage = reducedPhysicalDamage + blow.magicalDamage(); + reduceHealth(totalDamage); // Réduit les points de vie en fonction des dommages + + // Gestion de la prolongation de la rage + if (isRaging && blow.physicalDamage() >= RAGE_DAMAGE_THRESHOLD) { + rageCounter++; // Prolonge la rage d'une attaque supplémentaire + } } @Override public void specialAction() { // TODO + if (!isRaging) { + isRaging = true; // Met le guerrier en rage + rageCounter = 3; // Donne au guerrier 3 attaques en rage + } } public int getRage() { // TODO - return 0; + return isRaging; // Retourne l'état de la rage } }