Verifica
This commit is contained in:
10
SuperVerificaMeravigliosa/.classpath
Normal file
10
SuperVerificaMeravigliosa/.classpath
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
28
SuperVerificaMeravigliosa/.project
Normal file
28
SuperVerificaMeravigliosa/.project
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>SuperVerificaMeravigliosa</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
<filteredResources>
|
||||
<filter>
|
||||
<id>1758261738047</id>
|
||||
<name></name>
|
||||
<type>30</type>
|
||||
<matcher>
|
||||
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
||||
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
||||
</matcher>
|
||||
</filter>
|
||||
</filteredResources>
|
||||
</projectDescription>
|
||||
157
SuperVerificaMeravigliosa/src/Main.java
Normal file
157
SuperVerificaMeravigliosa/src/Main.java
Normal file
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
NB. aggiungere dei parametri ai metodi dove indispensabile
|
||||
|
||||
Drawable (interfaccia)
|
||||
void draw(); stampa le coordinate e le dimensioni del bottone.
|
||||
|
||||
Component (classe astratta)
|
||||
classe base astratta che implementa Drawable e rappresenta un generico componente GUI.
|
||||
Contiene le proprietà comuni a tutti i componenti: posizione (x, y) e dimensioni (width, height).
|
||||
|
||||
Button (classe concreta)
|
||||
Estende Component e rappresenta un pulsante.
|
||||
Aggiunge un'etichetta (label) e implementa i metodi:
|
||||
click() → simula il click del bottone.
|
||||
|
||||
TextField (classe concreta)
|
||||
Estende Component e rappresenta un campo di testo.
|
||||
Aggiunge la gestione del contenuto testuale (text) e implementa i metodi:
|
||||
setText() e getText() → gestione del contenuto.
|
||||
|
||||
Frame
|
||||
Classe che rappresenta una finestra contenente componenti.
|
||||
Gestisce:
|
||||
Il titolo e le dimensioni della finestra.
|
||||
Un array di componenti con numero massimo definito.
|
||||
metodi addComponent()
|
||||
draw() → disegna il frame e tutti i componenti e può lanciare una eccezione
|
||||
Eccezioni da gestire:
|
||||
OutOfFrameException → se un componente esce dai limiti della finestra
|
||||
|
||||
Main
|
||||
Contiene il metodo main() che:
|
||||
1. Crea un oggetto Frame.
|
||||
2. Aggiunge un Button e un TextField.
|
||||
3. Disegna la finestra e i componenti.
|
||||
4. Simula un click sul bottone.
|
||||
5. Cambia il testo nel TextField.
|
||||
6. Ridisegna la finestra per mostrare il nuovo stato.
|
||||
|
||||
|
||||
Drawing Frame: 'La mia finestra' size [800x600]
|
||||
Components:
|
||||
Drawing Button 'OK' at (50,100) size [100x40]
|
||||
Drawing TextField with text 'Inserisci testo...' at (200,100) size [200x40]
|
||||
Button 'OK' clicked!
|
||||
Drawing Frame: 'La mia finestra' size [800x600]
|
||||
Components:
|
||||
Drawing Button 'OK' at (50,100) size [100x40]
|
||||
Drawing TextField with text 'Inserisci testo...' at (200,100) size [200x40]
|
||||
!!! Eccezione catturata !!! Il componente TextField esce dai limiti del frame (La mia finestra)
|
||||
|
||||
|
||||
*/
|
||||
|
||||
class OutOfFrameException extends Exception {
|
||||
OutOfFrameException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
class MaxComponentsException extends Exception {
|
||||
MaxComponentsException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
interface Drawable {
|
||||
void draw() throws OutOfFrameException;
|
||||
}
|
||||
|
||||
abstract class Component implements Drawable {
|
||||
protected int x,y,width,height;
|
||||
}
|
||||
class Button extends Component {
|
||||
String label;
|
||||
Button(int x, int y, int width, int height, String label) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.label = label;
|
||||
}
|
||||
public void draw() throws OutOfFrameException {
|
||||
System.out.println("Drawing Button '" + label + "' size [" + width + "x" + height + "] at position (" + x + "," + y + ") status OK.");
|
||||
}
|
||||
public void click() {
|
||||
System.out.println("Clicked button '" + label + "'");
|
||||
}
|
||||
}
|
||||
class TextField extends Component {
|
||||
TextField(int x, int y, int width, int height) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
protected String text;
|
||||
public void draw() {
|
||||
System.out.println("Drawing TextField with text '" + text + "' size [" + width + "x" + height + "] at position (" + x + "," + y + ") status OK.");
|
||||
}
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
class Frame extends Component {
|
||||
protected int maxComponents = 10;
|
||||
protected int componentNumber = 0;
|
||||
protected String title;
|
||||
protected Component[] componentlist = new Component[maxComponents];
|
||||
Frame(int width, int height, String title) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.title = title;
|
||||
}
|
||||
public void draw() throws OutOfFrameException{
|
||||
System.out.println("Drawing Frame '" + title + "' size [" + width + "x" + height + "]");
|
||||
System.out.println("Drawing components...");
|
||||
for (int i = 0; i < componentNumber; i++) {
|
||||
if (componentlist[i].width > this.width || componentlist[i].height > this.height) {
|
||||
throw new OutOfFrameException("ERROR! The component is out of the frame limits!");
|
||||
}
|
||||
else {
|
||||
componentlist[i].draw();
|
||||
}
|
||||
}
|
||||
}
|
||||
public void addComponent(Component c) throws MaxComponentsException{
|
||||
if (componentNumber == maxComponents) {
|
||||
throw new MaxComponentsException("ERROR! Maximum number of components reached!");
|
||||
}
|
||||
else {
|
||||
componentlist[componentNumber] = c;
|
||||
componentNumber++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) throws Exception {
|
||||
try {
|
||||
Frame frame = new Frame(800,600,"La mia finestra");
|
||||
TextField field = new TextField(60,10,801,11);
|
||||
field.setText("Inserisci Testo...");
|
||||
Button button = new Button(30, 40, 90, 30, "OK");
|
||||
frame.addComponent(button);
|
||||
frame.addComponent(field);
|
||||
frame.draw();
|
||||
button.click();
|
||||
} catch (OutOfFrameException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
18
VerificaTest/README.md
Normal file
18
VerificaTest/README.md
Normal file
@@ -0,0 +1,18 @@
|
||||
## Getting Started
|
||||
|
||||
Welcome to the VS Code Java world. Here is a guideline to help you get started to write Java code in Visual Studio Code.
|
||||
|
||||
## Folder Structure
|
||||
|
||||
The workspace contains two folders by default, where:
|
||||
|
||||
- `src`: the folder to maintain sources
|
||||
- `lib`: the folder to maintain dependencies
|
||||
|
||||
Meanwhile, the compiled output files will be generated in the `bin` folder by default.
|
||||
|
||||
> If you want to customize the folder structure, open `.vscode/settings.json` and update the related settings there.
|
||||
|
||||
## Dependency Management
|
||||
|
||||
The `JAVA PROJECTS` view allows you to manage your dependencies. More details can be found [here](https://github.com/microsoft/vscode-java-dependency#manage-dependencies).
|
||||
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