Ecco un compito d’esame strutturato, completamente analogo a quello che hai mostrato, con lo stesso tipo di logica ma con un soggetto diverso.
Ho scelto come oggetto dei quadrati che si muovono, con una classe base e una derivata, input da tastiera, movimento, gravità, rimbalzi, ecc.
📘 Compito d’esame – Programmazione Grafica con Processing
Traccia
Realizza un programma in Processing che simuli un insieme di quadrati che si muovono sullo schermo, rimbalzando sui bordi e subendo la gravità.
Il programma deve implementare ereditarietà, overriding, array dinamici e gestione della tastiera.
1. Requisiti
1.1 Classe Square (classe base)
Devi implementare una classe Square con:
-
Variabili:
-
float posX, posY→ posizione -
float size→ lato del quadrato -
float speedX, speedY→ velocità
-
-
Costruttori:
-
Uno che riceve posizione, dimensione e velocità
-
Uno che crea un quadrato fermo (speedX = speedY = 0) dato solo posizione e dimensione
-
-
Metodi:
-
display()→ disegna un quadrato rosso -
move()→ aggiorna la posizione -
bounce()→ inverte le velocità quando tocca i bordi -
gravity()→ aumentaspeedYdi 0.15 -
run()→ chiama in ordine:gravity(),move(),bounce(),display()
-
1.2 Classe BlueSquare (classe derivata)
Questa classe deve estendere Square, cambiando solo il modo in cui viene disegnato:
-
display()deve essere sovrascritto per disegnare un quadrato blu -
I costruttori devono richiamare
super(...)come nel codice fornito a lezione
1.3 Funzioni principali
Nel tuo sketch devi:
-
Creare un
ArrayList<Square>chiamatoas -
Nel
draw():-
Sfondo nero
-
Per ogni elemento della lista, chiamare
run()
-
1.4 Gestione tastiera
Implementa:
-
tasto 'r'→ crea un nuovo quadrato rosso (Square) -
tasto 'b'→ crea un nuovo quadrato blu (BlueSquare)
Le proprietà dei nuovi quadrati devono essere scelte con:
-
Posizione casuale, tale da stare sempre dentro allo schermo
-
Dimensione tra 20 e 60
-
Velocità orizzontale e verticale tra 1 e 8
2. Vincoli
-
Non usare array normali: solo
ArrayList -
Usare l’ereditarietà per evitare duplicazioni di codice
-
La classe derivata deve ridefinire solo il necessario, non riscrivere la logica già implementata nella classe base
-
Non usare funzioni statiche o globali diverse da quelle viste nel corso
3. Domande teoriche (parte scritta)
-
Spiega cosa significa overriding in Java e perché viene usato in questo esercizio.
-
Descrivi la differenza tra:
-
chiamare un metodo normale
-
chiamare un metodo attraverso l’oggetto contenuto in un
ArrayList
-
-
Perché è utile avere la funzione
run()invece di chiamare manualmentedisplay,move, ecc. nel ciclo principale? -
Perché nei rimbalzi si confronta
posX < size/2invece diposX < 0?
4. Extra (per il 30 e lode)
Aggiungere un’altra classe derivata, ad esempio RotatingSquare, che oltre ai metodi base:
-
ruota lentamente il quadrato (
rotate()) -
sovrascrive
display()per applicare correttamente la rotazione
Se vuoi, posso anche:
✅ fornirti la soluzione completa del compito
✅ creare altri compiti simili con cerchi, triangoli, astronavi, farfalle, emoji ecc.
✅ creare un mock di esame con timer e griglia di valutazione
Vuoi la soluzione o un altro esempio?