24/11/09 17:25
netarrow
in questa situazione l'ideale è ricorrere al pattern Model-View-Controller.
In pratica così separi la parte dei dati e dell'elaborazione, quindi nel Model hai griglia array n*n con metodi per selezionare l'elemento in (x, y) e fare tutti i controlli e settare lo stato delle varie celle (tutti astrattivamente, senza pensare a jpanel ecc...).
Poi la parte grafica starà nella View che si auto aggiornarà in base ai valori che prenderà dal model.
Infine il Controller gestirà i click intercettando dove è stato fatto e dicendo poi al model che è stata cliccata la cella (x, y) allora il Model aggiornerà il suo stato interno, notificherà la View dell'aggiornamento che si ridisegnerà coi dati aggiornati.
Cercando magari qualche documento su google trovi maggiori spiegazioni su questo pattern fondmentale.
aaa
25/11/09 10:36
Torre
Grazie mille! solo una cosa..non ho ben capito il concetto della griglia array n*n..devo farla senza GridLayout? Se sì come?? Io ho pensato a un array di tipo byte
(es.:private byte griglia[][];
griglia = new byte[4][4];
ecc...)
ma poi non posso fare il cast delle immagini se le carico come tipo IMAGE. Quindi?
Ultima modifica effettuata da Torre 25/11/09 11:20
aaa
25/11/09 20:17
netarrow
nel modello devi dimenticarti di come poi implementi la View, nel modello fai una struttura dati astratta come un array bidimensionale, poi se nella View usi un gridlaout, disegni a mano in un cavans o altre cose non deve influenzare l'implementazone del modello di base.
cmq usare un tipo di dato byte per rappresentare la griglia di immagini non ha senso, devi usare un tipo di dato che possa rappresentare la griglia di immagini (e con un singolo byte è difficile).
potresti fare un array bidimensionale di tipo short dove con 0 indichi una cella coperta, con 1 una girata, e con 2 una eliminata perchè è stata scartata.
poi crei un altro array n*n di stringhe dove associ alla stessa cordinata (x, y) della griglia si short il nome dell'immagine che sarà poi il nome del file fisico contenente l'immagina.
O meglio ancora fai un array bidimensionale di una classe tuo chiamata Cella dove incapsuli tutte queste caratteristiche.
Ultima modifica effettuata da netarrow 25/11/09 20:18
aaa
26/11/09 6:42
netarrow
No ora che ci penso quella soluzione dei due array è troppo vecchio-stile, in java è più pulita la soluzione della cella.
Nel senso che la cosa migliora dal punto di vista progettuale è fare la classe Cella, che incapsula:
- nome dell'immagine (che sarà anche il nome del file fisico dell'immagine, ma al modello questo non deve interessare)
- uno status in una enum magari dove indichi se è coperta, scoperta o scartata
- magari per comodità incapsuli le sue cordinate x, y nell'array bidimensionale dove è inserita
Poi nel modello dichiari un array bidimensionale che contiene oggetti Cella e metti dentro dei metodi per gestire il gioco quindi gestire la scelta della cella x, y e impostarla su scoperta, confrontare due celle, scartarle se sono uguali ecc...
Praticamente devi fare un Engine del gioco astratto, a tal punto di poterlo provare a console, e poi costruirci attorno una View grafica.
Se fai il programma orientato ai dati anzichè alle funzioni fondamentalmente si scrive da solo.
Ti allego un piccolo progetto che implementa il pattern MVC per giocare a una battagia navale semplficata, così vedi come strutturare questo genere di progetti
Ultima modifica effettuata da netarrow 26/11/09 6:44
aaa