La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Un linguaggio ed un interprete per il gioco Citadels Progetto di: Zapparoli Pamela per Linguaggi e modelli computazionali LS.

Presentazioni simili


Presentazione sul tema: "Un linguaggio ed un interprete per il gioco Citadels Progetto di: Zapparoli Pamela per Linguaggi e modelli computazionali LS."— Transcript della presentazione:

1 Un linguaggio ed un interprete per il gioco Citadels Progetto di: Zapparoli Pamela per Linguaggi e modelli computazionali LS

2 Il gioco di carte Citadels Citadels è un gioco di carte strategico di ambientazione medioevale con una forte componente di bluff e deduzione. Lo scopo del gioco è costruire la città più fiorente, ovvero quella che garantisce il maggior numero di punti vittoria, prima dei propri avversari. Il gioco termina alla fine del turno in cui almeno un giocatore ha costruito lottavo distretto della propria città. Per raggiungere il proprio scopo i giocatori assumeranno il ruolo di un personaggio diverso ad ogni turno, scegliendo in segreto una fra le 8 carta personaggio disponibili.

3 Regole di Citadels (1/4) Vi sono quindi 2 tipologie di carte: Carte personaggio: rappresentano i possibili ruoli che i giocatori possono assumere durante il loro turno. La carta personaggio scelta determina lordine di gioco. I personaggi sono: Assassin, Thief, Magician, King, Bishop, Merchant, Architect, Warlord. Carte distretto: rappresentano gli edifici che è possibile costruire. Ogni carta ha un costo in monete doro e un valore in punti (solitamente pari al costo). Ha inoltre un colore fra i seguenti: – Giallo: se si tratta di un edificio di tipo nobiliare – Verde: se si tratta di un edificio di tipo commerciale – Rosso: se si tratta di un edificio militare – Blu: se si tratta di un edificio ecclesiastico – Viola: se è un edificio di tipo speciale (che offre particolari bonus)

4 Regole di Citadels (2/4) Il gioco può essere suddiviso in 3 fasi: 1.Inizio del gioco: vengono distribuite 2 monete doro e 4 carte distretto ad ogni giocatore. 2.Turni di gioco: viene consegnata la corona del re ad un giocatore: egli sarà il primo a scegliere un personaggio. Nel primo turno la corona viene data al primo giocatore, in seguito verrà data a chi nel turno precedente ha scelto il re. Successivamente i giocatori, a partire da chi ha la corona, sceglieranno un personaggio (alcuni personaggi potrebbero essere stati scartati a seconda del numero di giocatori). Infine i giocatori giocheranno in base allordine stabilito dai personaggi scelti, eseguendo 3 azioni: 1.Prelevare 2 monete doro dalla banca oppure pescare due carte edificio e scartarne una. 2.Eseguire le azioni tipiche del proprio personaggio (opzionale) 3.Costruire un edificio. Questo viene fatto pagando alla banca il numero di monete indicate sulla carta distretto e posizionando la carta sul tavolo davanti a sé, in quella che viene detta la propria città.

5 Regole di Citadels (3/4) Le azioni tipiche dei personaggi sono le seguenti, elencate secondo lordine di gioco dei personaggi stessi: 1.Assassin: può uccidere un altro personaggio, facendo saltare il turno alleventuale giocatore corrispondente. 2.Thief: può derubare un personaggio. Quando sarà il turno del personaggio derubato, questi per prima cosa consegnerà i propri soldi al ladro. Non può derubare lassassino o lassassinato. 3.Magician: può scambiare tutte le proprie carte con quelle di un altro giocatore oppure scartarne alcune e pescarne in pari numero dal mazzo. 4.King: guadagna una moneta per ogni distretto giallo della propria città. Avrà la corona al prossimo turno.

6 Regole di Citadels (4/4) 5.Bishop: guadagna una moneta per ogni distretto blu della propria città. Gli edifici della sua città non possono essere distrutti dal guerriero nel turno corrente. 6.Merchant: guadagna sempre una moneta, in più ne guadagna una per ogni distretto verde della propria città. 7.Architect: può costruire un distretto in più. 8.Warlord: guadagna una moneta per ogni distretto rosso della propria città. Può distruggere un distretto a propria scelta, nelle città degli avversari o anche nella propria, pagando una moneta in meno rispetto al costo del distretto. Non può distruggere un distretto di una città giù completata. 3.Calcolo dei punteggi finali: ognuno ottiene un numero di punti pari alla somma dei valori dei distretti della propria città. Il primo a costruire 8 distretti ottiene un bonus di 4 punti, gli eventuali altri ne ottengono 2. Si ottiene un bonus di 3 punti se si hanno distretti di tutti e 5 i colori.

