UNIVERSITÁ DEGLI STUDI DI PADOVA
DIPLOMA IN INGEGNERIA INFORMATICA
Tesina per il corso di Fondamenti di
Informatica 3
a.a. 2000/2001
Othello.
Studenti :
Matricola :
Largo Paolo
Toigo Francesco
435577/DF
436145/DF
Centro :
Feltre
Docenti :
Ing. P. Rossetti
Prof. L. Calvi
Con il seguente progetto intendiamo costruire un sistema con architettura a tre livelli che realizzi il
famoso gioco “Othello”.
Le regole di tale gioco possono essere riassunte come segue:
I giocatori possono essere al massimo due e utilizzano pedine di colore diverso; la partita inizia con
quattro pedine già posizionate al centro della scacchiera. Si tratta di due pedine nere e di due
bianche. Per catturare le pedine avversarie è necessario chiuderle fra due pedine proprie. In questo
caso, le pedine avversarie cambiano colore e assumono quello delle proprie pedine. Ad esempio, se
si gioca col nero e si vede una fila di pedine bianche con una nera ad un'estremità, posizionare la
propria pedina nera all’altra estremità della fila. Tutte le pedine bianche diventeranno di colore
nero. Sono ammesse tutte le linee rette: orizzontali, verticali e diagonali. Le uniche mosse ammesse
consistono nel racchiudere le pedine dell’avversario e farle diventare del proprio colore. Si deve
prendere almeno una pedina avversaria ad ogni turno. Se non è possibile alcuna mossa si perde il
turno. Il computer provvede automaticamente a passare la mano all’avversario.
Il punteggio di Othello è semplice. Il numero di pedine bianche e nere viene visualizzato durante il
gioco. Vince il giocatore che alla fine della partita ha più pedine sulla scacchiera.
L’applicazione che realizza questo gioco si basa su un’architettura su tre livelli.
Il primo livello è costituito dall’applicazione GUI, cioè l’interfaccia grafica che viene presentata ai
client che si collegano per giocare. Tale interfaccia è composta da:
1. un menu in cui l’utente può selezionare le seguenti voci:
 Sezione Gioco contiene le voci di menu per:
 iniziare una nuova partita.
 Salvare la partita in corso.
 Caricare da un database una partita precedentemente salvata.
 Uscire dal gioco.
 Sezione Finestre contiene le voci di menu per:
 Vedere la finestra con i punteggi.
 Visualizzare le partite con i record.
 Collegarsi al sito realizzato dagli sviluppatori
 Visualizzare le statistiche della partita.
 Sezione Aiuto contiene le voci di menu per:
 Visualizzare le regole del gioco
 Avere una schermata di informazioni aggiuntive.
2. Una scacchiera della dimensione 8 X 8 su cui eseguire le mosse.
3. Un’eventuale finestra con i punti della partita in corso.
Il secondo livello è costituito dall’applicazione realizzata tramite l’utilizzo di RMI in modo da poter
far giocare gli utenti in remoto.
Il terzo livello è costituito dal Driver JDBC che permette di salvare e caricare i dati relativi alle
partite da un database.
Schema UML delle classi coinvolte:
JPanel
Casella
CasellaPunti
Griglia
CasellaPic
GrigliaGrafica
GameInterface
Othello
FinestraPunti
Remote
JFrame
JDialog
FinestraPunti
Server
Legenda:
Is_a
Has_a
UnicastRemoteObject
Descrizione delle classi e loro metodi:
1. interface GameInterface
Interfaccia per il collegamento tramite RMI.
Metodi:
 public int[][] setPlayed (String ID): metodo che riceve la conferma della
mossa.
 public int[][] inizia(): Posiziona le prime quattro pedine al centro della
scacchiera.
 public int[] contaPunti():Conta i punti scorrendo tutte le caselle e ritorna
un'array con i punti dei due giocatori
2. Classe Casella.java
Questa classe permette di creare una casella della scacchiera e il bordo della scacchiera stessa.
Metodi:
 public void paint(Graphics g):
 public void disCenterCell (Graphics g)
3. Classe CasellaPic.java
Disegna una casella della scacchiera, gestisce le immagini ad essa associate e permette di
catturare gli eventi (es. clic del mouse su una casella)
 public static void setImg (Image[] img)
il metodo associa alla casella le immagini caricate.
 public Image getImage (int number): restituisce le immagini caricate nella
casella.
 public static void setParent (GrigliaGrafica cmp): associa alla casella la
griglia genitrice.
 public void disCenterCell (Graphics g)
 public int getStato (): ritorna lo stato della cella.
 public void setStato (int Player):setta lo stato della cella.
4. Classe CasellaPunti.java
Crea la casella che conta i punti dei due giocatori e disegna le pedine dei giocatori.
 public void disCenterCell (Graphics g)
5. Classe FinestraPunti.java
Crea la finestra che conterrà i punteggi e disegna le pedine dei due giocatori.
 public void setPoints (int nero, int bianco): modifica i punteggi dei vari giocatori.
6. Classe Griglia.java
Questa classe incapsula un Layout che permette di gestire la divisione a scacchiera della
finestra.
 public void setPlayed (String ID): Riceve la conferma della mossa.
