Javaland

public class JavaLand {

// ===============================
// CLASSE BASE: Mago
// ===============================
static class Mago {
private String nome;
private String tipoMagia;
private boolean haChiaveSegreta;

public Mago(String n, String magia, boolean chiave) {
nome = n;
tipoMagia = magia;
haChiaveSegreta = chiave;
}

public String getNome() {
return nome;
}

public String getTipoMagia() {
return tipoMagia;
}

public void lanciaIncantesimo() {
System.out.println(nome + " canalizza un’energia misteriosa di tipo " + tipoMagia + ".");
}

public void entraInStanzaSegreta() {
if (haChiaveSegreta) {
System.out.println(nome + " accede alla Cripta Quantica... e risveglia conoscenze proibite!");
} else {
System.out.println(nome + " viene respinto dal Campo di Forza Arcano. Accesso negato.");
}
}
}

// ===============================
// SOTTOCLASSI DI Mago
// ===============================
static class MagoBuono extends Mago {
public MagoBuono(String n, String magia) {
super(n, magia, true);
}

public void lanciaIncantesimo() {
System.out.println(getNome() + " evoca un’onda luminosa CURATIVA di " + getTipoMagia() + "!");
}
}

static class MagoCattivo extends Mago {
public MagoCattivo(String n, String magia) {
super(n, magia, false);
}

public void lanciaIncantesimo() {
System.out.println(getNome() + " scatena un impulso DISTRUTTIVO di " + getTipoMagia() + "!");
}
}

// ===============================
// CLASSE: CavaliereRoboticoSpaziale
// ===============================
static class CavaliereRoboticoSpaziale {
private String nome;
private String arma;

public CavaliereRoboticoSpaziale(String n, String a) {
nome = n;
arma = a;
}

public void attacca() {
System.out.println(nome + " attacca con la sua " + arma + " al plasma!");
}
}

// ===============================
// CLASSE: PrincipessaGalattica
// ===============================
static class PrincipessaGalattica {
private String nome;
private String potere;

public PrincipessaGalattica(String n, String p) {
nome = n;
potere = p;
}

public void usaPotere() {
System.out.println(nome + " sprigiona il potere di " + potere + " per salvare l’universo!");
}
}

// ===============================
// CLASSE: DragoCybernetico
// ===============================
static class DragoCybernetico {
private String nome;
private String elemento;

public DragoCybernetico(String n, String e) {
nome = n;
elemento = e;
}

public void sputaFiamme() {
System.out.println(nome + " ruggisce e sputa fiamme di " + elemento + "!");
}
}

// ===============================
// MAIN: il mondo di JavaLand prende vita!
// ===============================
public static void main(String[] args) {

// Maghi
Mago magoGenerico = new Mago("Zyron l’Equilibrato", "etere stellare", false);
MagoBuono magoBuono = new MagoBuono("Auralis dell’Alba Cosmica", "luce quantica");
MagoCattivo magoCattivo = new MagoCattivo("Nekrath il Corruttore", "fiamma oscura");

// Cavaliere Robotico
CavaliereRoboticoSpaziale cavaliere = new CavaliereRoboticoSpaziale("X-Knight 9000", "lancia gravitazionale");

// Principessa
PrincipessaGalattica principessa = new PrincipessaGalattica("Lyra di Andromeda", "cuore stellare");

// Drago
DragoCybernetico drago = new DragoCybernetico("Omnidrake", "fuoco quantico");

// Maghi usano magie
System.out.println("--- Trasmissioni magiche in corso ---");
magoGenerico.lanciaIncantesimo();
magoBuono.lanciaIncantesimo();
magoCattivo.lanciaIncantesimo();

// Maghi tentano di entrare nella stanza segreta
System.out.println("\n--- Accesso alla Cripta Quantica ---");
magoGenerico.entraInStanzaSegreta();
magoBuono.entraInStanzaSegreta();
magoCattivo.entraInStanzaSegreta();

// Cavaliere attacca
System.out.println("\n--- Difesa Galattica ---");
cavaliere.attacca();

// Principessa usa il suo potere
System.out.println("\n--- Risveglio della Principessa ---");
principessa.usaPotere();

// Drago sputa fiamme
System.out.println("\n--- Attacco del Drago Cybernetico ---");
drago.sputaFiamme();
}
}