diff --git a/src/main/java/bitFight/Action.java b/src/main/java/bitFight/Action.java index 3dbfbace10f235714fec2bda4108bb0225dab94e..5110614edefe2a3f51394f5255f7f060c7026f00 100644 --- a/src/main/java/bitFight/Action.java +++ b/src/main/java/bitFight/Action.java @@ -1,5 +1,8 @@ package bitFight; + public interface Action { + public ActionType getActionType(); public String getAction(); + public String getName(); } diff --git a/src/main/java/bitFight/ActionType.java b/src/main/java/bitFight/ActionType.java new file mode 100644 index 0000000000000000000000000000000000000000..45b06eb375f11a57ec08abc008516d79208e7722 --- /dev/null +++ b/src/main/java/bitFight/ActionType.java @@ -0,0 +1,6 @@ +package bitFight; + +public enum ActionType { + DEFENSE, + ATTACK; +} diff --git a/src/main/java/bitFight/Attack.java b/src/main/java/bitFight/Attack.java index d551dfd321d51145a2407649f9350d3b1754da91..1d881f8ce3256af0220357eba67e2e20c3f0733a 100644 --- a/src/main/java/bitFight/Attack.java +++ b/src/main/java/bitFight/Attack.java @@ -43,4 +43,8 @@ public enum Attack implements Action { public static boolean attackInTime(LocalDateTime timeBeforeAttack, int attackTime) { return (Duration.between(timeBeforeAttack, LocalDateTime.now()).toSeconds() > attackTime); } + + public ActionType getActionType(){ + return ActionType.ATTACK; + } } \ No newline at end of file diff --git a/src/main/java/bitFight/Defense.java b/src/main/java/bitFight/Defense.java index 659643dc72ccf9adf92b0e7675ffb1eda3092696..73dbcf3c1cd66ff43944bdf10894a7fe1cff128f 100644 --- a/src/main/java/bitFight/Defense.java +++ b/src/main/java/bitFight/Defense.java @@ -24,4 +24,8 @@ public enum Defense implements Action { public String getAction() { return "Defense"; } + + public ActionType getActionType(){ + return ActionType.DEFENSE; + } } diff --git a/src/main/java/bitFight/Level.java b/src/main/java/bitFight/Level.java index 97abb664a2bc11af16253b20a2ef2ec179b2723d..e8a6cc868c11f15ccb478a6064f9db2a156e7db2 100644 --- a/src/main/java/bitFight/Level.java +++ b/src/main/java/bitFight/Level.java @@ -175,7 +175,7 @@ public class Level{ if(defense.getHeight() == attack.getHeight()){ character.currentEnergy += 60; if(character.currentEnergy > character.maxEnergy) character.currentEnergy = character.maxEnergy; - System.out.println("The attack is blocked! 60 energy is gained"); + System.out.println("The " + attack.getName() + " is blocked! 60 energy is gained"); } else { character.currentEnergy += 30; character.currentHealth -= attack.getDamage(); diff --git a/src/main/java/bitFight/Main.java b/src/main/java/bitFight/Main.java index 5271d2340a908b7f1baba108d7ff6f87619fcb2a..9f3da34cbad933b8e7617062fd9171bf5adbf66d 100644 --- a/src/main/java/bitFight/Main.java +++ b/src/main/java/bitFight/Main.java @@ -52,10 +52,13 @@ class Main { Display.goToUserInput(); - // Récupère le nom de cahque attaque dans une ArrayList + ArrayList<Action> actionList = new ArrayList<>(); + for (Attack a : Attack.values()) actionList.add(a); + for (Defense d : Defense.values()) actionList.add(d); + + // Récupère le nom de chaque action dans une ArrayList ArrayList<String> actionNames = new ArrayList<>(); - for (Attack a : Attack.values()) actionNames.add(a.getName()); - for (Defense d : Defense.values()) actionNames.add(d.getName()); + for (Action a : actionList) actionNames.add(a.getName()); BufferedReader in= new BufferedReader( new InputStreamReader(System.in)); @@ -83,6 +86,7 @@ class Main { // Boucle tant que le joueur n'a pas taper de nom d'une attaque valide ou tape trop tard ou tape q while ((!actionNames.contains(input.getInput()) || !Attack.attackInTime(timeBeforeAttack, attackTime)) && !input.getInput().equals("q")) { + //Si le joueur est trop lent, l'ennemi fait une attaque aléatoire if(!Attack.attackInTime(timeBeforeAttack, attackTime)){ Display.clearDialogBox(); @@ -101,8 +105,18 @@ class Main { if(!player.isExhausted() && !input.getInput().equals("q") ){ - Attack attack = Attack.valueOf(actionNames.get(actionNames.indexOf(input.getInput())).toUpperCase()); - level.playerHasEnergy(attack); + ActionType type = null; + for(Action a : actionList) if(a.getName().equals(input.getInput())) type = a.getActionType(); + if(type == ActionType.ATTACK) { + Attack attack = (Attack) actionList.get(actionList.indexOf(input.getInput())); + level.playerHasEnergy(attack); + } else + if(type == ActionType.DEFENSE) { + Defense defense = (Defense) actionList.get(actionList.indexOf(input.getInput())); + Attack randomEnemyAttack = Attack.values()[(int) rand.nextDouble()*Attack.values().length]; + level.defends(player, defense, randomEnemyAttack); + } + } else {} //TODO ajouter display trop fatigué