LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE...

27
LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli Computazionali L-S A.A. 2010-2011 Alessandro Pernafini

Transcript of LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE...

Page 1: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI

LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER

FANTASY

WarArmy

Linguaggi e Modelli Computazionali L-SA.A. 2010-2011Alessandro Pernafini

Page 2: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Introduzione

Warhammer Fantasy è un gioco di battaglie fantasy Il gioco si svolge su un plastico raffigurante un campo di battaglia,

sul quale due o più giocatori si sfidano l'uno con l'altro con le rispettive armate di miniature in plastica o in metallo

Ogni armata appartiene ad un esercito ed è formata da diverse unità, ognuna con caratteristiche diverse

Prima dell'inizio della partita i giocatori scelgono il punteggio massimo entro il quale deve essere scelta la composizione dell'armata

Ogni pezzo schierato ha un proprio valore in punti dipendente dalla sua potenza e indicato nei manuali relativi a ciascun esercito

Ogni armata deve essere costruita con dei criteri fondamentali relativi alla funzione di ciascuna unità che la compone

Per mostrare la composizione dell’armata viene creata una lista che contiene le varie unità schierate e l’eventuale equipaggiamento aggiuntivo che viene dato loro

Page 3: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Caratteristiche del linguaggio

Il linguaggio dovrà permettere di specificare:Informazioni sull’esercito

Nome Descrizioni delle unità Elenco degli oggetti magici Elenco degli stendardi Elenco dei poteri extra(se l’esercito li prevede)

Struttura della lista dell’armata che si vuole schierare Nome dell’armata Esercito a cui fa riferimento Limite di punti spendibili Elenco delle unità selezionate

Page 4: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Obiettivi

Progettare un sistema che permetta di definire la struttura di un esercito con la descrizione di ogni singola unità per la successiva creazione di una lista delle unità da schierare nel corso di una partita

Sviluppare un linguaggio semplice e di facile utilizzo per un giocatore che può essere suddiviso in due parti:

Definizione di un esercito Creazione di una lista

Realizzare un interprete che, data una stringa di caratteri in ingresso, ne valuti la correttezza sintattica e semantica e produca una struttura dati per mantenere le informazioni in memoria

Realizzare una interfaccia grafica a supporto dell’inserimento di informazioni

Possibilità di stampare in PDF la lista dell’armata

Page 5: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Grammatica(1)

WarArmy ::= ( ArmyDef | ArmyList ) Scope

ArmyDef ::= "army" Text <LPAR> ( UnitDesc )+ MagicItemList MagicStandardList ( ExtraPowerList )? <RPAR>

Strutturaesercito

UnitDesc ::= "unit" Text <LPAR> UnitSize Cost <TYPE> ( SpecialRules )? ( OptionDef )* ( MagicPoints )? ( StandardsPoints )? ( ExtraPoints )? <RPAR>

Struttura unità

MagicItemList ::= "magic" "items" <LPAR> ( Text Cost )+ <RPAR>Lista di oggetti magici

MagicStandardList ::= "standards" <LPAR> ( Text Cost )+ <RPAR>Lista di

stendardi

Page 6: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Grammatica(2)

ExtraPowerList ::= "extra" "powers" <LPAR> ( Text Cost )+ <RPAR>

Lista di poteri extra

UnitSize ::= "size" <NUM> ( ( <PLUS> | <MINUS> <NUM> ) )? Cost ::= "points" <NUM> ( <XMOODEL> )? SpecialRules ::= "special" StringSequence OptionDef ::= "option" Text Cost <OPTIONTYPE> MagicPoints ::= "magic" "items" "points" <NUM> StandardsPoints ::= "standards" "points" <NUM> ExtraPoints ::= "extra" "points" <NUM>

Descrizione unità

Text ::= ( <STRING> )+StringSequence ::= Text ( <COMMA> Text )*

Stringhe di input

Page 7: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Grammatica(3)

ArmyList ::= "armylist" Text <LPAR> "army" Text <NUM> "points" ( Unit )+ <RPAR>

Struttura lista

dell’armata

Unit ::= "unit" Text <LPAR> Models ( Options )? ( MagicItems )? ( Standards )? ( ExtraPowers )? <RPAR>

Struttura di un’unità

inserita nella lista

Models ::= "models" <NUM> Options ::= "options" StringSequence MagicItems ::= "magic" "items" StringSequence Standards ::= "standards" StringSequence ExtraPowers ::= "extra" "powers" StringSequence

Descrizione di un’unità

inserita nella lista

Page 8: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Grammatica (4)

