allineamento di 4 pedine

Schema di base del gioco.
Il programma proposto non è pienamente funzionante. Si propone un procedimento di progettazione di un programma per collaudi successivi. Cioè si realizzano piccole parti funzionanti e si aggiungono nuove funzionalità che si integrano per formare una soluzione completa.

Il gioco viene proposto nella modalità per due giocatori.

Nella parte iniziale ci sono le solite direttive al compilatore e la classe che ridefinisce i Gestori degli eventi sulla finestra.


ridefinire i gestori degli eventi del Mouse.


La classe Griglia fornisce un’area per disegnare nella finestra, detta Canvas.

Ridefinisce i gestori degli eventi generati dai tasti del mouse.

Il gestore di evento MouseClicked riceve il messaggio e di tipo MouseEvent dal quale preleva, per memorizzare in campi della classe, le coordinate in cui si è fatto clic e poi genera un messaggio (repaint) per ridisegnare l’area di disegno.

ridefinizione del metodo paint()


Il metodo paint viene richiamato dal costruttore.

Quando viene richiamato, associa il gestore degli eventi del mouse all’area di disegno.

Disegna una griglia.

disegnare la pedina


Il metodo update viene invocato dal metodo repaint. Questo affida alla funzione Pedina il compito di disegnare la pedina del giocatore di turno all'interno della griglia.

In un primo momento ci si limita a disegnare la pedina nella casella della griglia più vicina alla posizone del mouse, successivamente si calcolerà la casella esatta in cui questa deve essere disegnata (metodo di collaudo per passi successivi).

Prima di proseguire ci si assicura che sia stato fatto clic all'interno dell'area della griglia.

La funzione Pedinacalcola il numero di colonna e il numero di riga in cui si è fatto clic, ovvero trasforma le coordinate del pixel in una coppia di numeri di riga e di colonna, avendo scelto 20 pixel la larghezza di una colonna.

L’oggetto g ricevuto come parametro viene usato per disegnare la pedina. a seconda del turno sceglie il colore per disegnare la pedina

prima di terminare si cambia il turno del giocatore.

Termina la dichiarazione della classe Griglia

La classe principale

Raffinamenti: disegnare la pedina nella prima casella libera della colonna
Il programma proposto svolge solo alcune operazioni di base:
disegna la griglia di gioco e disegna una pedina all’interno di una casella.
Si vuole introdurre la funzione che, a partire dal basso, colloca le pedine una sopra l’altra, non nel punto in cui si fa clic.

Di seguito verranno fornite le indicazioni per ottenere l'effetto desiderato:

Dopo aver calcolato le coordinate di riga e di colonna (x=xPos/20, y=yPos/20), all’interno della funzione Pedina, e prima di decidere il colore della pedina da disegnare, si deve individuare all’interno della colonna la prima casella vuota, a partire dal basso.

Per fare questa operazione, quindi, occorre gestire una matrice in memoria che riproduce lo stato del gioco.
ad esempio una cella contenente 0 indica che la casella corrispondente è vuota, mentre una cella contenente 1 indica che la cella corrispondente è occupata dalla pedina rossa e una cella contenente 2 indica che la cella è occupata dalla pedina verde.

Raffinamenti: Stabilire se un giocatore vince.
Dopo aver disegnato la pedina del giocatore (quindi prima dell’istruzione Turno = !Turno all’interno della funzione Pedina, si deve riconoscere se il giocatore ha collocato 4 pedine su una linea.

Ulteriori miglioramenti
Gestire l’evento mouse Move per disegnare la pedina al di sopra delle colonne della griglia, in modo da indicare al giocatore dove cadrà la pedina.

Infine si richiede di gestire la fine del gioco e l’inizio di una nuova partita.

Si deve gestire una variabile booleana per riconoscere la fine del gioco (un giocatore vince oppure lo schema è pieno) e cancellare tutte le pedine.

Può essere utile, al riguardo l’uso della funzione clearRect appartenente all’oggetto g di classe Graphics.

Il metodo clearRect richiede 4 parametri: la prima coppia riguarda le coordinate dello spigolo superiore sinistro del rettangolo e la seconda coppia rappresenta le dimensioni dell’area rettangolare da cancellare. Per poter utilizzare il metodo occorre includere la libreria awt.Graphics.* nella compilazione.