From 715efed9d6970d1095923f896adbab0b6930f044 Mon Sep 17 00:00:00 2001
From: z22024794 <fadl.zemzem@etu.univ-amu.fr>
Date: Wed, 9 Oct 2024 11:51:32 +0200
Subject: [PATCH] fadltp5

---
 .../java/fr/univamu/progav/td5/Character.java | 14 +++++++++-
 .../java/fr/univamu/progav/td5/Warrior.java   | 28 +++++++++++++++++--
 2 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/src/main/java/fr/univamu/progav/td5/Character.java b/src/main/java/fr/univamu/progav/td5/Character.java
index 4a7c081..e35e40c 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 1090f39..125639e 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
   }
 }
-- 
GitLab