diff --git a/src/characters/Combattente.java b/src/characters/Combattente.java index dc57b72..c574628 100644 --- a/src/characters/Combattente.java +++ b/src/characters/Combattente.java @@ -3,9 +3,8 @@ /** * Classe astratta da cui derivano {@link Soldato} e {@link Mercenario}. */ -public abstract class Combattente extends Personaggio implements IAttaccante, IDifesa { +public abstract class Combattente extends Personaggio implements IAttaccante { private boolean attaccoCaricato = false; - private boolean isDef = false; public Combattente(int puntiVitaTotali, int attacco, int difesa, int velocita, int puntiStaminaTotali, String nome, char sesso) { super(puntiVitaTotali, attacco, difesa, velocita, puntiStaminaTotali, nome, sesso); @@ -15,7 +14,6 @@ public Combattente(int puntiVitaTotali, int attacco, int difesa, int velocita, i * Implementazione di {@link IAttaccante#attacca(Personaggio)} */ public void attacca(Personaggio nemico) { - //return -((this.getAttacco() - nemico.getDifesa()) * moltAttacco); int danno = getAttacco(); // Verifica se nel turno precedente è stato usato caricaAttacco() e in caso affermativo raddoppia il danno if (attaccoCaricato) { @@ -38,8 +36,4 @@ public void caricaAttacco() { public void contrattacca(Personaggio nemico, int danno) { nemico.riceviColpo(this, danno, false); } - - public void preparaDifesa() { - this.isDef = true; - } } diff --git a/src/characters/Personaggio.java b/src/characters/Personaggio.java index b1738f7..8e26f30 100644 --- a/src/characters/Personaggio.java +++ b/src/characters/Personaggio.java @@ -2,8 +2,6 @@ import ittbuonarroti.rpggame.engine.RNG; -import java.util.concurrent.ThreadLocalRandom; - /** * Classe astratta che rappresenta un Personaggio generico. * Contiene tutte le statistiche e i metodi di base. @@ -21,9 +19,6 @@ public abstract class Personaggio { private String nome; private char sesso; - private boolean isDef = false; - private double damageReduce = 1; //Va sostituito a seconda del tipo di personaggio. - /** * Metodo Costruttore
* I parametri puntiVitaTotali; attacco; difesa; velocita; puntiStaminaTotali sono randomizzati dal metodo @@ -44,12 +39,11 @@ public Personaggio(int puntiVitaTotali, int attacco, int difesa, int velocita, i * @param avv Personaggio avversario da cui si sta cercando di scappare * @return 1 se il personaggio riesce a scappare; 0 altrimenti */ - public int ritirata(Personaggio avv) { - if (50 + (50 - avv.getVelocita()) < RNG.random(1, 101)) { - return 1; - } else { - return 0; - } + public boolean ritirata(Personaggio avv) { + if (50 + (50 - avv.getVelocita()) < RNG.random(0, 100)) + return true; + else + return false; } /** @@ -80,7 +74,7 @@ public void riceviColpo (Personaggio nemico, int danno, boolean contrattaccabile boolean contrattaccoRiuscito = false; if (this instanceof IAttaccante && contrattaccabile) { // se quindi ha a disposizione il metodo contrattacca() // Genera un numero a random tra 0 e 100 - int random = ThreadLocalRandom.current().nextInt(0, 101); + int random = RNG.random(0, 100); // Se il numero generato è compreso tra 0 e la velocità del personaggio divisa per 1.5, allora contrattacca if (random >= 0 && random <= velocita / 1.5) { ((IAttaccante) this).contrattacca(nemico, danno); @@ -94,10 +88,6 @@ public void riceviColpo (Personaggio nemico, int danno, boolean contrattaccabile if (danno <= 0) // il danno deve essere sempre almeno di 1 danno = 1; - //Riduzione dei danni in caso di Guard - if (isDef) - danno /= damageReduce; - this.modificaPuntiVita(Math.negateExact(danno)); } } @@ -106,12 +96,8 @@ public void setPuntiStamina (int puntiStamina) { this.puntiStamina = puntiStamina; } - public void setGuard(boolean input) { - this.isDef = input; - } - - /** Metodi Getter **/ + /* Metodi Getter */ public int getPuntiVitaTotali () { return puntiVitaTotali; @@ -168,34 +154,34 @@ private void assegnaStatistiche(int[] stats) { // 1 = +; 0 = - //PV - if (RNG.random(0, 2) == 1) + if (RNG.lanciaMoneta() == true) puntiVitaTotali = stats[0] + RNG.random(0, 5); else puntiVitaTotali = stats[0] - RNG.random(0, 5); //ATTACCO - if (RNG.random(0, 2) == 1) + if (RNG.lanciaMoneta() == true) attacco = stats[1] + RNG.random(0, 5); else attacco = stats[1] - RNG.random(0, 5); //DIFESA - if (RNG.random(0, 2) == 1) + if (RNG.lanciaMoneta() == true) difesa = stats[2] + RNG.random(0, 5); else difesa = stats[2] - RNG.random(0, 5); //VELOCITA' - if (RNG.random(0, 2) == 1) + if (RNG.lanciaMoneta() == true) velocita = stats[3] + RNG.random(0, 5); else velocita = stats[3] - RNG.random(0, 5); //PS - if (RNG.random(0, 2) == 1) - puntiStaminaTotali = stats[4] + RNG.random(0, 3); + if (RNG.lanciaMoneta() == true) + puntiStaminaTotali = stats[4] + RNG.random(0, 2); else - puntiStaminaTotali = stats[4] - RNG.random(0, 3); + puntiStaminaTotali = stats[4] - RNG.random(0, 2); puntiStamina = puntiStaminaTotali; puntiVita = puntiVitaTotali; diff --git a/src/characters/Soldato.java b/src/characters/Soldato.java index 921719b..6866064 100644 --- a/src/characters/Soldato.java +++ b/src/characters/Soldato.java @@ -4,7 +4,7 @@ * Rappresenta un'istanza del personaggio Soldato. */ public class Soldato extends Combattente implements IDifesa { - private boolean isDef = false; //Danni raddoppiati + private boolean isDef = false; // indica se il personaggio ha usato il guard public Soldato(String nome, char sesso) { super(180, 55, 35, 20, 25, nome, sesso); @@ -15,15 +15,14 @@ public Soldato(String nome, char sesso) { */ public void modificaPuntiVita(int valore) { if (this.isDef && valore < 0) { - valore -= valore * 50 / 100; + valore /= 2; isDef = false; } super.modificaPuntiVita(valore); } /** - * Il personaggio perde un turno per poi subire danni dimezzati nel turno successivo - * TODO: Far perdere un turno + * Implementazione di {@link IDifesa#preparaDifesa()} */ @Override public void preparaDifesa() { diff --git a/src/engine/RNG.java b/src/engine/RNG.java index 0799477..cd113f8 100644 --- a/src/engine/RNG.java +++ b/src/engine/RNG.java @@ -10,12 +10,12 @@ public class RNG { /** * Genera un numero random da un valore di inizio e di quanti numeri a partire da quest'ultimo aggiungere al range dell'RNG * - * @param inizio il numero più basso per la generazione casuale - * @param numeri il numero dei numeri per il range - * @return + * @param start il numero più basso per la generazione casuale (incluso) + * @param end Il limite massimo per la generazione (incluso) + * @return Il numero generato */ - public static int random(int inizio, int numeri) { - return ThreadLocalRandom.current().nextInt(inizio, numeri); + public static int random(int start, int end) { + return ThreadLocalRandom.current().nextInt(start, end + 1); } /** @@ -23,7 +23,7 @@ public static int random(int inizio, int numeri) { * * @return true se testa, false se croce */ - public static boolean flipCoin() { + public static boolean lanciaMoneta() { return ThreadLocalRandom.current().nextInt(0, 2) == 0; } }