L'obiettivo e' trasformare il programma sviluppato nell'esercizio precedente in una interfaccia per l'animazione di una particella vagante utilizzando le classi del progetto.
Nell'esercizio precedente abbiamo preso questa classe a scatola chiusa, ora guardiamo come e' fatta dentro, perche' dobbiamo cambiarla.
Prendete il file BallPanel.java (versione AWT) oppure JBallPanel.java (versione Swing).
Le variabili che
descrivono la situazione della pallina:
private double x, y; // ball position (center) private int r; // ball radius private double a; // ball direction (angle, in radiants)Vanno eliminate e sostituite con un oggetto di classe Enrironment che assolve il compito di descrivere la situazione delle particelle vaganti.
Il costruttore della classe non dovra' piu' inizializzare queste variabili, ma invece dovra' inizializzare l'oggetto di classe Enrironment. Questo va creato e gli va aggiunta una particella (usando la funzione apposita presente nella classe Enrironment).
Le funzioni che servono per assegnare e leggere le proprieta' della pallina vanno eliminate perche' non abbiamo piu' la pallina.
Le costanti che definiscono i muri vanno elimnate perche' i muri sono gia' gestiti internamente all'ambiente.
Stessa cosa per le funzioni che gestiscono il moto della pallina (sono una che riflette la direzione della pallina quando urta un muro, e una che cambia casualmente la direzione della pallina). Da eliminare perche' il moto delle particelle e' gia' gestito internamente dall'ambiente.
La funzione nextStep, che avanza un passo dell'animazione, deve ora richiamare la analoga funzione dell'oggetto di classe Environment.
La funzione resetBall, che riporta la pallina in posizione iniziale, puo' essere re-implementata svuotando l'ambiente e ri-aggiungendo una particella dello stesso tipo e nella stessa posizione in cui e' stata aggiunta nel costruttore.
La funzione di disegno deve adesso disegnare la particella (sappiamo che ne abbiamo messa solo una) ottenendola dall'oggetto di classe Environment, e leggendo le sue informazioni (posizione, raggio) mediante le funzioni di classe Particle.
Non dovrebbe essere necessario modificare nulla nel resto dell'interfaccia (cioe' nelle classi che avete sviluppato per l'esercizio precedente).
Infatti le funzioni usate di classe BallPanel (cioe' costruttore, nextStep e resetBall) hanno mantenuto stesso nome e parametri. E' solo stata cambiata l'implementazione interna, a insaputa del resto dell'interfaccia, in modo completamente indolore.
Invece che una pallina sola, se ne possono mettere due o tre. Oppure riempire l'intero ambiente con una miscela di particelle.