Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti
Progettare un sistema che permetta di effettuare una partita a MemoryPlus: Progettare un linguaggio che sia in grado di esprimere le azioni topiche di una tale partita. Realizzare uninterprete per tale linguaggio che: accetti in input una stringa di caratteri; esegua unanalisi sintattica al fine di riconoscere se la stringa è una frase lecita del linguaggio; esegua le azioni corrispondenti alla semantica della frase immessa. 19 novembre 2009 Vito La Porta 2
MemoryPlus è un gioco di memoria Si gioca su una griglia di carte inizialmente coperte Si possono scegliere tre livelli di difficoltà: 4x4, 6x6, 8x8 Lo scopo del gioco è individuare le coppie di carte uguali Il giocatore, allinizio della partita, può scegliere di visualizzare le carte per un certo numero di secondi, con lobiettivo di memorizzare gli accoppiamenti Scelta una carta è possibile richiedere un aiuto: il sistema evidenzia la carta che si accoppia con quella selezionata più un certo numero di carte definito dallutente, tutte sempre coperte 19 novembre 2009 Vito La Porta 3
Il linguaggio dovrà quindi offrire i costrutti per: o iniziare una nuova partita: settare, se richiesto, il livello di difficoltà del gioco; settare, se richiesto, il tempo in cui saranno visualizzate le carte scelte ma non accoppiate settare, se richiesto, il tempo in cui inizialmente saranno visualizzate tutte le carte o scegliere la coppia di carte: definire la nozione di posizione della prima carta e della seconda carta; offrire la possibilità di richiedere laiuto 19 novembre 2009 Vito La Porta 4
Il linguaggio che si intende progettare deve essere: semplice: sono sufficienti poche frasi per soddisfare le richieste di unutente che usufruisce del sistema; descrittivo: le frasi lecite del linguaggio devono riflettere il pensiero del giocatore che in quel momento sta richiedendo una particolare azione; comprensibili a chiunque: non legate quindi a notazioni chiare solo a professionisti. 19 novembre 2009 Vito La Porta 5
Esempi di frasi lecite: start level beginner start level intemediate time 4 start level expert time 3 view 7 ::= | ::=start [ ] [ ] [ ] ::=level ::=time ::=view Scopo Inizia nuova partita 19 novembre 2009 Vito La Porta 6
Esempi di frasi lecite: choose b6 - a5 choose a3 help 4 ::= choose (- | ) ::= ::= help Azioni partita in corso ::=beginner | intemediate | expert ::= ["1"-"9"] { [ 0"-"9 ] } ::= ::=A | B | C | D | E | F | G | H ::=1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 Token 19 novembre 2009 Vito La Porta 7
Secondo la classificazione di Chomsky, la grammatica è di tipo 2, ovvero libera dal contesto, poiché le produzioni non sono regolari. Lassenza di self-embedding assicura però che il linguaggio generato è di tipo 3, ovvero regolare. Non sono presenti ε-rules: il linguaggio non comprende, quindi, la stringa vuota in quanto essa non avrebbe alcun significato rilevante. Gli starter symbols corrispondenti alle parti destre delle produzioni alternative sono disgiunti: la grammatica è, quindi, LL(1). Non è necessario ricorrere ai director symbols giacché nessun metasimbolo genera la stringa vuota. È possibile, allora, utilizzare lanalisi ricorsiva discendente. 19 novembre 2009 Vito La Porta 8
Linguaggio di programmazione: o Java 1.6.0_13 Generazione parser e scanner: o JavaCC 4.2 Generazione APT e visitor: o JTB Ambiente di sviluppo: o Eclipse Ambiente di test: o JUnit novembre 2009 Vito La Porta 9
La boundary MemoryPlus implementa linterfaccia grafica e mette a disposizione dellutente unarea di testo in cui è possibile definire le azioni desiderate. Il controller Partita verifica la correttezza delle azioni richieste e, in caso positivo, le esegue. Lentità Matrix implementa la griglia delle carte e memorizza lo stato di ciascuna di esse. 19 novembre 2009 Vito La Porta 10
Sono stati implementati due visitor: MemoryPlusGameVisitor: visita lAPT e inoltra al controller Partita le azioni rilevate al fine di verificarne la correttezza e, in caso positivo, lesecuzione. MemoryPlusTreeVisitor: visita lAPT e ne fornisce una rappresentazione grafica sotto forma di albero. Lunione degli alberi relativi ad una stessa partita determina lo storico della stessa. Ciascun visitor realizza una visita di tipo depth first avvalendosi del meccanismo del double dispatch. 19 novembre 2009 Vito La Porta 11
Area inserimento frasi Unione APT della partita in corso Evoluzione partita 19 novembre 2009 Vito La Porta 12
E stata implementatia una suite di test JUnit: TestController: verifica la correttezza dei metodi, il corretto andamento della partita e la capacità di riscontrare e notificare azioni illecite. 19 novembre 2009 Vito La Porta 13
Il principale limite è la mancanza di un sistema di punteggi, basato sul numero di tentativi e sul tempo utilizzato, che permetta di definire classifiche delle diverse partite. Possibili sviluppi futuri possono essere: Introdurre un sistema di punteggi Permettere allutente la possibilità di definire un limite di tempo entro cui completare una partita. Introdurre la possibilità di effettuare partite tra due giocatori. 19 novembre 2009 Vito La Porta 14