Commit a23e01b7 authored by Guillaume Dewisme's avatar Guillaume Dewisme

refactor/separation class

parent aa7b1c38
......@@ -28,3 +28,124 @@
[2024-12-03T09:19:23.567938600] h a quitté le jeu
[2024-12-03T09:26:44.170530700] Début de l'aventure de h
[2024-12-03T09:26:44.191598800] h rencontre un Catcheur
[2024-12-04T08:06:11.886795400] Début de l'aventure de enza
[2024-12-04T08:06:11.906987500] enza rencontre un Brigand
[2024-12-04T08:06:14.972843200] enza attaque Brigand
[2024-12-04T08:06:14.984444100] Brigand attaque enza
[2024-12-04T08:06:15.452842500] enza attaque Brigand
[2024-12-04T08:06:15.453852600] Brigand attaque enza
[2024-12-04T08:06:15.734624500] enza attaque Brigand
[2024-12-04T08:06:15.747554800] Brigand attaque enza
[2024-12-04T08:06:15.937984300] enza attaque Brigand
[2024-12-04T08:06:15.939057100] Brigand attaque enza
[2024-12-04T08:06:16.099067300] enza attaque Brigand
[2024-12-04T08:06:16.100073] Brigand attaque enza
[2024-12-04T08:06:16.518136500] enza attaque Brigand
[2024-12-04T08:06:16.519666] enza a vaincu Brigand
[2024-12-04T08:06:16.525711800] enza gagne 50 XP
[2024-12-04T08:06:19.083672200] enza rencontre un Catcheur
[2024-12-04T08:06:20.502166900] enza attaque Catcheur
[2024-12-04T08:06:20.503174800] Catcheur attaque enza
[2024-12-04T08:06:20.663921100] enza attaque Catcheur
[2024-12-04T08:06:20.664929400] Catcheur attaque enza
[2024-12-04T08:06:20.825076100] enza attaque Catcheur
[2024-12-04T08:06:20.826083900] Catcheur attaque enza
[2024-12-04T08:06:21.018907100] enza attaque Catcheur
[2024-12-04T08:06:21.019912400] Catcheur attaque enza
[2024-12-04T08:06:21.164705400] enza attaque Catcheur
[2024-12-04T08:06:21.165715100] Catcheur attaque enza
[2024-12-04T08:06:21.695040300] enza attaque Catcheur
[2024-12-04T08:06:21.696047500] Catcheur attaque enza
[2024-12-04T08:06:22.114982700] enza attaque Catcheur
[2024-12-04T08:06:22.115993] Catcheur attaque enza
[2024-12-04T08:06:22.605196200] enza attaque Catcheur
[2024-12-04T08:06:22.608218500] Catcheur attaque enza
[2024-12-04T08:06:23.389572800] enza attaque Catcheur
[2024-12-04T08:06:23.391592] Catcheur attaque enza
[2024-12-04T08:06:23.988257] enza attaque Catcheur
[2024-12-04T08:06:23.990270900] Catcheur attaque enza
[2024-12-04T08:06:24.536198400] enza attaque Catcheur
[2024-12-04T08:06:24.540229100] Catcheur attaque enza
[2024-12-04T08:06:25.291977700] enza attaque Catcheur
[2024-12-04T08:06:25.292983300] Catcheur attaque enza
[2024-12-04T08:06:25.840277200] enza attaque Catcheur
[2024-12-04T08:06:25.841286100] enza a vaincu Catcheur
[2024-12-04T08:06:25.841286100] enza gagne 50 XP
[2024-12-04T08:06:25.842293600] enza monte au niveau 2
[2024-12-04T08:06:25.845316200] enza a obtenu un objet : Potion de Puissance
[2024-12-04T08:06:28.115597200] enza rencontre un Catcheur
[2024-12-04T08:06:28.712540700] enza attaque Catcheur
[2024-12-04T08:06:28.714556900] Catcheur attaque enza
[2024-12-04T08:06:29.212602500] enza attaque Catcheur
[2024-12-04T08:06:29.213668300] Catcheur attaque enza
[2024-12-04T08:06:29.663737100] enza attaque Catcheur
[2024-12-04T08:06:29.664744700] Catcheur attaque enza
[2024-12-04T08:06:30.162629100] enza attaque Catcheur
[2024-12-04T08:06:30.163633700] Catcheur attaque enza
[2024-12-04T08:06:30.614482100] enza attaque Catcheur
[2024-12-04T08:06:30.615493300] Catcheur attaque enza
[2024-12-04T08:06:31.098397400] enza attaque Catcheur
[2024-12-04T08:06:31.099403200] Catcheur attaque enza
[2024-12-04T08:06:31.586841300] enza attaque Catcheur
[2024-12-04T08:06:31.587849200] Catcheur attaque enza
[2024-12-04T08:06:32.049652] enza attaque Catcheur
[2024-12-04T08:06:32.051666900] Catcheur attaque enza
[2024-12-04T08:06:32.518839300] enza attaque Catcheur
[2024-12-04T08:06:32.518839300] enza a vaincu Catcheur
[2024-12-04T08:06:32.519848500] enza gagne 50 XP
[2024-12-04T08:06:34.711476300] enza rencontre un Brigand
[2024-12-04T08:06:35.919905300] enza attaque Brigand
[2024-12-04T08:06:35.921443200] Brigand attaque enza
[2024-12-04T08:06:36.279740900] Brigand attaque enza
[2024-12-04T08:06:36.485140800] enza attaque Brigand
[2024-12-04T08:06:36.486193700] Brigand attaque enza
[2024-12-04T08:06:37.195137600] enza attaque Brigand
[2024-12-04T08:06:37.196142400] Brigand attaque enza
[2024-12-04T08:06:37.597595100] enza attaque Brigand
[2024-12-04T08:06:37.598601900] enza a vaincu Brigand
[2024-12-04T08:06:37.598601900] enza gagne 50 XP
[2024-12-04T08:06:37.599609900] enza a obtenu un objet : Potion de Puissance
[2024-12-04T08:06:37.873410700] enza a quitté le jeu
[2024-12-04T08:12:43.025968600] TestHero attaque TestEnemy
[2024-12-04T08:12:43.050025700] TestHero utilise sa capacité spéciale
[2024-12-04T08:17:08.984955300] TestHero attaque TestEnemy
[2024-12-04T08:17:09.011202800] TestHero utilise sa capacité spéciale
[2024-12-04T08:17:14.275467] Début de l'aventure de enza
[2024-12-04T08:17:14.276466800] enza rencontre un Gangster
[2024-12-04T08:17:16.786200900] enza attaque Gangster
[2024-12-04T08:17:16.788200800] Gangster attaque enza
[2024-12-04T08:17:17.042149800] enza attaque Gangster
[2024-12-04T08:17:17.042149800] Gangster attaque enza
[2024-12-04T08:17:17.219064800] enza attaque Gangster
[2024-12-04T08:17:17.219064800] Gangster attaque enza
[2024-12-04T08:17:17.425350200] enza attaque Gangster
[2024-12-04T08:17:17.426350] Gangster attaque enza
[2024-12-04T08:17:17.619110300] enza attaque Gangster
[2024-12-04T08:17:17.620109900] enza a vaincu Gangster
[2024-12-04T08:17:17.623626300] enza gagne 50 XP
[2024-12-04T08:17:17.625622200] enza a obtenu un objet : Potion de Puissance
[2024-12-04T08:17:19.218841200] enza rencontre un Gangster
[2024-12-04T08:17:20.081855300] enza attaque Gangster
[2024-12-04T08:17:20.082854] Gangster attaque enza
[2024-12-04T08:17:20.257506500] enza attaque Gangster
[2024-12-04T08:17:20.258506500] Gangster attaque enza
[2024-12-04T08:17:20.419169700] enza attaque Gangster
[2024-12-04T08:17:20.420201400] Gangster attaque enza
[2024-12-04T08:17:20.610147400] enza attaque Gangster
[2024-12-04T08:17:20.611145100] Gangster attaque enza
[2024-12-04T08:17:20.786237700] enza attaque Gangster
[2024-12-04T08:17:20.786237700] enza a vaincu Gangster
[2024-12-04T08:17:20.786237700] enza gagne 50 XP
[2024-12-04T08:17:20.786237700] enza monte au niveau 2
[2024-12-04T08:17:20.786237700] enza a obtenu un objet : Potion de Santé
[2024-12-04T08:17:23.698100600] enza rencontre un Brigand
[2024-12-04T08:17:24.866409800] enza attaque Brigand
[2024-12-04T08:17:24.867395400] Brigand attaque enza
[2024-12-04T08:17:25.024673100] enza attaque Brigand
[2024-12-04T08:17:25.025674900] Brigand attaque enza
[2024-12-04T08:17:25.200961800] enza attaque Brigand
[2024-12-04T08:17:25.201963800] Brigand attaque enza
[2024-12-04T08:17:25.376582500] enza attaque Brigand
[2024-12-04T08:17:25.377582500] enza a vaincu Brigand
[2024-12-04T08:17:25.377582500] enza gagne 50 XP
[2024-12-04T08:17:25.585241200] enza a quitté le jeu
package org.example;
import java.util.Random;
import java.util.Scanner;
import org.example.BeatThemAllGame.PreemptiveStrike;
public class Battle {
public static void battle(Scanner scanner, Hero hero, Enemy enemy) {
if (hero.specialAbility instanceof PreemptiveStrike && !hero.specialUsed) {
hero.useSpecialAbility(enemy);
hero.specialUsed = true;
if (!enemy.isAlive()) {
System.out.println("Vous avez vaincu " + enemy.name + " avant même qu'il puisse agir !");
Logger.getInstance().log(hero.name + " a vaincu " + enemy.name + " avec une attaque préventive");
return;
}
}
while (hero.isAlive() && enemy.isAlive()) {
System.out.println("\n=== Votre tour ===");
System.out.println("1. Attaquer");
System.out.println("2. Utiliser la capacité spéciale");
System.out.println("3. Utiliser un objet");
System.out.print("Votre choix : ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
hero.attack(enemy);
break;
case 2:
hero.useSpecialAbility(enemy);
break;
case 3:
hero.useItem();
break;
default:
System.out.println("Choix invalide, vous perdez votre tour !");
break;
}
if (enemy.isAlive()) {
System.out.println("\n=== Tour de l'ennemi ===");
if (enemy.specialAbility != null && new Random().nextInt(100) < 30) {
enemy.useSpecialAbility(hero);
Logger.getInstance().log(enemy.name + " utilise sa capacité spéciale");
} else {
enemy.attack(hero);
}
} else {
System.out.println("Vous avez vaincu " + enemy.name + " !");
Logger.getInstance().log(hero.name + " a vaincu " + enemy.name);
}
}
}
}
\ No newline at end of file
package org.example;
import java.util.*;
import java.util.Random;
import java.util.Scanner;
public class BeatThemAllGame {
......@@ -139,120 +140,5 @@ public class BeatThemAllGame {
}
}
// pour gérer le combat
public static void battle(Scanner scanner, Hero hero, Enemy enemy) {
if (hero.specialAbility instanceof PreemptiveStrike && !hero.specialUsed) {
hero.useSpecialAbility(enemy);
hero.specialUsed = true;
if (!enemy.isAlive()) {
System.out.println("Vous avez vaincu " + enemy.name + " avant même qu'il puisse agir !");
Logger.getInstance().log(hero.name + " a vaincu " + enemy.name + " avec une attaque préventive");
return;
}
}
while (hero.isAlive() && enemy.isAlive()) {
System.out.println("\n=== Votre tour ===");
System.out.println("1. Attaquer");
System.out.println("2. Utiliser la capacité spéciale");
System.out.println("3. Utiliser un objet");
System.out.print("Votre choix : ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
hero.attack(enemy);
break;
case 2:
hero.useSpecialAbility(enemy);
break;
case 3:
hero.useItem();
break;
default:
System.out.println("Choix invalide, vous perdez votre tour !");
break;
}
if (enemy.isAlive()) {
System.out.println("\n=== Tour de l'ennemi ===");
if (enemy.specialAbility != null && new Random().nextInt(100) < 30) {
enemy.useSpecialAbility(hero);
Logger.getInstance().log(enemy.name + " utilise sa capacité spéciale");
} else {
enemy.attack(hero);
}
} else {
System.out.println("Vous avez vaincu " + enemy.name + " !");
Logger.getInstance().log(hero.name + " a vaincu " + enemy.name);
}
}
}
// afficher le titre (on pourra changer l'ascii)
public static void displayTitle() {
System.out.println("**************************************************");
System.out.println("* BEAT THEM ALL *");
System.out.println("**************************************************");
System.out.println(" ____ _ _ _ ");
System.out.println(" | _ \\ | | | | | | ");
System.out.println(" | |_) | __ _| |_| |_| | ___ ");
System.out.println(" | _ < / _` | __| __| |/ _ \\ ");
System.out.println(" | |_) | (_| | |_| |_| | __/ ");
System.out.println(" |____/ \\__,_|\\__|\\__|_|\\___| ");
System.out.println();
}
// pareil qu'au dessus
public static void displayGameOver() {
System.out.println("\n=== VOUS ÊTES MORT ===");
System.out.println(" _____");
System.out.println(" / \\");
System.out.println(" | |");
System.out.println(" | RIP |");
System.out.println(" | |");
System.out.println(" | |");
System.out.println(" | |");
System.out.println(" |_______|");
System.out.println("\nMerci d'avoir joué !");
}
// Tests unitaires intégrés dans le main (pour simplifier) pour l'instant
public static void runTests() {
System.out.println("\n--- Exécution des tests unitaires ---");
testEnemyDefeated();
testGameOver();
testSpecialAbility();
testItemUsage();
System.out.println("--- Tous les tests se sont terminés avec succès ---\n");
}
public static void testEnemyDefeated() {
Hero hero = new Hero("TestHero", 100, 50, 0, null);
Enemy enemy = new Enemy("TestEnemy", 50, 0, 0, null);
hero.attack(enemy);
assert enemy.currentHP == 0 : "L'ennemi aurait dû être vaincu.";
}
public static void testGameOver() {
Hero hero = new Hero("TestHero", 0, 0, 0, null);
assert !hero.isAlive() : "Le héros devrait être mort.";
}
public static void testSpecialAbility() {
Hero hero = new Hero("TestHero", 100, 20, 0, new DoubleAttack());
Enemy enemy = new Enemy("TestEnemy", 100, 0, 0, null);
hero.useSpecialAbility(enemy);
assert enemy.currentHP == 60 : "La capacité spéciale du héros n'a pas fonctionné correctement.";
}
public static void testItemUsage() {
Hero hero = new Hero("TestHero", 100, 20, 0, null);
hero.currentHP = 50;
Item potion = new HealthPotion();
potion.applyEffect(hero);
assert hero.currentHP == 100 : "La potion de santé n'a pas restauré correctement les PV du héros.";
}
}
......@@ -3,54 +3,80 @@ package org.example;
import java.util.Random;
import java.util.Scanner;
import static org.example.BeatThemAllGame.battle;
import static org.example.BeatThemAllGame.chooseHero;
import static org.example.BeatThemAllGame.displayGameOver;
import static org.example.BeatThemAllGame.displayTitle;
import static org.example.BeatThemAllGame.generateRandomEnemy;
import static org.example.BeatThemAllGame.getRandomItem;
public class Main{
public class Main {
public void main(String[] args) {
Scanner scanner = new Scanner(System.in);
displayTitle();
// afficher le titre (on pourra changer l'ascii)
public static void displayTitle() {
System.out.println("**************************************************");
System.out.println("* BEAT THEM ALL *");
System.out.println("**************************************************");
System.out.println(" ____ _ _ _ ");
System.out.println(" | _ \\ | | | | | | ");
System.out.println(" | |_) | __ _| |_| |_| | ___ ");
System.out.println(" | _ < / _` | __| __| |/ _ \\ ");
System.out.println(" | |_) | (_| | |_| |_| | __/ ");
System.out.println(" |____/ \\__,_|\\__|\\__|_|\\___| ");
System.out.println();
}
Hero hero = chooseHero(scanner);
System.out.println();
// pareil qu'au dessus
public static void displayGameOver() {
System.out.println("\n=== VOUS ÊTES MORT ===");
System.out.println(" _____");
System.out.println(" / \\");
System.out.println(" | |");
System.out.println(" | RIP |");
System.out.println(" | |");
System.out.println(" | |");
System.out.println(" | |");
System.out.println(" |_______|");
System.out.println("\nMerci d'avoir joué !");
}
System.out.println("Votre aventure commence !");
Logger.getInstance().log("Début de l'aventure de " + hero.name);
public static void main(String[] args) {
Test.runTests();
Scanner scanner = new Scanner(System.in);
displayTitle();
boolean gameRunning = true;
while (gameRunning && hero.isAlive()) {
Enemy enemy = generateRandomEnemy();
System.out.println("\nUn " + enemy.name + " apparaît !");
Logger.getInstance().log(hero.name + " rencontre un " + enemy.name);
battle(scanner, hero, enemy);
if (!hero.isAlive()) {
displayGameOver();
Logger.getInstance().log(hero.name + " est mort");
break;
}
hero.resetSpecialAbility();
hero.gainExperience(50);
// Chance de trouver un objet après le combat
if (new Random().nextInt(100) < 50) {
Item foundItem = getRandomItem();
System.out.println("Vous trouvez un objet sur l'ennemi !");
hero.addItem(foundItem);
}
Hero hero = chooseHero(scanner);
System.out.println();
System.out.println("Votre aventure commence !");
Logger.getInstance().log("Début de l'aventure de " + hero.name);
boolean gameRunning = true;
while (gameRunning && hero.isAlive()) {
Enemy enemy = generateRandomEnemy();
System.out.println("\nUn " + enemy.name + " apparaît !");
Logger.getInstance().log(hero.name + " rencontre un " + enemy.name);
Battle.battle(scanner, hero, enemy);
if (!hero.isAlive()) {
displayGameOver();
Logger.getInstance().log(hero.name + " est mort");
break;
}
hero.resetSpecialAbility();
hero.gainExperience(50);
// Chance de trouver un objet après le combat
if (new Random().nextInt(100) < 50) {
Item foundItem = getRandomItem();
System.out.println("Vous trouvez un objet sur l'ennemi !");
hero.addItem(foundItem);
}
// Demander au joueur s'il veut continuer
System.out.print("\nVoulez-vous continuer ? (oui/non) : ");
String choice = scanner.next();
if (!choice.equalsIgnoreCase("oui")) {
gameRunning = false;
System.out.println("Merci d'avoir joué !");
Logger.getInstance().log(hero.name + " a quitté le jeu");
// Demander au joueur s'il veut continuer
System.out.print("\nVoulez-vous continuer ? (oui/non) : ");
String choice = scanner.next();
if (!choice.equalsIgnoreCase("oui")) {
gameRunning = false;
System.out.println("Merci d'avoir joué !");
Logger.getInstance().log(hero.name + " a quitté le jeu");
}
}
}
}
}
\ No newline at end of file
package org.example;
import org.example.BeatThemAllGame.HealthPotion;
public class Test {
//TO-DO => les tests sont à refaire/améliorer !
public static void runTests() {
System.out.println("\n--- Exécution des tests unitaires ---");
testEnemyDefeated();
testGameOver();
testSpecialAbility();
testItemUsage();
System.out.println("--- Tous les tests se sont terminés avec succès ---\n");
}
public static void testEnemyDefeated() {
Hero hero = new Hero("TestHero", 100, 50, 0, null);
Enemy enemy = new Enemy("TestEnemy", 50, 0, 0, null);
hero.attack(enemy);
assert enemy.currentHP == 0 : "L'ennemi aurait dû être vaincu.";
}
public static void testGameOver() {
Hero hero = new Hero("TestHero", 0, 0, 0, null);
assert !hero.isAlive() : "Le héros devrait être mort.";
}
public static void testSpecialAbility() {
Hero hero = new Hero("TestHero", 100, 20, 0, new DoubleAttack());
Enemy enemy = new Enemy("TestEnemy", 100, 0, 0, null);
hero.useSpecialAbility(enemy);
assert enemy.currentHP == 60 : "La capacité spéciale du héros n'a pas fonctionné correctement.";
}
public static void testItemUsage() {
Hero hero = new Hero("TestHero", 100, 20, 0, null);
hero.currentHP = 50;
Item potion = new HealthPotion();
potion.applyEffect(hero);
assert hero.currentHP == 100 : "La potion de santé n'a pas restauré correctement les PV du héros.";
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment