Commit 07007543 authored by Guillaume Dewisme's avatar Guillaume Dewisme
parents 292ddec0 6cae427b
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
COO/.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_22" default="true" project-jdk-name="openjdk-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="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
[2024-12-03T09:17:07.884981500] Début de l'aventure de h
[2024-12-03T09:17:07.906537700] h rencontre un Brigand
[2024-12-03T09:17:21.500167] h attaque Brigand
[2024-12-03T09:17:21.512164700] Brigand attaque h
[2024-12-03T09:17:23.712354200] h attaque Brigand
[2024-12-03T09:17:23.713356400] Brigand attaque h
[2024-12-03T09:17:24.664972400] h attaque Brigand
[2024-12-03T09:17:24.665972400] Brigand attaque h
[2024-12-03T09:17:25.869365600] h attaque Brigand
[2024-12-03T09:17:25.869885200] Brigand attaque h
[2024-12-03T09:17:26.435083] h attaque Brigand
[2024-12-03T09:17:26.436082400] h a vaincu Brigand
[2024-12-03T09:17:26.441081700] h gagne 50 XP
[2024-12-03T09:17:28.848642800] h rencontre un Brigand
[2024-12-03T09:17:29.959866400] h attaque Brigand
[2024-12-03T09:17:29.960866500] Brigand attaque h
[2024-12-03T09:17:30.439687200] h attaque Brigand
[2024-12-03T09:17:30.440686600] Brigand attaque h
[2024-12-03T09:17:30.896292400] h attaque Brigand
[2024-12-03T09:17:30.897292100] Brigand attaque h
[2024-12-03T09:17:31.383727800] h attaque Brigand
[2024-12-03T09:17:31.386729400] Brigand attaque h
[2024-12-03T09:19:22.975976800] h attaque Brigand
[2024-12-03T09:19:22.975976800] h a vaincu Brigand
[2024-12-03T09:19:22.976975700] h gagne 50 XP
[2024-12-03T09:19:22.976975700] h monte au niveau 2
[2024-12-03T09:19:22.978978400] h a obtenu un objet : Potion de Puissance
[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
[2024-12-06T10:08:39.172213900] TestHero attaque TestEnemy
[2024-12-06T10:08:39.196216600] TestHero utilise sa capacité spéciale
[2024-12-06T10:09:02.614444600] TestHero attaque TestEnemy
[2024-12-06T10:09:02.627445300] TestHero utilise sa capacité spéciale
[2024-12-06T10:09:12.567772900] Début de l'aventure de seum
[2024-12-06T10:09:12.567772900] seum rencontre un Gangster
[2024-12-06T10:09:18.833762100] seum attaque Gangster
[2024-12-06T10:09:18.834764500] Gangster attaque seum
[2024-12-06T10:09:22.051037700] seum attaque Gangster
[2024-12-06T10:09:22.051037700] Gangster attaque seum
[2024-12-06T10:09:22.890275500] seum attaque Gangster
[2024-12-06T10:09:22.890275500] Gangster attaque seum
[2024-12-06T10:09:23.489240100] seum attaque Gangster
[2024-12-06T10:09:23.490256600] Gangster attaque seum
[2024-12-06T10:09:24.085772300] seum attaque Gangster
[2024-12-06T10:09:24.086775400] seum a vaincu Gangster
[2024-12-06T10:09:24.088773800] seum gagne 50 XP
[2024-12-06T10:09:24.089774700] seum a obtenu un objet : Potion de Santé
[2024-12-06T10:09:25.110908200] seum a quitté le jeu
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>COO</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
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 org.example.abilities.DoubleAttack;
import org.example.abilities.SpecialAbility;
import org.example.items.Item;
import java.util.Random;
import java.util.Scanner;
public class BeatThemAllGame {
/**
* Affichage du titre en 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();
}
/**
* Affichage du message de mort
*/
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é !");
}
/**
* Sélection du héros
* @param scanner Object Scanner qui permet de lire l'entrée standard
* @return Retourne le héros sélectionné
*/
public static Hero chooseHero(Scanner scanner) {
System.out.println("Choisissez votre héros :");
System.out.println("1. Guerrier (Double Attaque)");
System.out.println("2. Mage (Réduit les PV des ennemis de moitié)");
System.out.println("3. Voleur (Tentative de vol d'objets)");
System.out.println("4. Archer (Attaque à distance avant le combat)");
System.out.println("5. Berserker (Plus il est blessé, plus il frappe fort)");
System.out.print("Votre choix : ");
int choice = scanner.nextInt();
scanner.nextLine(); // Consommer le retour à la ligne
System.out.print("Entrez le nom de votre héros : ");
String name = scanner.nextLine();
switch (choice) {
case 1:
return new Hero(name, 80, 20, 10, new DoubleAttack());
case 2:
return new Hero(name, 60, 15, 5, new HalveEnemyHP());
case 3:
return new Hero(name, 70, 18, 7, new StealItem());
case 4:
return new Hero(name, 75, 17, 6, new PreemptiveStrike());
case 5:
return new Hero(name, 100, 22, 5, new Rage());
default:
System.out.println("Choix invalide, Guerrier sélectionné par défaut.");
return new Hero(name, 150, 20, 10, new DoubleAttack());
}
}
// Capacités spéciales supplémentaires (a voir si on garde)
public static class PreemptiveStrike implements SpecialAbility {
@Override
public void activate(Character user, Character target) {
int damage = user.attackPower;
System.out.println(user.name + " tire une flèche sur " + target.name + " avant le combat !");
target.takeDamage(damage);
}
}
public static class Rage implements SpecialAbility {
@Override
public void activate(Character user, Character target) {
int rageBonus = (user.maxHP - user.currentHP) / 10;
user.attackPower += rageBonus;
System.out.println(user.name + " entre en rage, augmentant son attaque de " + rageBonus + " points !");
}
}
// ennemi aléatoire
public static Enemy generateRandomEnemy() {
int enemyType = new Random().nextInt(4);
switch (enemyType) {
case 0:
return new Enemy("Brigand", 80, 15, 5, null);
case 1:
return new Enemy("Sorcier", 90, 10, 5, new WeaknessSpell());
case 2:
return new Enemy("Gangster", 70, 12, 4, null);
case 3:
return new Enemy("Catcheur", 150, 10, 8, null);
default:
return new Enemy("Brigand", 80, 15, 5, null);
}
}
// pareil pour uin objet
public static Item getRandomItem() {
int itemType = new Random().nextInt(2);
switch (itemType) {
case 0:
return new HealthPotion();
case 1:
return new AttackBoost();
default:
return new HealthPotion();
}
}
public static class HalveEnemyHP implements SpecialAbility {
@Override
public void activate(Character user, Character target) {
System.out.println(user.name + " réduit de moitié les PV de " + target.name + " !");
target.currentHP /= 2;
}
}
public static class StealItem implements SpecialAbility {
@Override
public void activate(Character user, Character target) {
System.out.println(user.name + " tente de voler un objet à " + target.name + " !");
// Simplification : L'ennemi n'a pas d'objets à voler
System.out.println("Mais " + target.name + " n'a rien à voler !");
}
}
// pouvoir des ennemis (on pourra en ajouter ou en enelver)
public static class WeaknessSpell implements SpecialAbility {
@Override
public void activate(Character user, Character target) {
System.out.println(user.name + " lance un sort de faiblesse sur " + target.name + " !");
target.attackPower = Math.max(target.attackPower - 5, 0);
System.out.println(target.name + " voit son attaque réduite à " + target.attackPower + " !");
}
}
public static class HealthPotion implements Item {
@Override
public void applyEffect(Hero hero) {
int healAmount = 50;
hero.currentHP = Math.min(hero.currentHP + healAmount, hero.maxHP);
System.out.println("Vous récupérez " + healAmount + " PV. (PV actuels : " + hero.currentHP + ")");
}
@Override
public String getName() {
return "Potion de Santé";
}
}
public static class AttackBoost implements Item {
@Override
public void applyEffect(Hero hero) {
int boostAmount = 5;
hero.attackPower += boostAmount;
System.out.println("Votre attaque augmente de " + boostAmount + " points ! (Attaque actuelle : " + hero.attackPower + ")");
}
@Override
public String getName() {
return "Potion de Puissance";
}
}
}
package org.example;
import org.example.abilities.SpecialAbility;
// on pourra la modifier par la suite si des éléments ne conviennent pas
public abstract class Character {
protected String name;
protected int maxHP;
protected int currentHP;
protected int attackPower;
protected int defense;
protected SpecialAbility specialAbility;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMaxHP() {
return maxHP;
}
public void setMaxHP(int maxHP) {
this.maxHP = maxHP;
}
public int getCurrentHP() {
return currentHP;
}
public void setCurrentHP(int currentHP) {
this.currentHP = currentHP;
}
public int getAttackPower() {
return attackPower;
}
public void setAttackPower(int attackPower) {
this.attackPower = attackPower;
}
public int getDefense() {
return defense;
}
public void setDefense(int defense) {
this.defense = defense;
}
public Character(String name, int maxHP, int attackPower, int defense) {
this.name = name;
this.maxHP = maxHP;
this.currentHP = maxHP;
this.attackPower = attackPower;
this.defense = defense;
}
public boolean isAlive() {
return currentHP > 0;
}
public void takeDamage(int damage) {
int actualDamage = Math.max((int)(damage * (1 - Math.min(0.2 * defense, 0.8))), 0);
currentHP = Math.max(currentHP - actualDamage, 0);
System.out.println(name + " subit " + actualDamage + " dégâts. (PV restants : " + currentHP + ")");
}
public abstract void attack(Character target);
public void useSpecialAbility(Character target) {
if (specialAbility != null) {
specialAbility.activate(this, target);
}
}
}
package org.example;
import org.example.abilities.SpecialAbility;
public class Enemy extends Character {
public Enemy(String name, int maxHP, int attackPower, int defense, SpecialAbility specialAbility) {
super(name, maxHP, attackPower, defense);
this.specialAbility = specialAbility;
}
@Override
public void attack(Character target) {
System.out.println(name + " attaque " + target.name + " !");
Logger.getInstance().log(name + " attaque " + target.name);
target.takeDamage(attackPower);
}
}
package org.example;
import org.example.abilities.SpecialAbility;
import org.example.items.Item;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
// Classe pour le héros
public class Hero extends Character {
boolean specialUsed = false;
private List<Item> inventory = new ArrayList<>();
private int experience = 0;
private int level = 1;
public Hero(String name, int maxHP, int attackPower, int defense, SpecialAbility specialAbility) {
super(name, maxHP, attackPower, defense);
this.specialAbility = specialAbility;
}
@Override
public void attack(Character target) {
System.out.println(name + " attaque " + target.name + " !");
Logger.getInstance().log(name + " attaque " + target.name);
Random random = new Random();
int iterations = random.nextInt(5) + 1;
for(int i = 0; i<iterations; i++) {
target.takeDamage(attackPower);
}
}
public void useSpecialAbility(Character target) {
if (!specialUsed) {
specialAbility.activate(this, target);
specialUsed = true;
Logger.getInstance().log(name + " utilise sa capacité spéciale");
} else {
System.out.println("Capacité spéciale déjà utilisée !");
}
}
public void resetSpecialAbility() {
specialUsed = false;
}
public void addItem(Item item) {
inventory.add(item);
System.out.println(item.getName() + " a été ajouté à votre inventaire.");
Logger.getInstance().log(name + " a obtenu un objet : " + item.getName());
}
public void useItem() {
if (inventory.isEmpty()) {
System.out.println("Votre inventaire est vide !");
return;
}
System.out.println("Inventaire :");
for (int i = 0; i < inventory.size(); i++) {
System.out.println((i + 1) + ". " + inventory.get(i).getName());
}
System.out.print("Choisissez un objet à utiliser : ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
if (choice > 0 && choice <= inventory.size()) {
Item item = inventory.get(choice - 1);
item.applyEffect(this);
inventory.remove(item);
Logger.getInstance().log(name + " utilise un objet : " + item.getName());
} else {
System.out.println("Choix invalide.");
}
}
public void gainExperience(int xp) {
experience += xp;
System.out.println(name + " gagne " + xp + " points d'expérience.");
Logger.getInstance().log(name + " gagne " + xp + " XP");
if (experience >= level * 100) {
levelUp();
}
}
private void levelUp() {
level++;
experience = 0;
maxHP += 20;
attackPower += 5;
defense += 2;
currentHP = maxHP;
System.out.println(name + " passe au niveau " + level + " !");
Logger.getInstance().log(name + " monte au niveau " + level);
}
}
package org.example;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
public class Logger {
private static Logger instance;
private FileWriter writer;
private Logger() {
try {
writer = new FileWriter("game_log.txt", true);
} catch (IOException e) {
System.out.println("Erreur lors de l'initialisation du logger : " + e.getMessage());
}
}
public static Logger getInstance() {
if (instance == null) {
instance = new Logger();
}
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());
}
}
}
// Guillaume DEWISME & Axel ELIAS - FISA TI 2027
package org.example;
import org.example.items.Item;
import java.util.Random;
import java.util.Scanner;
import static org.example.BeatThemAllGame.chooseHero;
import static org.example.BeatThemAllGame.generateRandomEnemy;
import static org.example.BeatThemAllGame.getRandomItem;
public class Main {
public static void main(String[] args) {
Test.runTests();
Scanner scanner = new Scanner(System.in);
BeatThemAllGame.displayTitle();
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()) {
BeatThemAllGame.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(2) == 1) {
Item foundItem = getRandomItem();
System.out.println("Vous trouvez un objet sur l'ennemi !");
hero.addItem(foundItem);
}
// Demander au joueur si il veut continuer
System.out.print("\nVoulez-vous continuer ? (oui/non) : ");
String choice;
while (true) {
choice = scanner.nextLine().trim().toLowerCase(); // On normalise la saisie
// Vérifie si la saisie est valide
if (choice.equals("oui") || choice.equals("o")) {
break; // Quitte la boucle si la saisie est valide
} else if (choice.equals("non") || choice.equals("n")) {
gameRunning = false;
System.out.println("Merci d'avoir joué !");
Logger.getInstance().log(hero.name + " a quitté le jeu");
break;
} else {
System.out.println("Saisie invalide, veuillez entrer 'oui', 'o', 'non' ou 'n' :");
}
}
}
}
}
\ No newline at end of file
package org.example;
import java.util.*;
public class Map {
protected String nom;
protected ArrayList<String> lieu;
protected int debut;
protected int fin;
protected int longueur;
protected ArrayList<Enemy> listeEnnemisPossibles;
protected ArrayList<Enemy> listeEnnemis;
public Map(String nom, ArrayList<String> lieu, ArrayList<Enemy> enemyList) {
this.nom = nom;
this.lieu = lieu;
this.debut = 0;
this.fin = lieu.size()-1;
this.longueur = lieu.size();
this.listeEnnemisPossibles = enemyList;
this.listeEnnemis = null;
}
public void initialiser(){
ArrayList<Enemy> listeEnnemis = new ArrayList<>() ;
listeEnnemis.add(null);
Random random = new Random();
for (int i = 0; i < this.longueur-2; i++) {
int ajoutEnnemi = random.nextInt(3);
if (ajoutEnnemi ==0){
listeEnnemis.add(null);
}
else {
int choixEnnemi = random.nextInt(this.listeEnnemisPossibles.size());
listeEnnemis.add(this.listeEnnemisPossibles.get(choixEnnemi));
}
}
int choixEnnemi = random.nextInt(this.listeEnnemisPossibles.size());
Enemy boss = this.listeEnnemisPossibles.get(choixEnnemi);
boss.setAttackPower(boss.getAttackPower() * 2);
boss.setMaxHP(boss.getMaxHP()*2);
boss.setCurrentHP(boss.getMaxHP());
listeEnnemis.add(boss);
this.listeEnnemis = listeEnnemis;
}
}
package org.example;
import org.example.BeatThemAllGame.HealthPotion;
import org.example.abilities.DoubleAttack;
import org.example.items.Item;
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.";
}
}
package org.example.abilities;
import org.example.Character;
// Capacités spéciales des héros
public class DoubleAttack implements SpecialAbility {
@Override
public void activate(org.example.Character user, Character target) {
int damage = user.attackPower * 2;
System.out.println(user.name + " utilise Double Attaque !");
target.takeDamage(damage);
}
}
\ No newline at end of file
package org.example.abilities;
import org.example.Character;
// Interface pour les capacités spéciales
public interface SpecialAbility {
void activate(org.example.Character user, Character target);
}
package org.example.items;
import org.example.Hero;
public interface Item {
void applyEffect(Hero hero);
String getName();
}
......@@ -9,4 +9,6 @@ package org.example;
System.out.println(user.name + " utilise Double Attaque !");
target.takeDamage(damage);
}
}
\ No newline at end of file
}
//
\ 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