<NUM: "0" | ["1"-"9"] (["0"-"9"])*> <TYPE: "L" | "H" | "CU" | "SU" | "RU"> <XMOODEL: "xmodel"> <PLUS: "+"> <MINUS: "-"> <LPAR: "{"> <RPAR: "}"> <OPTIONTYPE: "weapons" | "armors" | "upgrades" | "mounts" | "extras"> <COMMA: ","> <STRING: (["a"-"z","A"-"Z","\'","_",".","!","?","(",")","0"-"9","\u00e0","\u00f2","\u00f9","\u00e8","\u00e9","\u00ec"])+> }

Token

Tipo dell’unità: “lord”, “hero”, “core unit”, “special unit”,

“rare unit”

Riferito al costo: se presente andrà moltiplicato

per il numero di modelli presenti nell’unità

Page 9: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Esempio di esercito

army Orcs and Goblins{unit Ozag Greenskin{

size 1points 375Lspecial Immune to Psychology, Hates Everybody, Da Immortulzoption great axe

points 6weapons

magic items points 100standards points 50extra points 50

}

unit Orc Shaman {size 1points 65Hoption boar

points 16mounts

option 2nd level wizardpoints 35upgrades

magic items points 50}

unit Goblins{ size 2-20 points 20 xmodel CU special Immune to Psychology, Stubborn }

unit Orc Chariot {size 1points 80SUspecial Tusker Chargeoption additional orc crew

points 5extras

}

unit Titan {size 1points 205RUspecial Large Target, Terror, Stubborn,

Longshanks, Fall Over, Giant Special Attacks}

magic items {

Sword of Striking points 15Sword of Battle points 15

}

standards {Spirit Totem points 50Big Red Banner points 50

}

extra powers{High Strength 20High Constitution 20

}}

UnitDesc

UnitSizeCostType

SpecialRulesOptionDe

fMagicPoints

StandardsPoints

ExtraPoints

MagicItemList

MagicStandardList

ExtraPowerList

Page 10: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Esempio di lista dell’armata

armylist mylist{

army Orcs and Goblins1000 points

unit Night Goblin Shaman{models 1options 2nd level wizardmagic items Tricksy Trinket

}

unit Night Goblins{models 50options musician, standard bearer, goblin boss

}

unit Night Goblins{models 20options nets

}

unit Night Goblin Squig Herd{models 3

}}

ArmyList ::= "armylist" Text <LPAR> "army" Text <NUM> "points" ( Unit )+ <RPAR>

Unit ::= "unit" Text <LPAR> Models ( Options )? ( MagicItems )? ( Standards )? ( ExtraPowers )? <RPAR>

Page 11: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Grammatica e linguaggio

Grammatica: la grammatica è di tipo 2 (context free) secondo la classificazione di Chomsky. Infatti ci sono produzioni vincolate alla forma:A → α con α є (VT U VN)* ed A є VN

Linguaggio : il linguaggio generato risulta essere di tipo 3 perché la grammatica non contiene self-embedding

Page 12: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Grammatica e linguaggio(2)

La grammatica è priva di ε-rules e la stringa vuota non può essere generata nemmeno a livello di scope in quanto sarebbe stato inutile definire o un esercito o una lista vuoti.Inoltre gli insiemi degli starter symbols corrispondenti alle parti destre delle produzioni alternative di uno stesso metasimbolo sono fra loro disgiunti, quindi il linguaggio risulta essere LL(1)

Page 13: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Schema di funzionamento(1)

Sequenza di caratteri

WarArmyParserTokenManager

Lexer

Sequenza diToken

WarArmyParser

Parser

AST

Page 14: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Schema di funzionamento(2)

ASTData

Structure

Visitor

TreeVisitor

Page 15: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Strumenti utilizzati

Linguaggio di programmazione Java jdk 1.7.0

Ambiente di sviluppo Eclipse Indigo

Generazione del parser e dello scanner JavaCC Eclipse plugin 1.5.17

Generazione delle classi necessarie a creare l’AST e del pattern visitor JTB 1.4.4

Creazione di file PDF Libreria itext 5.1.3

Page 16: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Architettura: Packages

•parser: contiene le classi relative allo scanner ed al parser generate da JavaCC•syntaxtree: contiene le classi utilizzate per la creazione dell’AST generate da JTB•visitor: contiene le classi generate da JTB e le implementazioni dell’interfaccia IVoidVisitor•exceptions: contiene le classi che rappresentano le varie eccezioni semantiche•wararmy: contiene le classi per l’elaborazione e per rappresentare la struttura in memoria •gui: contiene le classi relative alle interfacce grafiche

Page 17: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Architettura: parser

Il package “parser” contiene le classi relative al Lexer, al Parser ed alle eccezioni sintattiche Parser:

Realizzato da JavaCC; Rapporto Client/Server col Lexer; Restituisce l’albero generato, in modo che i vari visitor