7. Classe Grigliagrafica.java
Questa classe incapsula una Griglia e tramite l'uso di metodi rmi, permette il gioco in rete
tramite un server.
 protected void setImages (String[] files): Carica le immagini delle pedine.
 public Image getImage (int number): Ritorna l’immagine contenuta in una casella.
 protected Image loadPic (String file): Attende il caricamento delle immagini e le
restituisce.
 public void disegna (int[][] celle)
 protected void nuovo ():Imposta due pedine a testa al centro della griglia.
 public void setPlayed (String ID): Riceve conferma della mossa.
8. Classe HelpDialog.java
Questa classe mostra un Jdialog contenente la guida del gioco.
9. Classe Hotello.java
È la classe principale che crea la scacchiera del gioco con il menu.
 public void setPoints (int nero, int bianco): Modifica i punteggi del Jdialog Punteggi
 public static JMenu makeMenu (Object parent, Object[] items, Object target): Crea e
restituisce un Jmenu
 public static JMenuItem makeMenuItem (Object item, Object target): Crea e restituisce
JmenuItem.
 public static JPanel makeButtonBar (Object[] item, LayoutManager m, Object target):
crea e restituisce una serie di pulsanti.
 public void setPuntiCBState (boolean stato): Imposta lo stato del JcheckBoxMenuItem
punti del menu.
 protected void openURL (String fileName, String url): Crea un file contenente l'URL del
sito ufficiale e lo apre.
10. Classe Server.java
Questa classe gestisce un server RMI per la connessione dei giocatori ad una determinata
partita.
 public int[][] inizia () throws RemoteException: assegna due pedine a testa al centro della
scacchiera.
 public int getStato (String ID):ritorna lo stato di una casella.
 public int[][] setPlayed (String ID): Elabora la mossa, modificando le pedine che vengono
catturate.
 public void cambiaStato (int x, int y): cambia la pedina con quella dell’avversaio.
 protected boolean testNextPlayer(): Controlla che il giocatore che deve effettuare la
mossa possa farlo, altrimenti passa il turno all’avversario
 public int[] contaPunti(): conta i punti scorrendo tutte le caselle della scacchiera.
 public void mostraPartite (): Carica una partita dal database.
Descrizione dell’interfaccia grafica
Server
Per eseguire l’applicazione Othello è necessario, come primo punto, lanciare il server RMI che
permette il collegamento da remoto di due giocatori.
Nel momento dell’attivazione viene stampato sul Prompt del DOS la scritta “Server Attivato”; ed
a video compare la seguente finestra:
a questo punto il server è attivato e i giocatori possono collegarsi per iniziare una partita.
Per far terminare l’esecuzione del server bisogna chiudere questa finestra tramite il pulsante
“Server Shut-Down”.
Client
Sul lato Client risiede l’interfaccia grafica che permette lo svolgimento della partita, eseguendo
l’istruzione “java Othello” ci si collega al server come giocatore e si può iniziare una partita; a
video compaiono le due finestre seguenti:
1.
La prima è composta dal menu e dalla scacchiera sulla quale si svolge la partita.
Automaticamente vengono posizionate al centro della griglia due pedine per colore.
Questa finestra può essere ridimensionata tramite un clic del mouse sui bordi, facendo
questo le caselle contenute nella griglia si modificheranno automaticamente seguendo le
dimensioni della finestra, in modo che tale finestra contenga sempre tute le 64 caselle che
compongono la scaccchiera.
2. La seconda finestra appare in altro a sinistra dello schermo, e serve per tenere il punteggio
della partita in atto. Tale finestra contiene le immagini delle pedine di ogni giocatore. Al
momento attuale abbiamo standardizzato le pedine a due soli colori: Rosso e Verde; una
prima miglioria del programma potrebbe essere quella di permettere all’utente di scegliere
il colore delle proprie pedine.
Menu di Othello
Il Menu dell’applicazione Client è composto come segue:
Nella sezione Gioco troviamo tre voci di Menù:
1. Nuovo: Permette di iniziare una nuova partita, tutte le pedine presenti sulla scacchiera
vengono eliminate riposizionando al centro della scacchiera le prime quattro pedine.
2. Mostra: Permette di caricare una partita precedentemente salvata sul database.
3. Salva: Salva lo stato di una partita sul database.
4. Esci: Esce dal gioco e termina l’esecuzione dell’applicazione.
Nella sezione Finestre troviamo le voci di menu:
1. Punteggi: mostra o nasconde la finestra con i punteggi della partita.
2. Records: mostra un elenco delle partite in cui il divario di punti è stato maggiore.
3. Sito: gestisce il collegamento al sito per il corso di Fondamenti di informatica 3 realizzato
dagli stessi programmatori che hanno prodotto il software Othello.
4. Statistiche: Mostra una schermata con le statistiche della partita in corso: n° di mosse,
punti, tempo impiegato, ecc…
Nella sezione Aiuto troviamo le seguenti voci di menu:
1. Regole: mostra una schermata con le regole del gioco.
2. Info: Mostra la seguente finestra di informazioni aggiuntive.
Cliccando sul link Othello® è possibile collegarsi al sito dei realizzatori di questa
applicazione.
Messaggi
Durante l’esecuzione del programma possono apparire a video alcuni dei seguenti
messaggi:
1.
Compare alla fine della partita informando i giocatori su chi è il vincitore.
2.
Per motivi di tempo, parte del codice relativa alle voci di menù non è stata ancora
implementata; questo messaggio lo notifica all’utente.
3.
Si è verificato un errore di I/O.