Minuscoli parassiti minacciano il tuo orto

difendi gli ortaggi

Regole del gioco
Scaricare le tre immagini, formato jpg, nella stessa cartella in cui si scriverà l'applicazione. Assegnare i nomi indicati.
insetto.jpgColpito.jpgVuoto.jpg
L'area client della pagina viene divisa in piccoli quadrati. Da ciascuno di questi, a caso, si affaccia un insetto e, dopo un tempo casuale si rintana.

Usando il mouse colpire l'insetto prima che sparisca.

Organizzazione dell'area di disegno
La porzione di Area in cui si realizza il gioco viene suddivisa in quadrati di lato 70 pixel.

Quindi, disponendo 6x6 quadrati si ottiene una matrice, in cui ad ogni cella può essere associata una coppia di coordinate di riga e di colonna, oppure un numero progressivo:

Tra le coordinate di Riga e di Colonna e il numero progressivo della tana esiste una semplice relazione:
Numero Tana = Riga x 6 + Colonna

Inoltre, dal numero della casella si ottengono le coordinate dell'angolo superiore sinistro del quadrante corrispondente:

x = (Numero Tana % 6) x 70 - (Resto della divisione tra Numero tana e 6, moltiplicato 70)
y = (Numero Tana / 6) x 70. - (Quoziente della divisione tra Numero tana e 6, moltiplicato 70)
  0  1  2  3  4  5 
0  0   1    2   3   4    5 
1  6   7    8   9  10   11 
2 12   13   14   15   16   17 
3 18   19   20   21   22   23 
4 24   25   26   27   28   29 
5 30   31   32   33   34   35 

Librerie riferite
Nella sezione delle direttive al compilatore, elencare le librerie da comprendere nella compilazione del programma sorgente.


Proprietà della classe


Commenti
  1. la classe viene ospitata all'interno di un'applet e ridefinisce i metodi delle classi gestore dei Thread e gestori del mouse.
  2. Mosca è il riferimento ad un thread, non ancora avviato.
  3. vengono dichiarate le variabili utilizzate per la misura del punteggio.
  4. Orologio conta il tempo durante cui viene mostrata l'immagine dell'insetto colpito.
  5. Durata conta il tempo durante cui viene mostrata l'immagine dell'insetto.
  6. Affacciato è un array di boolean usato, oltre che per mostrare l'immagine del'insetto, per stabilire se si è fatto clic su una tana dove l'insetto era affacciato o si è colpita una tana vuota.
  7. Colpito è un array di boolean usato per stabilire se si deve mostrare l'immagine dell'insetto colpito.
  8. Infine la classe possiede tre riferimenti ad immagini.

Il gestore dell'evento onMousePressed



Commenti:
  1. vengono dichiarate 3 variabili locali: Le coordinate xc di riga e yc di colonna dell'area dello schermo e il corrispondente numero di tana NrTana
  2. in xc si acquisisce la coordinata orizzontale del pixel su cui si è premuto il pulsante del mouse
  3. La coordinata orizzontale xc divisa per 70 (la larghezza del lato del quadrato di una tana) fornisce il numero di colonna in cui rientra la tana nella griglia
  4. in yc si acquisisce la coordinata verticale del pixel su cui si è premuto il pulsante del mouse
  5. yc diviso per 70 fornisce il numero di riga in cui rientra la tana nella griglia
  6. Con le due coordinate si calcola il numero della tana
  7. Se in quella tana l'insetto risulta mostrato
  8. Si marca che l'insetto è stato colpito
  9. lo si mostra stordito per 5 unità di tempo.
  10. si fa avanzare l'orologio che misura la durata del gioco.
  11. Si conteggia un insetto colpito
  12. altrimenti (si è fatto clic su una zona in cui l'insetto non è mostrato) si conteggia un colpo mancato

Altri gestori del mouse


i restanti gestori degli eventi generati dal mouse devono essere dichiarati anche se sono vuoti.

il metodo init richiamato all'avvio dell'applet



Commenti:
  1. Si fissa la durata del gioco in 50 unità di tempo.
  2. Si azzerano le variabili che misurano i punteggi
  3. Si assegna il riferimento all'immagine dell'insetto stordito
  4. Si assegna il riferimento all'immagine della tana vuota
  5. Si assegna il riferimento all'immagine dell'insetto affacciato
  6. per ciascuna delle 36 tane:
  7. azzera la durata di esposizione dell'insetto
  8. azzera l'orologio
  9. l'insetto non è mostrato.
  10. l'insetto non è colpito.
  11. si consente il posizionamento esplicito degli oggetti sulla finestra
  12. il gestore del mouse si trova in questa classe
  13. crea un thread
  14. avvia il thread.

Ridisegnare la finestra


Commenti:
  1. Si imposta il colore dello sfondo.
  2. per ciascuna delle 36 tane:
  3. se l'insetto è affacciato e non è stato ancora colpito mostra l'immagine dell'insetto.
  4. Se l'insetto non è affacciato, in quella posizione si deve mostrare la tana vuota.
  5. Se l'insetto è affacciato e colpito in quella tana si deve mostrare l'insetto stordito.
  6. Cancella l'area in cui si mostra il punteggio
  7. mostra il punteggio

le azioni del Thread.


  1. si legge il nome del thread.
  2. il ciclo permette di controllare la terminazione del thread al raggiungimento del conteggio 0 nella variabile durataGioco.
  3. si conta un'altra unità di tempo trascorsa.
  4. per tutte le 36 tane:
  5. se l'insetto è affacciato
  6. conta da quanto tempo è affacciato
  7. se il tempo concessogli giunge a 0
  8. si prepara a nasconderlo
  9. se non è stato colpito viene conteggiato tra gli insetti scappati
  10. in ogni caso si rimette a falso la variabile che segnala l'insetto colpito.
  1. calcola una tana casuale
  2. se in quella tana l'insetto non è già affacciato
  3. assegna un tempo tra 0 e 5 unità prima di farlo scomparire
  4. il quella tana l'insetto deve essere ridisegnato
  1. ferma il thread per 1.2 s
  1. quando l'applet termina il thread viene eliminato


prova il gioco.