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
   }
 }