possano visitarlo ed interpretarlo.

Il package “syntaxtree”contiene le classi che rappresentano i nodi dell’albero, in particolare una per ogni metasimbolo della grammatica

Page 18: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Architettura: visitor

Nel package visitor si trovano due classi che implementano l’interfaccia IVoidVisitor generata da JTB.Entrambi i visitor effettuano un’analisi depth-first dell’AST generato dal parser avvalendosi del meccanismo di double dispatch. Le classi presentano un metodo visit() per ogni classe dell’AST le quali, a loro volta, prevedono un metodo accept() che rimpalla l’azione sul visitor passando se stesso come oggetto da visitare

DataStructureVisitor effettua un’analisi semantica e, se non ci sono stati errori semantici, produce una rappresentazione dell’esercito o della lista creati, altrimenti lancia una SemanticException

TreeVisitor solo se l’analisi semantica è andata a buon fine, produce una rappresentazione dei dati inseriti sotto forma di albero

Page 19: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Controlli semantici: esercito

Il DataVisitor effettua i seguenti controlli semantici:

• il nome di un’unità deve essere unico• la dimensione minima di un’unità deve essere

minore della dimensione massima• non ci possono essere regole speciali duplicate per

una singola unità• non ci possono essere nomi di opzioni duplicati per

una singola unità• non ci possono essere oggetti magici, stendardi o

poteri extra duplicati

Page 20: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Controlli semantici: lista(1)

Il DataVisitor effettua i seguenti controlli semantici:

• l’esercito a cui la lista fa riferimento deve essere stato definito

• un’unità inserita deve:• essere stata definita nell’esercito a cui la lista fa

riferimento• il numero di modelli che compongono l’unità deve

rispettare le dimensioni indicate nella descrizione dell’unità

• il costo degli oggetti magici, stendardi o poteri extra assegnati all’unità non deve superare il rispettivo limite definito nella descrizione dell’unità

• un’opzione, oggetto magico, stendardo o potere extra assegnato ad un’unità deve essere stato definito nell’esercito a cui la lista fa riferimento

Page 21: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Controlli semantici: lista(2)

Il DataVisitor effettua i seguenti controlli semantici:

• nella lista deve essere presente almeno un’unità di tipo H o L • nella lista devono essere presenti almeno tre unità di tipo CU,

SU o RU • il costo totale della lista non deve superare il limite di punti

imposto • la somma dei costi delle unità di tipo H, L, RU non deve essere

superiore al 25% del limite di punti imposto• la somma dei costi delle unità di tipo SU non deve essere

superiore al 50% del limite di punti imposto• la somma dei costi delle unità di tipo CU non deve essere

inferiore al 25% del limite di punti imposto• non si possono inserire più di 3 unità uguali di tipo SU• non si possono inserire più di 2 unità uguali di tipo RU

Page 22: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

L’interfaccia grafica(1)

Area di input

Albero

Area di outputErrore

semantico

Errore sintattic

o

Page 23: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Interfaccia grafica(2)

Form per la creazione di un nuovo esercito

Alla pressione effettua dei

controlli sulla validità dei dati

inseriti

Form per la creazione di un’unità da

aggiungere all’esercito

Page 24: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Interfaccia grafica(3)

Form per la creazione di una lista

Alla pressione effettua dei

controlli sulla validità dei dati

inseriti

Page 25: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Collaudo

Il sistema è stato collaudato attraverso l’immissione di opportune frasi di input per:• verificare la corretta segnalazione di errori

sintattici• verificare la corretta segnalazione di errori

semantici• verificare la corretta visualizzazione dell’albero• verificare la corretta generazione del documento

PDF

Il sistema è stato testato anche da “esperti del settore”, ma privi di una qualsiasi competenza in ambito di programmazione, ei quali hanno giudicato positivamente l’applicazione Grazie ai loro test, sono riuscito a trovare alcuni bug che, altrimenti, non sarebbero venuti alla luce.

Page 26: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

Sviluppi futuri

•Introduzione di sotto-opzioni da assegnare ad un’opzione relativa ad un’unità dell’esercito•Aggiungere la possibilità di definire costi di tipo frazionario così come previsto per alcuni eserciti dalla nuova edizione del regolamento•Possibilità di caricare al momento dell’apertura gli eserciti già inseriti così da non dover ripetere ogni volta la procedura•Estendere il supporto al gioco Warhammer 4K

Page 27: LINGUAGGIO PER LA DESCRIZIONE DI ESERCITI E LA CREAZIONE DI LISTE PER IL GIOCO DI BATTAGLIE TRIDIMENSIONALI WARHAMMER FANTASY WarArmy Linguaggi e Modelli.

DEMO

Orco grozzo vuole combattere!

Demo