This commit is contained in:
2025-10-17 09:47:08 +02:00
parent c1f2c32bd7
commit 40c9df42d4
5 changed files with 399 additions and 0 deletions

186
VerificaTest/src/Main.java Normal file
View 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());
}
}
}