Skip to content
This repository has been archived by the owner on Feb 1, 2018. It is now read-only.

Commit

Permalink
Fixed wrong implementation of IDifesa in Personaggio/Combattente
Browse files Browse the repository at this point in the history
Plus improved usage of RNG methods
  • Loading branch information
Fs00 committed Jan 25, 2018
1 parent 8904d44 commit 34b9276
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 45 deletions.
8 changes: 1 addition & 7 deletions src/characters/Combattente.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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) {
Expand All @@ -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;
}
}
42 changes: 14 additions & 28 deletions src/characters/Personaggio.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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<br>
* I parametri puntiVitaTotali; attacco; difesa; velocita; puntiStaminaTotali sono randomizzati dal metodo
Expand All @@ -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;
}

/**
Expand Down Expand Up @@ -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);
Expand All @@ -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));
}
}
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
7 changes: 3 additions & 4 deletions src/characters/Soldato.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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() {
Expand Down
12 changes: 6 additions & 6 deletions src/engine/RNG.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@ 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);
}

/**
* Lancio della moneta
*
* @return true se testa, false se croce
*/
public static boolean flipCoin() {
public static boolean lanciaMoneta() {
return ThreadLocalRandom.current().nextInt(0, 2) == 0;
}
}

0 comments on commit 34b9276

Please sign in to comment.