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.