7 Un linguaggio per Citadels E stato realizzato un linguaggio che consente di descrivere una partita a Citadels utilizzando un gergo il più possibile vicino a quello utilizzato in una partita reale. In alcune parti sono state introdotte delle parentesi graffe per raggruppare le diverse fasi del gioco al fine di migliorare la leggibilità delle frasi senza pesare sulla notazione. Nelle slides seguenti è riportata la grammatica EBNF proposta. Infine viene descritto lo sviluppo di un interprete per tale linguaggio.

8 Grammatica EBNF (1/6) ::= ( )+ EndGame ::= players {,,, [, [, ] ] } ::= player1 is ::= player2 is ::= player3 is ::= player4 is ::= player5 is ::= player6 is ::= setup { [ [ ] ] } ::= := districts: given to ::= coins: given to Scopo FASE 1 In rosso e blu i simboli non terminali (VN) In verde i simboli terminali (VT)

9 Grammatica EBNF (2/6) ::= turn { } ::= crown given to: ::= ( )* [ [ ] ] ::= discarded face-down: ::= discarded face-up: ::= character: chosen by ::= FASE 2

10 Grammatica EBNF (3/6) ::= - { ::= 1-Assassin is ( | ) } ::= { [ ] [ ] ::= 2-Thief is ( | ) } ::= { [ [ ] [ ] ] ::= 3-Magician is ( | ) } ::= { [ [ ] [ ] ] ::= 4-King is ( | ) } ::= { [ from yellow districts [ ] ] ::= 5-Bishop is ( | ) } ::= { [ from blue districts [ ] ]

11 Grammatica EBNF (4/6) ::= 6-Merchant is ( | ) } ::= { [ from green districts [ ] ] ::= 7-Architect is ( | ) } ::= { [ [ [ ] ] ] ::= 8-Warlord is ( | ) } ::= { [ from red districts [ ] [ ] ] ::= | ::= ::= draw: ::= discard: ::= build: ::= earn coins:

12 Grammatica EBNF (5/6) ::= kill: ::= rob: ::= | ::= exchange cards with: ::= change cards ( ) ::= [ ] ::= destroy: from city of ::= end. FASE 3 Self-embedding

13 Grammatica EBNF (6/6) ::= assassin | thief | magician | king | bishop | merchant | architect | warlord ::= (,,, ) ::= ([a-z, A-Z, _ ]) + # [1-6] ::= yellow | blue | green | red | purple ::= [1-8] ::= [a-z, A-Z]([a-z, A-Z, 0-9])* ::= [0-9]

14 Considerazioni sulla grammatica Tutte le produzioni della grammatica sono nella forma: A α con A VN, α (VN U VT) + che corrisponde alla definizione di Chomsky di grammatica tipo 2 Il linguaggio generato da tale grammatica è regolare (di tipo 3)? NO: in quanto la grammatica presenta una produzione con self- embedding, perciò non esiste una grammatica regolare equivalente

15 Tutte le produzioni della grammatica sono nella forma: A α con A VN, α (VN U VT) + che corrisponde alla definizione di Chomsky di grammatica tipo 2 Il linguaggio generato da tale grammatica è regolare (di tipo 3)? NO: in quanto la grammatica presenta una produzione con self- embedding, perciò non esiste una grammatica regolare equivalente ed il linguaggio è di tipo 2 (context-free). ::= [ ] Considerazioni sulla grammatica Self-embedding

16 Il linguaggio considerato comprende la stringa vuota? NO: per due motivi 1.Alcune produzioni comprendono a destra delle parti opzionali. Queste comunque non rendono mai la parte destra delle produzioni vuota, quindi non si rende necessaria leliminazione delle ξ-rules che potrebbe portare la stringa vuota a livello di scopo della grammatica. Anche riscrivendo le produzioni in modo da far apparire le ξ-rules si può notare che è sempre possibile eliminare la ξ senza doverla propagare fino allo scopo Ad esempio esplicitando le ξ-rules in ThiefPlay: ::= { ::= | | | | ξ ::= { | { ::= | | | 2.La stringa vuota non è stata aggiunta allo scopo della grammatica in quanto una partita a Citadels vuota non ha molto senso. La stringa vuota

17 Determinismo del riconoscitore Come notato in precedenza il linguaggio è di tipo 2 quindi è riconoscibile da un push-down automaton. E possibile inoltre notare che gli starter symbols corrispondenti alle parti destre di più produzioni alternative (aventi nella parte sinistra il medesimo simbolo non terminale) sono insiemi disgiunti. Queste produzioni non generano ξ perciò non è necessario ricorrere ai director symbols. ::= 1-Assassin is ( | ) } SS(None)={-} SS(AssassinPlay)={ }={[a-z, A-Z]}

18 Determinismo del riconoscitore ::= 1-Assassin is ( | ) } SS(None)={-} SS(AssassinPlay)={ }={[a-z, A-Z]} ::= | SS(Earn)={earn} SS(Cards)=SS(Draw)={draw: } ::= | SS(Exchange)={exchange } SS(DiscardCards)={change } La grammatica considerata è quindi LL(1) in quanto è sufficiente leggere un solo token per sapere con certezza quale produzione applicare

19 Linterprete del linguaggio Linterprete del linguaggio realizzato è un PDA deterministico e si occupa del riconoscimento delle frasi del linguaggio e della loro esecuzione in base alla semantica associata ad esse. Si compone di tre parti: Un componente atto allanalisi lessicale (lexer) Un componente atto allanalisi sintattica (parser) Un componente atto allanalisi semantica e allesecuzione delle azioni ricavate da essa (realizzato tramite il pattern visitor) Gli strumenti utilizzati sono: Java 1.5, Eclipse, JavaCC 4.0, JTB 1.3.2

20 Architettura

21 I package Il package gui: contiene le classi che realizzano linterfaccia grafica principale dellinterprete e quelle che consentono la visualizzazione dei risultati Il package listener: contiene le classi che gestiscono gli eventi provenienti dalla gui Il package citadin: contiene le entità del dominio, cioè di una partita a citadels Il package parser: contiene lanalizzatore lessicale e sintattico Il package visitor: contiene gli analizzatori semantici Il package syntaxtree: contiene le classi necessarie a realizzare lalbero sintattico su cui eseguire il visitor Il package resources: contiene le classi necessarie al reperimento delle risorse (immagini, file di testo)

22 Il package citadin Contiene le seguenti classi: Character: enumerativo contenente tutti i possibili personaggi del gioco DistrictColor: enumerativo contenente tutti i possibili colori delle carte distretto District: classe che rappresenta una carta distretto, avente un nome, un costo, un valore e un colore. Prima di creare una nuova carta verifica se i dati della carta sono ammissibili confrontandoli con quelli contenuti in un file che elenca le possibili carte del gioco. Player: classe che rappresenta un giocatore avente un nome, delle carte in mano, dei distretti costruiti e un personaggio corrente. Gamestatus: rappresenta lo stato di una partita. Contiene lelenco dei giocatori e delle carte in gioco e consente di verificare il corretto svolgimento del gioco.

23 Il package visitor Le classi fondamentali che contiene sono: Visitor: interfaccia che stabilisce quali metodi deve implementare un visitor per poter navigare lAbstract Parse Tree ottenuto dal parser di Citadin GameVisitor: classe che implementa linterfaccia visitor. Si occupa dellanalisi semantica (verifica che la frase abbia senso nella partita corrente e che non vi siano violazioni delle regole del gioco), dellaggiornamento dello stato della partita e del calvolo del risultato. GraphicalVisitor: sottoclasse di GameVisitor, che estende al fine di dare una rappresentazione grafica allo stato della partita e al risultato TextualVisitor: sottoclasse di GameVisitor, che estende al fine di visualizzare una descrizione testuale del risultato

24 Pattern visitor: un metodo visit per ogni classe rappresentante un nodo dell APT Gui del tavolo da gioco con le città Una gui per ogni giocatore

25 Possibili sviluppi Aggiunta delle nuove carte distretto delle estensioni di citadels Aggiunta dei nuovi personaggi delle estensioni di citadels Supporto alle regole speciali per 2 e 7 giocatori Possibilità di generazione automatica delle frasi del linguaggio a partire da eventi della gui per avere uninterfaccia più interattiva


Scaricare ppt "Un linguaggio ed un interprete per il gioco Citadels Progetto di: Zapparoli Pamela per Linguaggi e modelli computazionali LS."

Presentazioni simili


Annunci Google