Commit 7a1144f3 authored by Guillaume DEWISME's avatar Guillaume DEWISME

init

parents
Pipeline #3067 failed with stages
### IntelliJ IDEA ###
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" project-jdk-name="homebrew-22" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/IMfighTer.iml" filepath="$PROJECT_DIR$/IMfighTer.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="JUnit4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.1/junit-4.13.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="JUnit5.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
\ No newline at end of file
[2024-12-06T15:44:03.171690] Saitama à attaqué Catcheur et lui a infligé 27 points de dégats
[2024-12-06T15:44:03.176253] Saitama à attaqué Brute et lui a infligé 26 points de dégats
[2024-12-06T15:44:03.176538] Saitama à attaqué Boss et lui a infligé 25 points de dégats
[2024-12-06T15:46:18.141386] Flash Gordon utilise Multi shot et attaque trois fois
[2024-12-06T15:46:18.149984] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:46:18.150285] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:46:18.150405] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:46:18.150513] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:46:18.151106] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:46:18.151647] Flash Gordon à attaqué Boss et lui a infligé 15 points de dégats
[2024-12-06T15:46:18.151997] Flash Gordon à attaqué Boss et lui a infligé 15 points de dégats
[2024-12-06T15:54:02.918157]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
[2024-12-06T15:54:04.877761] Carte Choisie : Moyenne
[2024-12-06T15:54:05.726075] Gentil Choisi : Flash Gordon
[2024-12-06T15:54:05.728170] ______0
[2024-12-06T15:54:07.258672] Flash Gordon utilise Multi shot et attaque trois fois
[2024-12-06T15:54:07.265108] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:54:07.265498] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:54:07.265644] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:54:07.265819] Flash Gordon n'a plus de capacité spéciale.
[2024-12-06T15:54:07.265935] Flash Gordon à attaqué Tireur et lui a infligé 19 points de dégats
[2024-12-06T15:54:07.266606] Flash Gordon à attaqué Catcheur et lui a infligé 17 points de dégats
[2024-12-06T15:54:07.267191] Flash Gordon à attaqué Boss et lui a infligé 15 points de dégats
[2024-12-06T15:54:07.267602] Flash Gordon à attaqué Boss et lui a infligé 15 points de dégats
[2024-12-06T15:54:54.763584]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
[2024-12-06T15:54:57.366953] Carte Choisie : Moyenne
[2024-12-06T15:54:58.458729] Gentil Choisi : Saitama
[2024-12-06T15:54:58.465466] *___!$0
[2024-12-06T15:54:59.327297] Saitama n'a plus de capacité spéciale.
[2024-12-06T15:54:59.331668] Saitama à attaqué Gangster et lui a infligé 28 points de dégats
[2024-12-06T15:54:59.332153] Saitama à attaqué Boss et lui a infligé 25 points de dégats
[2024-12-06T16:01:28.223213]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
[2024-12-06T16:01:31.614653] Carte Choisie : Moyenne
[2024-12-06T16:01:32.316649] Gentil Choisi : Saitama
[2024-12-06T16:01:32.322276] *_!_!$0
[2024-12-06T16:01:33.159623] Saitama n'a plus de capacité spéciale.
[2024-12-06T16:02:04.513898]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
[2024-12-06T16:02:06.302807] Carte Choisie : Moyenne
[2024-12-06T16:02:06.929261] Gentil Choisi : Saitama
[2024-12-06T16:02:06.935390] *__!_$0
[2024-12-06T16:02:07.541870] Le joueur a choisi d'utiliser la capacité spéciale :One Shot
[2024-12-06T16:02:07.542286] Saitama n'a plus de capacité spéciale.
[2024-12-06T16:02:07.542444] Saitama a avancé d'une case.
[2024-12-06T16:02:07.542828] Saitama a avancé d'une case.
[2024-12-06T16:02:07.548280] Gangster à attaqué Saitama et lui a infligé 3 points de dégats
[2024-12-06T16:02:07.548913] Saitama à attaqué Gangster et lui a infligé 28 points de dégats
[2024-12-06T16:02:07.549294] Gangster est mort
[2024-12-06T16:02:07.549398] Saitama a avancé d'une case.
[2024-12-06T16:02:07.549746] Saitama a avancé d'une case.
[2024-12-06T16:02:07.550190] Saitama à attaqué Boss et lui a infligé 25 points de dégats
[2024-12-06T16:02:07.550292] Boss est mort
[2024-12-06T16:02:07.550354] Saitama a avancé d'une case.
[2024-12-06T16:02:07.550645] Saitama a avancé d'une case.
[2024-12-06T16:02:07.550785] Partie Gagné !!
[2024-12-06T16:05:56.846956]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
[2024-12-06T16:05:59.461506] Carte Choisie : Extreme
[2024-12-06T16:06:02.433865] Gentil Choisi : Saitama
[2024-12-06T16:06:02.438876] *_!___!__$0
[2024-12-06T16:06:05.083453] Saitama a avancé d'une case.
[2024-12-06T16:06:05.083735] _*!___!__$0
[2024-12-06T16:06:06.085999] Saitama à attaqué Catcheur et lui a infligé 27 points de dégats
[2024-12-06T16:06:06.086741] Catcheur est mort
[2024-12-06T16:06:06.086830] Saitama a avancé d'une case.
[2024-12-06T16:06:06.086927] __*___!__$0
[2024-12-06T16:06:07.825368] Saitama a avancé d'une case.
[2024-12-06T16:06:07.825711] ___*__!__$0
[2024-12-06T16:06:09.377324] Saitama a avancé d'une case.
[2024-12-06T16:06:09.377645] ____*_!__$0
[2024-12-06T16:06:10.418421] Saitama a avancé d'une case.
[2024-12-06T16:06:10.418701] _____*!__$0
[2024-12-06T16:06:12.325468] Le joueur a choisi d'utiliser la capacité spéciale :One Shot
[2024-12-06T16:06:12.326163] Saitama à attaqué Catcheur et lui a infligé 127 points de dégats
[2024-12-06T16:06:12.326283] Catcheur est mort
[2024-12-06T16:06:12.326457] Saitama n'a plus de capacité spéciale.
[2024-12-06T16:06:12.326567] Saitama à attaqué Catcheur et lui a infligé 27 points de dégats
[2024-12-06T16:06:12.326634] Catcheur est mort
[2024-12-06T16:06:12.326698] Saitama a avancé d'une case.
[2024-12-06T16:06:12.326760] ______*__$0
[2024-12-06T16:06:12.327120] Saitama a avancé d'une case.
[2024-12-06T16:06:12.327217] _______*_$0
[2024-12-06T16:06:12.327595] Saitama a avancé d'une case.
[2024-12-06T16:06:12.327714] ________*$0
[2024-12-06T16:06:12.328128] Saitama à attaqué Boss et lui a infligé 25 points de dégats
[2024-12-06T16:06:12.328214] Boss est mort
[2024-12-06T16:06:12.328264] Saitama a avancé d'une case.
[2024-12-06T16:06:12.328318] _________*0
[2024-12-06T16:06:12.328636] Saitama a avancé d'une case.
[2024-12-06T16:06:12.328703] __________*
[2024-12-06T16:06:12.328787] Partie Gagné !!
[2024-12-06T16:07:30.026828]
[2024-12-06T16:07:30.045046]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
[2024-12-06T16:07:32.368946] Carte Choisie : Moyenne
[2024-12-06T16:07:33.001099] Gentil Choisi : Saitama
[2024-12-06T16:07:33.006916] *!__!$0
[2024-12-06T16:07:33.700408] Le joueur a choisi d'utiliser la capacité spéciale :One Shot
[2024-12-06T16:07:33.707017] Saitama a attaqué Brute et lui a infligé 126 points de dégats
[2024-12-06T16:07:33.707420] Brute est mort
[2024-12-06T16:07:33.707543] Saitama n'a plus de capacité spéciale.
[2024-12-06T16:07:33.707688] Saitama a attaqué Brute et lui a infligé 26 points de dégats
[2024-12-06T16:07:33.707773] Brute est mort
[2024-12-06T16:07:33.707885] Saitama a avancé d'une case.
[2024-12-06T16:07:33.707988] _*__!$0
[2024-12-06T16:07:33.708325] Saitama a avancé d'une case.
[2024-12-06T16:07:33.708434] __*_!$0
[2024-12-06T16:07:33.708724] Saitama a avancé d'une case.
[2024-12-06T16:07:33.708804] ___*!$0
[2024-12-06T16:07:33.709155] Saitama a attaqué Tireur et lui a infligé 29 points de dégats
[2024-12-06T16:07:33.709255] Tireur est mort
[2024-12-06T16:07:33.709318] Saitama a avancé d'une case.
[2024-12-06T16:07:33.709377] ____*$0
[2024-12-06T16:07:33.709719] Saitama a attaqué Boss et lui a infligé 25 points de dégats
[2024-12-06T16:07:33.709804] Boss est mort
[2024-12-06T16:07:33.709854] Saitama a avancé d'une case.
[2024-12-06T16:07:33.709907] _____*0
[2024-12-06T16:07:33.710188] Saitama a avancé d'une case.
[2024-12-06T16:07:33.710280] ______*
[2024-12-06T16:07:33.710377] Partie Gagné !!
[2024-12-09T19:31:26.652564] Thomas a avancé d'une case.
[2024-12-09T19:31:26.661237] _*____0
[2024-12-09T19:31:26.679591] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.680125] Catcheur à attaqué Thomas et lui a infligé 6 points de dégats
[2024-12-09T19:31:26.680281] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.680380] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.680667] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.680799] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.681207] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.681318] Catcheur à attaqué Thomas et lui a infligé 6 points de dégats
[2024-12-09T19:31:26.681635] Thomas est mort
[2024-12-09T19:31:26.688191] Thomas a attaqué Boss et lui a infligé 0 points de dégats
[2024-12-09T19:31:26.688311] Thomas n'a plus de capacité spéciale.
[2024-12-09T19:31:26.691328] Thomas a avancé d'une case.
[2024-12-09T19:31:26.691399] _*____0
[2024-12-09T19:31:26.691517] Thomas a avancé d'une case.
[2024-12-09T19:31:26.691542] __*___0
[2024-12-09T19:31:26.691674] Thomas a avancé d'une case.
[2024-12-09T19:31:26.691698] ___*__0
[2024-12-09T19:31:26.691820] Thomas a avancé d'une case.
[2024-12-09T19:31:26.691842] ____*_0
[2024-12-09T19:31:26.691945] Thomas a avancé d'une case.
[2024-12-09T19:31:26.691966] _____*0
[2024-12-09T19:31:26.692066] Thomas a avancé d'une case.
[2024-12-09T19:31:26.692087] ______*
[2024-12-09T19:31:26.694812] Thomas a attaqué Sbire et lui a infligé 5 points de dégats
[2024-12-09T19:31:26.694973] Sbire est mort
[2024-12-11T13:04:53.024657200] Thomas a avancé d'une case.
[2024-12-11T13:04:53.033680] _*____0
[2024-12-11T13:04:53.045190600] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.045190600] Catcheur à attaqué Thomas et lui a infligé 6 points de dégats
[2024-12-11T13:04:53.045190600] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.045190600] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.045190600] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.045190600] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.045190600] Thomas a attaqué Catcheur et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.045190600] Catcheur à attaqué Thomas et lui a infligé 6 points de dégats
[2024-12-11T13:04:53.045190600] Thomas est mort
[2024-12-11T13:04:53.052611600] Thomas a attaqué Boss et lui a infligé 0 points de dégats
[2024-12-11T13:04:53.052611600] Thomas n'a plus de capacité spéciale.
[2024-12-11T13:04:53.052611600] Thomas a avancé d'une case.
[2024-12-11T13:04:53.052611600] _*____0
[2024-12-11T13:04:53.052611600] Thomas a avancé d'une case.
[2024-12-11T13:04:53.052611600] __*___0
[2024-12-11T13:04:53.052611600] Thomas a avancé d'une case.
[2024-12-11T13:04:53.052611600] ___*__0
[2024-12-11T13:04:53.052611600] Thomas a avancé d'une case.
[2024-12-11T13:04:53.052611600] ____*_0
[2024-12-11T13:04:53.052611600] Thomas a avancé d'une case.
[2024-12-11T13:04:53.052611600] _____*0
[2024-12-11T13:04:53.052611600] Thomas a avancé d'une case.
[2024-12-11T13:04:53.052611600] ______*
[2024-12-11T13:04:53.052611600] Thomas a attaqué Sbire et lui a infligé 5 points de dégats
[2024-12-11T13:04:53.052611600] Sbire est mort
[2024-12-11T13:05:23.882523]
[2024-12-11T13:05:23.882523]
*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***
File added
// _________ .__ _________ __
// \_ ___ \| | _____ ______ ______ \_ ___ \_____ ________/ |_ ____
// / \ \/| | \__ \ / ___// ___/ / \ \/\__ \\_ __ \ ___/ __ \
// \ \___| |__/ __ \_\___ \ \___ \ \ \____/ __ \| | \/| | \ ___/
// \______ |____(____ /____ /____ > \______ (____ |__| |__| \___ >
// \/ \/ \/ \/ \/ \/ \/
package Entity;
public class Carte {
//Définition des caractéristiques d'un objet Carte
private String lieu;
private String nom;
private int deb;
private int fin;
private int longueur;
//Définition du constructeur Cartes
public Carte(String lieu, String nom, int deb, int fin, int longueur) {
this.lieu = lieu;
this.nom = nom;
this.deb = deb;
this.fin = fin;
this.longueur = longueur;
}
//Définition des Getters et Setters
// Getter et Setter de lieu
public String getLieu() {
return lieu;
}
public void setLieu(String lieu) {
this.lieu = lieu;
}
// Getter et Setter de nom
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
// Getter et Setter de deb
public int getDeb() {
return deb;
}
public void setDeb(int deb) {
this.deb = deb;
}
// Getter et Setter de fin
public int getFin() {
return fin;
}
public void setFin(int fin) {
this.fin = fin;
}
// Getter et Setter de longueur
public int getLongueur() {
return longueur;
}
public void setLongueur(int longueur) {
this.longueur = longueur;
}
}
// _________ .__ _________ __ __
// \_ ___ \| | _____ ______ ______ \_ ___ \ ____ _____/ |_ ____ ___ ___/ |_
// / \ \/| | \__ \ / ___// ___/ / \ \/ / _ \ / \ ___/ __ \\ \/ \ __\
// \ \___| |__/ __ \_\___ \ \___ \ \ \___( <_> | | | | \ ___/ > < | |
// \______ |____(____ /____ /____ > \______ /\____/|___| |__| \___ /__/\_ \|__|
// \/ \/ \/ \/ \/ \/ \/ \/
package Entity;
import java.util.*;
import Enum.CapaciteSpeciale;
import Enum.TypeMechant;
// Création de la classe Context qui permet de faire fonctionner le jeu
public class Context {
// Création du jeu
public static void CreationJeu(){
System.out.println("Création du jeu");
// Création de toutes les variables
Context context = new Context();
List<Carte> cartes = context.CreationCartes();
Carte carteChoisie = context.ChoixCarte(cartes);
MyLogger.getInstance().log("Carte Choisie : "+carteChoisie.getNom());
List<Gentil> gentils = context.CreationGentils();
Gentil gentilChoisi = context.ChoixGentil(gentils);
MyLogger.getInstance().log("Gentil Choisi : "+gentilChoisi.getNom());
List<Mechant> mechants = context.CreationMechants();
Personnage[] tableau = new Personnage[carteChoisie.getLongueur()];
// Création du tableau de jeu avec la carte choisie, le gentil choisi et une sélection aléatoire de méchant
Jeu jeu = new Jeu(carteChoisie, gentilChoisi, mechants, tableau);
tableau = RemplirTableau(tableau, gentilChoisi, mechants);
MyLogger.getInstance().log(context.toStringTableau(tableau));
System.out.println(
"\n\nGentil choisi : " + gentilChoisi.getNom()+
"\nCarte choisie : " + carteChoisie.getNom() +
"\nVoici l'état initial du jeu : ");
context.AfficheTableau(tableau);
// Condition pour continuer le jeu / lancer un tour
while(gentilChoisi.getIsAlive()){
context.LancementTour(tableau, gentilChoisi, context);
if (tableau[tableau.length - 1] == gentilChoisi) { // Si le gentil atteint la dernière case du tableau alors il a gagné
System.out.println("Bravo !! Vous avez gagné la partie !!");
MyLogger.getInstance().log("Partie Gagné !!");
break;
}
}
if (!gentilChoisi.getIsAlive()){
System.out.println("Game Over, t'es trop nul, t'as perdu !!!");
MyLogger.getInstance().log("Partie Perdue !!");
}
}
// Remplissage du tableau de jeu
public static Personnage[] RemplirTableau(Personnage[] tableau, Gentil gentilChoisi, List<Mechant> mechants){
for(int i = 0; i < tableau.length ; i++){
if (i == 0){ // On place toujours le gentil sur la permière case du tableau
tableau[i] = gentilChoisi;
} else if (i == tableau.length - 2) { // On place toujours un Boss sur l'avant dernière case du tableau
tableau[i] = mechants.get(4);
} else if(i == tableau.length - 1){ // La dernière case du tableau est toujours "null" car c'est la casse de victoire
tableau[i] = null;
}else{
// on choisit aléatoirement un chiffre (1 ou 0)
Random random = new Random();
int choix = random.nextInt(2);
if(choix == 0){ // si c'est 0 alors on ne place pas de méchant sur cette case du tableau
tableau[i] = null;
} else { // si c'est 1 alors on choisit aléatoirement le méchant qui sera placé dans le tableau
int choixMechant = random.nextInt(4); // Génère entre 0 et 3
tableau[i] = mechants.get(choixMechant); // On place le méchant choisi dans le tableau
}
}
}
return tableau;
}
// Lancement d'un tour de jeu
public static void LancementTour(Personnage[] tableau, Gentil gentil, Context context){
System.out.println("\nLancement de tour");
context.AfficheTableau(tableau);
// Calcul position Gentil dans le tableau
int positionGentil = -1;
for (int i = 0; i < tableau.length; i++){
if(tableau[i] == null){
} else if (tableau[i].getNom() == gentil.getNom()){
positionGentil = i;
}
}
if (tableau[positionGentil + 1] !=null){ // Si il y a un méchant sur la case devant le gentil
Mechant mechantTest = (Mechant) tableau[positionGentil + 1];
if (mechantTest.getType() == TypeMechant.GANGSTER) { // on regarde si c'est un méchant de type Gangster
// Si c'est un gangster alors le méchant attaque une première fois avant le gentil
mechantTest.attaquer(gentil);
}
}
// Si le gentil a sa capacite on demande a l'utilisateur s'il souhaite l'utiliser
int choixCapacite = - 1;
Scanner scanner = new Scanner(System.in);
if (gentil.getCapaciteSpeciale() != null){
while (choixCapacite < 1 || choixCapacite > 2)
{
System.out.print("\nSouhaitez-vous utiliser la capacité spéciale ?\n" +
"1 NON\n" +
"2 OUI\n");
if (scanner.hasNextInt()) {
choixCapacite = scanner.nextInt();
if (choixCapacite < 1 || choixCapacite > 2) {
System.out.println("Numéro invalide. Veuillez réessayer.");
}
} else {
System.out.println("Entrée invalide. Veuillez entrer 1 ou 2.");
scanner.next(); // Nettoyer l'entrée invalide
}
}
if(choixCapacite == 2){
// On utilise la capacité spéciale
MyLogger.getInstance().log("Le joueur a choisi d'utiliser la capacité spéciale :"+ gentil.getCapaciteSpeciale().getNom());
gentil.utiliserPouvoir(tableau[positionGentil+1]);
// le gentil n'a plus de capacité spéciale
}
}
// Si la case devant le gentil est occupé par un mechant
if(tableau[positionGentil+1] != null){
// Attaque du gentil puis riposte de méchant
Mechant mechant = (Mechant) tableau[positionGentil+1];
Random random = new Random();
int nombreAttaque = random.nextInt(5); // le gentil attaque un nombre de fois aléatoire entre 1 fois et 5 fois
// le gentil attaque 1 fois en premier
gentil.attaquer(mechant);
if(mechant.getIsAlive() && (mechant.getType() != TypeMechant.GANGSTER)){
// si le méchant est en vie et que ce n'est pas un gangster alors il attaque le gentil
mechant.attaquer(gentil);
}
if (!gentil.getIsAlive()){ // Si le gentil est mort, on affiche que le méchant l'a tué
System.out.println("Le méchant "+ mechant.getNom()+" a tué le gentil "+ gentil.getNom());
}else{ // Si le gentil est en vie et que le méchant aussi, il attaque le méchant
for (int i = 0; i < nombreAttaque; i++) {
if(mechant.getIsAlive()){
gentil.attaquer(mechant);
}
}
if(mechant.getIsAlive()){ // Si le méchant est coriace et qu'il est encore en vie
tableau[positionGentil+1] = mechant;
}else{ // Si le méchant est mort le gentil avance
tableau = AvancerGentil(tableau, gentil);
}
}
}else{
// On fait avancer le gentil d'une case s'il n'y a rien
tableau = AvancerGentil(tableau, gentil);
}
}
// Fait avancer le gentil sur la case suivante
public static Personnage[] AvancerGentil(Personnage[] tableau, Gentil gentil){
// Calcul position Gentil dans le tableau
int positionGentil = -1;
for (int i = 0; i < tableau.length; i++){
if(tableau[i] == null){
} else if (tableau[i].getNom() == gentil.getNom()){
positionGentil = i;
}
}
// On place le gentil sur la case suivante
tableau[positionGentil+1] = gentil;
// On supprime le gentil de la case précédente
tableau[positionGentil]=null;
MyLogger.getInstance().log(gentil.getNom()+" a avancé d'une case.");
MyLogger.getInstance().log(Context.toStringTableau(tableau));
return tableau;
}
// Permet d'afficher le tableau de jeu
public static void AfficheTableau(Personnage[] tableau){
for (int i = 0; i < tableau.length ; i++) {
if (tableau[i] != null) {
// Si la case du tableau est différente de "null" alors on affiche le symbole du personnage
System.out.print(tableau[i].getSymbole());
} else if (i == tableau.length - 1) {
// on affiche toujours un 0 sur la dernière case du tableau pour signaliser l'arrivée de la map
System.out.print("0");
}else {
// Si aucun personnage n'est sur la case on met un "_"
System.out.print("_");
}
}
System.out.println();
}
// Choix du gentil par l'utilisateur
public static Gentil ChoixGentil(List<Gentil> gentils){
Scanner scanner = new Scanner(System.in);
int indice = 1;
System.out.println("");
for (Gentil gentil : gentils) {
System.out.println(indice + " - "+ gentil.getNom() +
", pv = " + gentil.getPv() +
", pa = " + gentil.getPa() +
", defense = " + gentil.getDefense() +
", capaciteSpeciale = " + gentil.getCapaciteSpeciale().getNom());
indice ++;
}
int choix = -1;
while (choix < 1 || choix > gentils.size()) {
// L'utilisateur choisi un gentil parmis la liste de gentils proposé
System.out.print("Veuillez choisir un gentil en entrant son numéro (1-" + gentils.size() + ") : ");
if (scanner.hasNextInt()) {
choix = scanner.nextInt();
if (choix < 1 || choix > gentils.size()) {
System.out.println("Numéro invalide. Veuillez réessayer.");
}
} else {
System.out.println("Entrée invalide. Veuillez entrer un numéro.");
scanner.next(); // Nettoyer l'entrée invalide
}
}
Gentil gentilChoisi = gentils.get(choix - 1);
return gentilChoisi;
}
// Choix de la carte de jeu par l'utilisateur
public static Carte ChoixCarte(List<Carte> cartes){
Scanner scanner = new Scanner(System.in);
int indice = 1;
for (Carte carte : cartes) {
System.out.println(indice + " - "+ carte.getNom());
indice ++;
}
int choix = -1;
while (choix < 1 || choix > cartes.size()){
// L'utilisateur choisi une carte parmis la liste de carte possible
System.out.print("Veuillez choisir une carte en entrant son numéro (1 - " + cartes.size() + ") : ");
if (scanner.hasNextInt()) {
choix = scanner.nextInt();
if (choix < 1 || choix > cartes.size()) {
System.out.println("Numéro invalide. Veuillez réessayer.");
}
} else {
System.out.println("Entrée invalide. Veuillez entrer un numéro.");
scanner.next(); // Nettoyer l'entrée invalide
}
}
Carte cartechoisie = cartes.get(choix - 1);
return cartechoisie;
}
// Création de la liste des cartes disponibles
public static List<Carte> CreationCartes(){
List<Carte> cartes = new ArrayList<>();
Carte facile = new Carte("France", "Facile", 0, 4, 5);
Carte moyenne = new Carte("Espagne", "Moyenne", 0, 6, 7);
Carte difficile = new Carte("Italie", "Difficile", 0, 8, 9);
Carte extreme = new Carte("Allemagne", "Extreme", 0, 10, 11);
cartes.add(facile);
cartes.add(moyenne);
cartes.add(difficile);
cartes.add(extreme);
return cartes;
}
// Création de la liste des gentils disponibles
public static List<Gentil> CreationGentils(){
List<Gentil> gentils = new ArrayList<>();
Gentil flash = new Gentil('*', 4, 20, 30,"Flash Gordon", CapaciteSpeciale.MULTI_SHOT);
Gentil saitama = new Gentil('*', 6, 30, 25,"Saitama", CapaciteSpeciale.ONE_SHOT);
Gentil moira = new Gentil('*', 2, 20, 40,"Moïra", CapaciteSpeciale.MULTI_SHOT);
gentils.add(flash);
gentils.add(saitama);
gentils.add(moira);
return gentils;
}
// Création de la liste des méchants disponibles
public static List<Mechant> CreationMechants(){
List<Mechant> mechants = new ArrayList<>();
Mechant catcheur = new Mechant('!', "Catcheur", TypeMechant.CATCHEUR);
Mechant brute = new Mechant('!', "Brute", TypeMechant.BRUTE);
Mechant tireur = new Mechant('!', "Tireur", TypeMechant.TIREUR);
Mechant gangster = new Mechant('!', "Gangster", TypeMechant.GANGSTER);
Mechant boss = new Mechant('$', "Boss", TypeMechant.BOSS);
mechants.add(catcheur);
mechants.add(brute);
mechants.add(tireur);
mechants.add(gangster);
mechants.add(boss);
return mechants;
}
// Lancement automatique du tour (utilisé pour les tests unitaires)
public static void LancementTourAutomatique(Personnage[] tableau, Gentil gentil, Context context){
// Calcul position Gentil dans le tableau
System.out.println("\nLancement de tour");
context.AfficheTableau(tableau);
int positionGentil = -1;
for (int i = 0; i < tableau.length; i++){
if(tableau[i] == null){
} else if (tableau[i].getNom() == gentil.getNom()){
positionGentil = i;
}
}
// Si la case devant le gentil est occupé par un mechant
if(tableau[positionGentil+1] != null){
// Attaque du heros puis riposte mechant
Mechant mechant = (Mechant) tableau[positionGentil+1];
Random random = new Random();
int nombreAttaque = random.nextInt(5); // Entre 1 et 5 attaques
gentil.attaquer(mechant);
if(mechant.getIsAlive()){
mechant.attaquer(gentil);
}
if (!gentil.getIsAlive()){
System.out.println("Le méchant "+ mechant.getNom()+" a tué le gentil "+ gentil.getNom());
}else{
for (int i = 0; i < nombreAttaque; i++) {
if(mechant.getIsAlive()){
gentil.attaquer(mechant);
}
}
if(mechant.getIsAlive()){
tableau[positionGentil+1] = mechant;
}else{
tableau = AvancerGentil(tableau, gentil);
}
}
}else{
// On fait avancer le gentil d'une case s'il n'y a rien
tableau = AvancerGentil(tableau, gentil);
}
context.AfficheTableau(tableau);
}
// Permet d'afficher lee tableau dans le fichier de log
public static String toStringTableau(Personnage[] tableau){
String tableauString = "";
for (int i = 0; i < tableau.length ; i++) {
if (tableau[i] != null) {
tableauString +=tableau[i].getSymbole();
} else if (i == tableau.length - 1) {
tableauString += '0';
}else {
tableauString += '_';
}
}
return tableauString;
}
}
// _________ .__ ________ __ .__.__
// \_ ___ \| | _____ ______ ______ / _____/ ____ _____/ |_|__| |
// / \ \/| | \__ \ / ___// ___/ / \ ____/ __ \ / \ __| | |
// \ \___| |__/ __ \_\___ \ \___ \ \ \_\ \ ___/| | | | | | |__
// \______ |____(____ /____ /____ > \______ /\___ |___| |__| |__|____/
// \/ \/ \/ \/ \/ \/ \/
package Entity;
import Interfaces.ActionPersonnage;
import Enum.CapaciteSpeciale;
import java.util.logging.Level;
// Création de la classe Gentil qui est enfant de la classe Personnage et qui utilise l'interface ActionPersonnage
public class Gentil extends Personnage implements ActionPersonnage {
// Définition des différentes caractéristiques d'un gentil
private CapaciteSpeciale capaciteSpeciale;
public Gentil(char symbole, int defense, int pa, int pv, String nom, CapaciteSpeciale capaciteSpeciale) {
super(symbole, defense, pa, pv, nom);
this.capaciteSpeciale = capaciteSpeciale;
}
public CapaciteSpeciale getCapaciteSpeciale() {
return capaciteSpeciale;
}
public void setCapaciteSpeciale(CapaciteSpeciale capaciteSpeciale) {
this.capaciteSpeciale = capaciteSpeciale;
}
// Permet de pouvoir afficher les caractéristiques d'un gentil dans le terminal
@Override
public String toString() {
return "Gentil{" +
"nom='" + this.getNom() + '\'' +
", pv=" + this.getPv() +
", pa=" + this.getPa() +
", defense=" + this.getDefense() +
", symbole=" + this.getSymbole() +
", capaciteSpeciale=" + this.capaciteSpeciale.getNom() +
'}';
}
// Fonction qui permet à un personnage (gentil) d'attaquer sa cible (méchant) et de lui infliger des dégats
@Override
public void attaquer(Personnage cible) {
if (cible != null) { // Si la cible est un personnage
int degats = this.getPa() - cible.getDefense();
if (degats < 0) {degats = 0;}
System.out.println(this.getNom() +" a attaqué " + cible.getNom() + " et lui a infligé " + degats + " points de dégats");
MyLogger.getInstance().log(this.getNom() +" a attaqué " + cible.getNom() + " et lui a infligé " + degats + " points de dégats");
cible.setPv(cible.getPv() - degats); // On met à jour les points de vie de la cible
}
}
// Fonction qui permet à un gentil d'utiliser sa capacité spéciale sur un méchant
@Override
public void utiliserPouvoir(Personnage cible) { // si c'est un soin le personnage récupère des points de vie, sinon il inflige des dégats à la cible
if (capaciteSpeciale.estSoins()) {
System.out.println(this.getNom() + " utilise " + this.capaciteSpeciale.getNom() + " et récupère " + capaciteSpeciale.getEffet() + " PV.");
MyLogger.getInstance().log(this.getNom() + " utilise " + this.capaciteSpeciale.getNom() + " et récupère " + capaciteSpeciale.getEffet() + " PV.");
this.setPv(Math.min(50, getPv() + capaciteSpeciale.getEffet())); // Limite des PV à 50
} else if (capaciteSpeciale.getNom() == "Multi shot") {
System.out.println(this.getNom() + " utilise " + this.capaciteSpeciale.getNom() + " et attaque trois fois");
MyLogger.getInstance().log(this.getNom() + " utilise " + this.capaciteSpeciale.getNom() + " et attaque trois fois");
this.attaquer(cible);
this.attaquer(cible);
this.attaquer(cible);
} else if (capaciteSpeciale.getNom() == "Gonflette") {
System.out.println(this.getNom() + " utilise " + this.capaciteSpeciale.getNom() + " et augmente ses pv de 25");
MyLogger.getInstance().log(this.getNom() + " utilise " + this.capaciteSpeciale.getNom() + " et augmente ses pv de 25");
this.setPv(this.getPv() + capaciteSpeciale.getEffet());
} else {
int pa = this.getPa();
this.setPa(pa + this.capaciteSpeciale.getEffet());
this.attaquer(cible);
this.setPa(pa);
}
this.setCapaciteSpeciale(null);
MyLogger.getInstance().log(this.getNom() + " n'a plus de capacité spéciale.");
}
}
// _________ .__ ____.
// \_ ___ \| | _____ ______ ______ | | ____ __ __
// / \ \/| | \__ \ / ___// ___/ | _/ __ \| | \
// \ \___| |__/ __ \_\___ \ \___ \ /\__| \ ___/| | /
// \______ |____(____ /____ /____ > \________|\___ |____/
// \/ \/ \/ \/ \/
package Entity;
import java.util.List;
public class Jeu {
//Définition des caractéristiques d'un objet jeu
private Carte carte; // choix d'une carte dans une liste
private Gentil gentil; // choix d'un gentil dans une liste
private List<Mechant> mechants ; // liste de méchants choisis aléatoirement
private Personnage[] tableau; // le tableau montrant le déroulement du jeu
//Définition du constructeur
public Jeu(Carte carte, Gentil gentil, List<Mechant> mechants, Personnage[] tableau) {
this.carte = carte;
this.gentil = gentil;
this.mechants = mechants;
this.tableau = tableau;
}
//Définition des Getters et Setters
//Getter et Setter de la carte choisi
public Carte getCarte() {
return carte;
}
public void setCarte(Carte carte) {
this.carte = carte;
}
//Getter et Setter du gentil choisi
public Gentil getGentil() {
return gentil;
}
public void setGentil(Gentil gentil) {
this.gentil = gentil;
}
//Getter et Setter de la liste de mechant
public List<Mechant> getMechants() {
return mechants;
}
public void setMechants(List<Mechant> mechants) {
this.mechants = mechants;
}
//Getter et Setter du tableau
public Personnage[] getTableau() {
return tableau;
}
public void setTableau(Personnage[] tableau) {
this.tableau = tableau;
}
}
// _________ .__ _____ .__ __
// \_ ___ \| | _____ ______ ______ / \ ____ ____ | |__ _____ _____/ |_
// / \ \/| | \__ \ / ___// ___/ / \ / \_/ __ _/ ___\| | \\__ \ / \ __\
// \ \___| |__/ __ \_\___ \ \___ \ / Y \ ___\ \___| Y \/ __ \| | | |
// \______ |____(____ /____ /____ > \____|__ /\___ \___ |___| (____ |___| |__|
// \/ \/ \/ \/ \/ \/ \/ \/ \/ \/
package Entity;
import Interfaces.ActionPersonnage;
import Enum.TypeMechant;
// Création de la classe Mechant qui est enfant de la classe Personnage et qui utilise l'interface ActionPersonnage
public class Mechant extends Personnage implements ActionPersonnage {
// Définition des différentes caractéristiques d'un méchant
TypeMechant type;
public Mechant(char symbole, String nom, TypeMechant type) {
super(symbole, type.getBonusDefense(), type.getBonusPa(), type.getBonusPv(), nom); // les pv d'un méchant sont issus de son type
this.type = type;
}
public TypeMechant getType() {
return type;
}
public void setType(TypeMechant type) {
this.type = type;
}
// Permet de pouvoir afficher les caractéristiques d'un méchant dans le terminal
@Override
public String toString() {
return "Mechant de type "+ this.getType().getNom()+"{" +
"nom='" + this.getNom() + '\'' +
", pv=" + this.getPv() +
", pa=" + this.getPa() +
", defense=" + this.getDefense() +
", symbole=" + this.getSymbole() +
'}';
}
// Fonction qui permet à un personnage (méchant) d'attaquer sa cible (gentil) et de lui infliger des dégats
@Override
public void attaquer(Personnage cible) {
int degats = this.getPa() - cible.getDefense();
if (degats < 0) {degats = 0;}
System.out.println(this.getNom() +" à attaqué " + cible.getNom() + " et lui a infligé " + degats + " points de dégats");
MyLogger.getInstance().log(this.getNom() +" à attaqué " + cible.getNom() + " et lui a infligé " + degats + " points de dégats");
cible.setPv(cible.getPv() - degats);
}
// Fonction qui informe qu'un méchant n'a pas de capacité spéciale
@Override
public void utiliserPouvoir(Personnage cible) {
System.out.println("Les méchants n'ont pas de pouvoir !!");
}
}
// _________ .__ _____ .____
// \_ ___ \| | _____ ______ ______ / \ ___.__| | ____ ____ ____ ___________
// / \ \/| | \__ \ / ___// ___/ / \ / < | | | / _ \ / ___\ / ___\_/ __ \_ __ \
// \ \___| |__/ __ \_\___ \ \___ \ / Y \___ | |__( <_> / /_/ / /_/ \ ___/| | \/
// \______ |____(____ /____ /____ > \____|__ / ____|_______ \____/\___ /\___ / \___ |__|
// \/ \/ \/ \/ \/\/ \/ /_____//_____/ \/
package Entity;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
// Création de la classe MyLogger qui permet de créer le fichier de log
public class MyLogger {
private static MyLogger instance;
private FileWriter writer;
private MyLogger() {
try {
writer = new FileWriter("IMfighTer.log", true);
} catch (IOException e) {
System.out.println("Erreur lors de l'initialisation du logger : " + e.getMessage());
}
}
public static MyLogger getInstance() {
if (instance == null) {
instance = new MyLogger();
}
return instance;
}
public void log(String message) {
try {
String timestamp = "[" + LocalDateTime.now() + "] ";
writer.write(timestamp + message + "\n");
writer.flush();
} catch (IOException e) {
System.out.println("Erreur lors de l'écriture dans le fichier de log : " + e.getMessage());
}
}
}
\ No newline at end of file
// _________ .__ __________
// \_ ___ \| | _____ ______ ______ \______ \ ___________ __________ ____ ____ _____ ____ ____
// / \ \/| | \__ \ / ___// ___/ | ____/ __ \_ __ / ___/ _ \ / \ / \\__ \ / ___\_/ __ \
// \ \___| |__/ __ \_\___ \ \___ \ | | \ ___/| | \\___ ( <_> | | | | \/ __ \/ /_/ \ ___/
// \______ |____(____ /____ /____ > |____| \___ |__| /____ \____/|___| |___| (____ \___ / \___ >
// \/ \/ \/ \/ \/ \/ \/ \/ \/_____/ \/
package Entity;
// Création de la classe Personnage
public class Personnage {
// Définition des différentes caractéristiques d'un personnage
private String nom;
private int pv; // Points de vie
private int pa; // Points d'attaque
private int defense; // Point de défense
private char symbole; // charactère pour afficher le personnage dans le Jeu.tableau
private boolean isAlive; // vrai si le personnage est en vi
// Définition du constructeur
public Personnage(char symbole, int defense, int pa, int pv, String nom) {
this.symbole = symbole;
this.defense = defense;
this.pa = pa;
if( 0< pv && pv < 51){
this.pv = pv;
}else{
throw new IllegalArgumentException("Les PV de base doivent être compris entre 10 et 50");
}
this.nom = nom;
this.isAlive = true;
}
// Fonction qui permet de retourner si un personnage est en vie ou non
public boolean getIsAlive() {
return isAlive;
}
// Définition de la variable isAlive en fonction de l'état du personnage
public void setIsAlive(boolean alive) {
isAlive = alive;
}
//Fonction qui permet de retourner le symbole du personnage
public char getSymbole() {
return symbole;
}
// Définition du symbole qui correspond au personnage
public void setSymbole(char symbole) {
this.symbole = symbole;
}
// Fonction qui permet de retourner les points de défense d'un personnage
public int getDefense() {
return defense;
}
// Définition des points de défense d'un personnage
public void setDefense(int defense) {
this.defense = defense;
}
// Fonction qui permet de retourner les points d'attaque d'un personnage
public int getPa() {
return pa;
}
// Définition des points d'attaque d'un personnage
public void setPa(int pa) {
this.pa = pa;
}
// Fonction qui permet de retourner les points de vie d'un personnage
public int getPv() {
return pv;
}
// Définition des points de vie d'un personnage
public void setPv(int pv) {
this.pv = pv;
if(pv <= 0){
this.setIsAlive(false);
this.pv = 0;
System.out.println(this.getNom()+" est mort");
MyLogger.getInstance().log(this.getNom()+" est mort");
}
}
// Fonction qui permet de retourner le nom d'un personnage
public String getNom() {
return nom;
}
// Définition du nom du personnage
public void setNom(String nom) {
this.nom = nom;
}
// Permet de pouvoir afficher les caractéristiques d'un personnage dans le terminal
@Override
public String toString() {
return "Personnage{" +
"nom='" + nom + '\'' +
", pv=" + pv +
", pa=" + pa +
", defense=" + defense +
", symbole=" + symbole +
'}';
}
}
// ___________ _________ .__ __ _________ .__ .__
// \_ _____/ ____ __ __ _____ \_ ___ \_____ ___________ ____ |___/ |_ ____ / ___________ ____ ____ |_______ | | ____
// | __)_ / \| | \/ \ / \ \/\__ \ \____ \__ \ _/ ___\| \ ___/ __ \ \_____ \\____ \_/ __ _/ ___\| \__ \ | | _/ __ \
// | | | | | | Y Y \ \ \____/ __ \| |_> / __ \\ \___| || | \ ___/ / | |_> \ ___\ \___| |/ __ \| |_\ ___/
// /_______ |___| |____/|__|_| / \______ (____ | __(____ /\___ |__||__| \___ /_______ | __/ \___ \___ |__(____ |____/\___ >
// \/ \/ \/ \/ \/|__| \/ \/ \/ \/|__| \/ \/ \/ \/
package Enum;
// Création de l'enum CapaciteSpeciale
public enum CapaciteSpeciale {
// Définition des différentes capacité spéciale du jeu
SOIN("Soin", 25, true),
ONE_SHOT("One Shot", 100, false),
MULTI_SHOT("Multi shot", 0, false),
TREMPETTE("Trempette", 0, false ),
GONFLETTE("Gonflette", 25, false );
// Définition des différentes caractéristiques des capacités spéciales
private final String nom; // Nom de la capacité spéciale
private final int effet; // Points à ajouter (soin) ou à infliger (attaque)
private final boolean estSoins; // Vrai si c'est une capacité de soin, faux sinon
// Définition du constructeur
CapaciteSpeciale(String nom, int effet, boolean estSoins) {
this.nom = nom;
this.effet = effet;
this.estSoins = estSoins;
}
// Fonction qui permet de retourner le nom de la capacité spéciale
public String getNom() {
return nom;
}
// Fonction qui permet de retourner les effets de la capacité spéciale
public int getEffet() {
return effet;
}
// Fonction qui permet de retourner si la capacité spéciale permet de soigné ou non
public boolean estSoins() {
return estSoins;
}
}
// ___________ ___________ _____ .__ __
// \_ _____/ ____ __ __ _____ \__ ______.________ ____ / \ ____ ____ | |__ _____ _____/ |_
// | __)_ / \| | \/ \ | | < | \____ \_/ __ \ / \ / \_/ __ _/ ___\| | \\__ \ / \ __\
// | | | | | | Y Y \ | | \___ | |_> \ ___// Y \ ___\ \___| Y \/ __ \| | | |
// /_______ |___| |____/|__|_| / |____| / ____| __/ \___ \____|__ /\___ \___ |___| (____ |___| |__|
// \/ \/ \/ \/ |__| \/ \/ \/ \/ \/ \/ \/
package Enum;
// Création de l'enum TypeMechant
public enum TypeMechant {
// Définition des différents types de méchants du jeu
CATCHEUR ("Catcheur",10,7,3),
GANGSTER ("Gangster",5, 9, 2),
BRUTE("Brute",15, 8, 4),
TIREUR("Tireur",2, 12, 1),
BOSS("BOSS", 17,11,5);
// Définition des différentes caractéristiques du type de méchant
private final int bonusPv; // points de vie de base du type de méchant
private final int bonusPa; // points d'attaque de base du type de méchant
private final int bonusDefense; // défense de base du type de méchant
private final String nom; // nom du type de méchant
// Définition du constructeur
TypeMechant(String nom, int bonusPv, int bonusPa, int bonusDefense) {
this.bonusPv = bonusPv;
this.bonusPa = bonusPa;
this.bonusDefense = bonusDefense;
this.nom = nom;
}
// Fonction qui permet de retourner les points d'attaque du type de méchant
public int getBonusPa() {
return bonusPa;
}
// Fonction qui permet de retourner les points de vie du type de méchant
public int getBonusPv() {
return bonusPv;
}
// Fonction qui permet de retourner les points de défense du type de méchant
public int getBonusDefense() {
return bonusDefense;
}
// Fonction qui permet de retourner le nom du type de méchant
public String getNom() {
return nom;
}
}
//.___ __ _____ _____ __ .__ __________
//| | _____/ |_ ____________/ _________ ____ ____ / _ \ _____/ |_|__| ____ ____\______ \ ___________ __________ ____ ____ _____ ____ ____
//| |/ \ ___/ __ \_ __ \ __\\__ \ _/ ____/ __ \ / /_\ \_/ ___\ __| |/ _ \ / \| ____/ __ \_ __ / ___/ _ \ / \ / \\__ \ / ___\_/ __ \
//| | | | | \ ___/| | \/| | / __ \\ \__\ ___/ / | \ \___| | | ( <_> | | | | \ ___/| | \\___ ( <_> | | | | \/ __ \/ /_/ \ ___/
//|___|___| |__| \___ |__| |__| (____ /\___ \___ > \____|__ /\___ |__| |__|\____/|___| |____| \___ |__| /____ \____/|___| |___| (____ \___ / \___ >
// \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/_____/ \/
package Interfaces;
import Entity.Personnage;
//Création de l'interface ActionPersonnage
public interface ActionPersonnage {
// Appel de la fonction attaquer()
void attaquer(Personnage cible);
// Appel de la fonction utiliserPouvoir()
void utiliserPouvoir(Personnage cible);
}
//.___ _____ /\ _____.__ .__ ___________
//| | / \ )/ _/ ____|__| ____ | |_\__ ______________
//| |/ \ / \ \ __\| |/ ___\| | \| |_/ __ \_ __ \
//| / Y \ | | | / /_/ | Y | |\ ___/| | \/
//|___\____|__ / |__| |__\___ /|___| |____| \___ |__|
// \/ /_____/ \/ \/
import Entity.Context;
import Entity.MyLogger;
import java.io.IOException;
// Création de la classe Main
public class Main {
public static void main(String[] args) throws IOException {
// Message d'accueil
System.out.println("\n*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***\n");
MyLogger.getInstance().log("\n");
MyLogger.getInstance().log("\n*** Bienvenue dans IM'fighTer par DEPINOY Solène et DUBOT Thomas ***\n");
Context context = new Context();
context.CreationJeu();
}
}
\ No newline at end of file
//__________.__ .__ .__ ___________ __
//\_ _____|__| ____ | |__ |__| ___________ \__ _______ ______/ |_
// | __) | _/ ___\| | \| _/ __ \_ __ \ | |_/ __ \ / ___\ __\
// | \ | \ \___| Y | \ ___/| | \/ | |\ ___/ \___ \ | |
// \___ / |__|\___ |___| |__|\___ |__| |____| \___ /____ >|__|
// \/ \/ \/ \/ \/ \/
package Tests;
import Entity.*;
import Enum.CapaciteSpeciale;
import Enum.TypeMechant;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class Test {
//___________ __ ____
//\__ _______ ______/ |_ /_ |
// | |_/ __ \ / ___\ __\ | |
// | |\ ___/ \___ \ | | | |
// |____| \___ /____ >|__| |___|
// \/ \/
@org.junit.jupiter.api.Test
// Ce test s'assure que lorsque le gentil attaque il est en capacité de tuer le méchant
public final void testAttaqueTue() {
// Création d'un gentil
Gentil gentil = new Gentil('*', 50, 7, 50, "Thomas", CapaciteSpeciale.ONE_SHOT);
// Création d'un méchant
Mechant mechant = new Mechant( '!', "Sbire", TypeMechant.GANGSTER);
// Le gentil attaque le méchant
gentil.attaquer(mechant);
if(mechant.getIsAlive()){
// Si le méchant est en vie alors le test est raté
fail("\n ///////// \ntestAttaqueTue raté\n ///////// \n");
}else{
// Si le méchant n'est plus en vie alors le test est réussi
System.out.println("\n /////////\ntestAttaqueTue réussi \n ///////// \n");
}
}
//___________ __ ________
//\__ _______ ______/ |_ \_____ \
// | |_/ __ \ / ___\ __\ / ____/
// | |\ ___/ \___ \ | | / \
// |____| \___ /____ >|__| \_______ \
// \/ \/ \/
@org.junit.jupiter.api.Test
// Ce test vérifie ce qu'il se passe si le gentil meurt avant d'arriver à la fin de la carte
public final void testGentilMeurtAvantFin(){
Context context = new Context();
// Création d'une carte
Carte carte = new Carte("Désert", "Gobie", 0, 4, 5);
// Création du gentil
Gentil gentil = new Gentil('*', 1, 1, 10, "Thomas", CapaciteSpeciale.ONE_SHOT);
// Création des méchants
Mechant catcheur = new Mechant('!', "Catcheur", TypeMechant.CATCHEUR);
Mechant brute = new Mechant('!', "Brute", TypeMechant.BRUTE);
Mechant tireur = new Mechant('!', "Tireur", TypeMechant.TIREUR);
Mechant gangster = new Mechant('!', "Gangster", TypeMechant.GANGSTER);
Mechant boss = new Mechant('$', "Boss", TypeMechant.BOSS);
// Création d'une liste ou on stocke les diférents méchants
List<Mechant> listeMechant = new ArrayList<Mechant>();
listeMechant.add(catcheur);
listeMechant.add(brute);
listeMechant.add(tireur);
listeMechant.add(gangster);
listeMechant.add(boss);
// Création d'un tableau qui représente la map de jeu
Personnage[] tableau = new Personnage[7];
tableau[0] = gentil;
tableau[1] = catcheur;
tableau[2] = brute;
tableau[3] = tireur;
tableau[4] = gangster;
tableau[5] = boss;
tableau[6] = null;
// Création du jeu avec les éléments définis au dessus
Jeu jeu = new Jeu(carte, gentil, listeMechant, tableau);
while(gentil.getIsAlive()){
// Lancement automatique de tour tant que le gentil est en vie
context.LancementTourAutomatique(tableau, gentil, context);
if (tableau[tableau.length - 1] == gentil) {
// Si le gentil arrive à la fin de la map sans être mort alors le test est raté
fail("\n ///////// \ntestGentilMeurtAvantFin raté\n ///////// \n");
}else{
// Si le gentil meurt avant la fin de la map alors le test est réussi
System.out.println("\n ///////// \ntestGentilMeurtAvantFin réussi\n ///////// \n");
}
}
}
//___________ __ ________
//\__ _______ ______/ |_ \_____ \
// | |_/ __ \ / ___\ __\ _(__ <
// | |\ ___/ \___ \ | | / \
// |____| \___ /____ >|__| /______ /
// \/ \/ \/
@org.junit.jupiter.api.Test
// Ce test s'assure que le gentil avance sur la case suivante si il n'y a pas de méchant dessus
public final void testGentilAvanceCaseVide(){
Context context = new Context();
// Création de la carte
Carte carte = new Carte("Désert", "Gobie", 0, 4, 5);
// Création du gentil
Gentil gentil = new Gentil('*', 1, 1, 10, "Thomas", CapaciteSpeciale.ONE_SHOT);
// Création d'un tableau qui représente la map de jeu
Personnage[] tableau = new Personnage[7];
tableau[0] = gentil;
// Lancement automatique de tour tant que le gentil est en vie
context.LancementTourAutomatique(tableau, gentil, context);
if (tableau[1] != gentil) {
// Si après 1 tour la case 1 du tableau n'est pas le gentil alors le test est raté
fail("\n ///////// \ntestGentilAvanceCaseVide raté\n ///////// \n");
}else{
// Si après 1 tour la case 1 du tableau est le gentil alors le test est réussi
System.out.println("\n ///////// \ntestGentilAvanceCaseVide réussi\n ///////// \n");
}
}
//___________ __ _____
//\__ _______ ______/ |_ / | |
// | |_/ __ \ / ___\ __\ / | |_
// | |\ ___/ \___ \ | | / ^ /
// |____| \___ /____ >|__| \____ |
// \/ \/ |__|
@org.junit.jupiter.api.Test
// Ce test s'assure que si le gentil arrive à la fin de la map il gagne
public final void testVictoireGentil(){
Context context = new Context();
// Création de la carte
Carte carte = new Carte("Désert", "Gobie", 0, 4, 5);
// Création du gentil
Gentil gentil = new Gentil('*', 1, 1, 10, "Thomas", CapaciteSpeciale.ONE_SHOT);
// Création d'un tableau qui représente la map de jeu
Personnage[] tableau = new Personnage[7];
tableau[0] = gentil;
while(gentil.getIsAlive()){
// Lancement automatique du tour tant que le gentil est en vie
context.LancementTourAutomatique(tableau, gentil, context);
if (tableau[tableau.length - 1] == gentil) {
// Si la dernière case du tableau est égale au gentil alors le test est réussi
System.out.println("\n ///////// \ntestVictoireGentil réussi\n ///////// \n");
break;
}
}
if(!gentil.getIsAlive()){
// Si le gentil meurt avant d'arriver à la fin du tableau alors le test est raté
fail("\n ///////// \ntestVictoireGentil raté\n ///////// \n");
}
}
//___________ __ .________
//\__ _______ ______/ |_ | ____/
// | |_/ __ \ / ___\ __\ |____ \
// | |\ ___/ \___ \ | | / \
// |____| \___ /____ >|__| /______ /
// \/ \/ \/
@org.junit.jupiter.api.Test
// Ce test s'assure que le gentil ne peut utiliser sa capacité spéciale qu'une seule fois
public final void testCapaciteSpecialeUneFois(){
Context context = new Context();
// Création d'un gentil
Gentil gentil = new Gentil('*', 1, 1, 10, "Thomas", CapaciteSpeciale.TREMPETTE);
// Création d'un méchant
Mechant boss = new Mechant('$', "Boss", TypeMechant.BOSS);
// Utilisation de la capacité spéciale du gentil sur le méchant
gentil.utiliserPouvoir(boss);
if (gentil.getCapaciteSpeciale() != null){
// Si la capacité spéciale du gentil n'est pas égale à "null" alors le test est raté
fail("\n ///////// \ntestCapaciteSpecialeUneFois raté\n ///////// \n");
}else{
// Si la capacité spéciale du gentil est égale à "null" alors le test est réussi
System.out.println("\n ///////// \ntestCapaciteSpecialeUneFois réussi\n ///////// \n");
}
}
}
\ No newline at end of file
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