Verifica
This commit is contained in:
186
VerificaTest/src/Main.java
Normal file
186
VerificaTest/src/Main.java
Normal file
@@ -0,0 +1,186 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
record Arma(String nome, int danno) { }
|
||||
interface Attaccante {
|
||||
void attacca(Personaggio p);
|
||||
int dannoMassimo();
|
||||
void aggiungiArma(Arma arma);
|
||||
}
|
||||
interface Curatore {
|
||||
void cura(Personaggio p);
|
||||
int puntiCura();
|
||||
}
|
||||
abstract class Personaggio {
|
||||
private final String nome;
|
||||
private int puntiVita;
|
||||
|
||||
public Personaggio(String nome, int puntiVita) {
|
||||
this.nome = nome;
|
||||
this.puntiVita = puntiVita;
|
||||
}
|
||||
|
||||
public String getNome() {
|
||||
return nome;
|
||||
}
|
||||
|
||||
public int getPuntiVita() {
|
||||
return puntiVita;
|
||||
}
|
||||
|
||||
public void riceviDanno(int danno) {
|
||||
if (puntiVita - danno <= 0) {
|
||||
puntiVita = 0;
|
||||
throw new RuntimeException(nome + " è stato sconfitto!");
|
||||
}
|
||||
puntiVita -= danno;
|
||||
}
|
||||
|
||||
public void riceviCura(int cura) {
|
||||
puntiVita += cura;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getClass().getSimpleName() +
|
||||
" {nome='" + nome + "', puntiVita=" + puntiVita + "}";
|
||||
}
|
||||
}
|
||||
class Mago extends Personaggio implements Attaccante, Curatore {
|
||||
private final int potereMagico;
|
||||
private final List<Arma> armi = new ArrayList<>();
|
||||
|
||||
public Mago(String nome, int puntiVita, int potereMagico) {
|
||||
super(nome, puntiVita);
|
||||
this.potereMagico = potereMagico;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void aggiungiArma(Arma arma) {
|
||||
armi.add(arma);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int dannoMassimo() {
|
||||
return potereMagico * 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attacca(Personaggio p) {
|
||||
if (armi.isEmpty()) return;
|
||||
int danno = dannoMassimo() / 2 + armi.get(0).danno();
|
||||
System.out.println(getNome() + " lancia un incantesimo su " + p.getNome() + " (danno: " + danno + ")");
|
||||
p.riceviDanno(danno);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int puntiCura() {
|
||||
return potereMagico * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cura(Personaggio p) {
|
||||
int cura = puntiCura();
|
||||
System.out.println(getNome() + " cura " + p.getNome() + " di " + cura + " punti vita.");
|
||||
p.riceviCura(cura);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " [potereMagico=" + potereMagico + "]";
|
||||
}
|
||||
}
|
||||
class Guerriero extends Personaggio implements Attaccante {
|
||||
private final int forza;
|
||||
private final List<Arma> armi = new ArrayList<>();
|
||||
|
||||
public Guerriero(String nome, int puntiVita, int forza) {
|
||||
super(nome, puntiVita);
|
||||
this.forza = forza;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void aggiungiArma(Arma arma) {
|
||||
armi.add(arma);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int dannoMassimo() {
|
||||
return forza * 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attacca(Personaggio p) {
|
||||
if (armi.isEmpty()) return;
|
||||
int danno = dannoMassimo() / 2 + armi.get(0).danno();
|
||||
System.out.println(getNome() + " colpisce " + p.getNome() + " (danno: " + danno + ")");
|
||||
p.riceviDanno(danno);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " [forza=" + forza + "]";
|
||||
}
|
||||
}
|
||||
class Guaritore extends Personaggio implements Curatore {
|
||||
private final int cura;
|
||||
|
||||
public Guaritore(String nome, int puntiVita, int cura) {
|
||||
super(nome, puntiVita);
|
||||
this.cura = cura;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int puntiCura() {
|
||||
return cura * 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cura(Personaggio p) {
|
||||
int punti = puntiCura();
|
||||
System.out.println(getNome() + " guarisce " + p.getNome() + " di " + punti + " punti vita.");
|
||||
p.riceviCura(punti);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " [cura=" + cura + "]";
|
||||
}
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
var guerriero = new Guerriero("Thor", 100, 8);
|
||||
var mago = new Mago("Merlino", 90, 12);
|
||||
Curatore guaritore = new Guaritore("Elrond", 80, 25);
|
||||
|
||||
Arma bastone = new Arma("Bastone Incantato", 20);
|
||||
Arma spada = new Arma("Spada del Destino", 50);
|
||||
|
||||
mago.aggiungiArma(bastone);
|
||||
mago.aggiungiArma(spada);
|
||||
guerriero.aggiungiArma(spada);
|
||||
guerriero.aggiungiArma(bastone);
|
||||
|
||||
System.out.println(mago);
|
||||
System.out.println(guerriero);
|
||||
System.out.println(guaritore);
|
||||
System.out.println();
|
||||
|
||||
try {
|
||||
guerriero.attacca(mago);
|
||||
mago.attacca(guerriero);
|
||||
System.out.println(mago);
|
||||
System.out.println(guerriero);
|
||||
|
||||
guaritore.cura(guerriero);
|
||||
mago.cura(mago);
|
||||
System.out.println(mago);
|
||||
System.out.println(guerriero);
|
||||
System.out.println();
|
||||
|
||||
guerriero.attacca(mago); // deve sollevare eccezione
|
||||
} catch (RuntimeException e) {
|
||||
System.out.println("⚠️ " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user