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