diff --git a/src/main/java/re/forestier/edu/rpg/Adventurer.java b/src/main/java/re/forestier/edu/rpg/Adventurer.java index 6920cf84cc098d05beb189afe2a07c76edbff5de..b8efe079ec42b512fc51895276e34029fa97ef45 100644 --- a/src/main/java/re/forestier/edu/rpg/Adventurer.java +++ b/src/main/java/re/forestier/edu/rpg/Adventurer.java @@ -1,7 +1,8 @@ package re.forestier.edu.rpg; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; +import java.util.Map; public class Adventurer extends player { @@ -15,37 +16,19 @@ public class Adventurer extends player { @Override protected void levelUp() { super.levelUp(); + final List<Map<String, Integer>> ADVENTURER_ABILITIES = List.of( + Map.of("INT", 1, "DEF", 1, "ATK", 3, "CHA", 2), // Niveau 1 + Map.of("INT", 2, "CHA", 3), // Niveau 2 + Map.of("ATK", 5, "ALC", 1), // Niveau 3 + Map.of("DEF", 3), // Niveau 4 + Map.of("VIS", 1, "DEF", 4) // Niveau 5 + ); + + if (getLevel() <= ADVENTURER_ABILITIES.size()) { + Map<String, Integer> newAbilities = ADVENTURER_ABILITIES.get(getLevel() - 1); + abilities.putAll(newAbilities); // Remplace ou ajoute les stats - HashMap<Integer, HashMap<String, Integer>> adventurerMap = new HashMap<>(); - HashMap<String, Integer> adventurerLevel1 = new HashMap<>(); - adventurerLevel1.put("INT", 1); - adventurerLevel1.put("DEF", 1); - adventurerLevel1.put("ATK", 3); - adventurerLevel1.put("CHA", 2); - adventurerMap.put(1, adventurerLevel1); - - HashMap<String, Integer> adventurerLevel2 = new HashMap<>(); - adventurerLevel2.put("INT", 2); - adventurerLevel2.put("CHA", 3); - adventurerMap.put(2, adventurerLevel2); - - HashMap<String, Integer> adventurerLevel3 = new HashMap<>(); - adventurerLevel3.put("ATK", 5); - adventurerLevel3.put("ALC", 1); - adventurerMap.put(3, adventurerLevel3); - - HashMap<String, Integer> adventurerLevel4 = new HashMap<>(); - adventurerLevel4.put("DEF", 3); - adventurerMap.put(4, adventurerLevel4); - - HashMap<String, Integer> adventurerLevel5 = new HashMap<>(); - adventurerLevel5.put("VIS", 1); - adventurerLevel5.put("DEF", 4); - adventurerMap.put(5, adventurerLevel5); - - - HashMap<String, Integer> newAbilities = adventurerMap.get(getLevel()); - newAbilities.forEach((ability, level) -> abilities.put(ability, newAbilities.get(ability))); + } } @Override diff --git a/src/main/java/re/forestier/edu/rpg/Archer.java b/src/main/java/re/forestier/edu/rpg/Archer.java index 08e6e1f11a7297efff4f6d3b1cdae4488adea136..49809760984f024779ddee804e4dbb692ff3a9d6 100644 --- a/src/main/java/re/forestier/edu/rpg/Archer.java +++ b/src/main/java/re/forestier/edu/rpg/Archer.java @@ -1,7 +1,8 @@ package re.forestier.edu.rpg; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; +import java.util.Map; public class Archer extends player { @@ -13,34 +14,19 @@ public class Archer extends player { @Override protected void levelUp() { super.levelUp(); - HashMap<Integer, HashMap<String, Integer>> archerMap = new HashMap<>(); - HashMap<String, Integer> archerLevel1 = new HashMap<>(); - archerLevel1.put("INT", 1); - archerLevel1.put("ATK", 3); - archerLevel1.put("CHA", 1); - archerLevel1.put("VIS", 3); - archerMap.put(1, archerLevel1); - - HashMap<String, Integer> archerLevel2 = new HashMap<>(); - archerLevel2.put("DEF", 1); - archerLevel2.put("CHA", 2); - archerMap.put(2, archerLevel2); - - HashMap<String, Integer> archerLevel3 = new HashMap<>(); - archerLevel3.put("ATK", 3); - archerMap.put(3, archerLevel3); - - HashMap<String, Integer> archerLevel4 = new HashMap<>(); - archerLevel4.put("DEF", 2); - archerMap.put(4, archerLevel4); - - HashMap<String, Integer> archerLevel5 = new HashMap<>(); - archerLevel5.put("ATK", 4); - archerMap.put(5, archerLevel5); - - HashMap<String, Integer> newAbilities = archerMap.get(getLevel()); - newAbilities.forEach((ability, level) -> abilities.put(ability, newAbilities.get(ability))); + final List<Map<String, Integer>> ARCHER_ABILITIES = List.of( + Map.of("INT", 1, "ATK", 3, "CHA", 1, "VIS", 3), // Niveau 1 + Map.of("DEF", 1, "CHA", 2), // Niveau 2 + Map.of("ATK", 3), // Niveau 3 + Map.of("DEF", 2), // Niveau 4 + Map.of("ATK", 4) // Niveau 5 + ); + + if (level <= ARCHER_ABILITIES.size()) { + Map<String, Integer> newAbilities = ARCHER_ABILITIES.get(level - 1); + abilities.putAll(newAbilities); // Remplace ou ajoute les stats + } } @Override diff --git a/src/main/java/re/forestier/edu/rpg/Dwarf.java b/src/main/java/re/forestier/edu/rpg/Dwarf.java index 2e867ba13fe474b2d07b49af405ce9a06e2c25f7..cd5fd026760d8dd137fdf0e5f7062fa1f2c781ae 100644 --- a/src/main/java/re/forestier/edu/rpg/Dwarf.java +++ b/src/main/java/re/forestier/edu/rpg/Dwarf.java @@ -1,7 +1,8 @@ package re.forestier.edu.rpg; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; +import java.util.Map; public class Dwarf extends player{ @@ -13,33 +14,19 @@ public class Dwarf extends player{ @Override protected void levelUp() { super.levelUp(); - HashMap<Integer, HashMap<String, Integer>> dwarf = new HashMap<>(); - HashMap<String, Integer> dwarfLevel1 = new HashMap<>(); - dwarfLevel1.put("ALC", 4); - dwarfLevel1.put("INT", 1); - dwarfLevel1.put("ATK", 3); - dwarf.put(1, dwarfLevel1); - - HashMap<String, Integer> dwarfLevel2 = new HashMap<>(); - dwarfLevel2.put("DEF", 1); - dwarfLevel2.put("ALC", 5); - dwarf.put(2, dwarfLevel2); - - HashMap<String, Integer> dwarfLevel3 = new HashMap<>(); - dwarfLevel3.put("ATK", 4); - dwarf.put(3, dwarfLevel3); - - HashMap<String, Integer> dwarfLevel4 = new HashMap<>(); - dwarfLevel4.put("DEF", 2); - dwarf.put(4, dwarfLevel4); - - HashMap<String, Integer> dwarfLevel5 = new HashMap<>(); - dwarfLevel5.put("CHA", 1); - dwarf.put(5, dwarfLevel5); - - HashMap<String, Integer> newAbilities = dwarf.get(getLevel()); - newAbilities.forEach((ability, level) -> abilities.put(ability, newAbilities.get(ability))); + final List<Map<String, Integer>> DWARF_ABILITIES = List.of( + Map.of("ALC", 4, "INT", 1, "ATK", 3), // Niveau 1 + Map.of("DEF", 1, "ALC", 5), // Niveau 2 + Map.of("ATK", 4), // Niveau 3 + Map.of("DEF", 2), // Niveau 4 + Map.of("CHA", 1) // Niveau 5 + ); + + if (level <= DWARF_ABILITIES.size()) { + Map<String, Integer> newAbilities = DWARF_ABILITIES.get(level - 1); + abilities.putAll(newAbilities); // Remplace ou ajoute les stats + } } diff --git a/src/main/java/re/forestier/edu/rpg/player.java b/src/main/java/re/forestier/edu/rpg/player.java index 11026eff2b52cbf497b01c36e52c921ba513ffb9..205b00c7b7d3e3a4cd85bf36c4c105bd4331cabb 100644 --- a/src/main/java/re/forestier/edu/rpg/player.java +++ b/src/main/java/re/forestier/edu/rpg/player.java @@ -54,21 +54,21 @@ public abstract class player { while (xp >= lvlXp) { level++; lvlXp = ((level) * 10 + Math.floorDiv(((level + 1) * (lvlXp)), 4)); + // Add/upgrade abilities to player + levelUp(); // Player leveled-up! // Give a random object Random random = new Random(); inventory.add(objectList[random.nextInt(objectList.length)]); } - // Add/upgrade abilities to player - levelUp(); + } protected void majFinDeTour() { if(currenthealthpoints == 0) { System.out.println("Le joueur est KO !"); - return; } //The rest of the method is implemented in the subclasses } diff --git a/src/test/java/re/forestier/edu/UnitTests.java b/src/test/java/re/forestier/edu/UnitTests.java index c8b7393495540d31181bf9face374a1356e77386..953eb34f31e03f241ac26e0111604fafef47db7d 100644 --- a/src/test/java/re/forestier/edu/UnitTests.java +++ b/src/test/java/re/forestier/edu/UnitTests.java @@ -177,4 +177,12 @@ public class UnitTests { assertThat(player.getXp(), is(2)); } + @Test + @DisplayName("Test multiple level up") + void testMultipleLevelUp() { + Dwarf player = new Dwarf("Florian", "Gnognak le Barbare", 200, new ArrayList<>()); + player.addXp(200); + assertThat(player.level, is(5)); + assertThat(player.abilities.get("ATK"), is(4)); + } }