Descrizione Del Problema Editor di giochi: Architettura
predefinita; Regole Personalizzabili; Utilizzo di BOT: Random
(Stupidi); Guidati da euristiche (Intelligenti);
Slide 3
Definizione delle regole Creazione dello stato iniziale File
XML di configurazione Inizializzazione del gioco Esecuzione del
gioco Scrittura Lettura RulesGame Language JAXBJAXB tuProlog
PercorsoParser
Slide 4
Architettura Predefinita Due schieramenti: Attaccanti: devono
raggiungere un TOT di obiettivi; Difensori: devono ostacolare ed
eliminare gli attaccanti; Tipologie di caselle: Causano effetti sia
positivi che negativi ai giocatori che le attraversano; Entit
Passive: Interagiscono con i giocatori che si fermano su di esse;
Numero di Mosse: Il numero di mosse viene deciso in modo random a
run-time
Slide 5
Architettura Predefinita Si utilizza il linguaggio Prolog per
creare larchitettura di base; Sono quattro le regole principali del
sistema: Lo spostamento del giocatore; La gestione dei turni; I BOT
random; I BOT guidati da euristiche;
Slide 6
Lo stato corrente
Slide 7
RulesGame Language Nasce il bisogno di un linguaggio semplice e
facilmente comprensibile sia da utenti principianti che utenti
esperti di programmazione, per creare regole personalizzate di
(quasi) qualsiasi tipo per un gioco. Il gioco non sar completamente
implementabile: una parte del sistema pre-implementato, e definisce
larchitettura di base. Alcune regole di base potranno essere
superate da utenti esperti del linguaggio Prolog, che potranno
scrivere le regole in modo che il sistema si comporti in modo
completamente personalizzato.
Slide 8
RulesGame Language Token della grammatica:
Slide 9 "> "> " title="RulesGame Language Token della
grammatica: ","=","+","*","/","^","\\","%"])+("}") >">
RulesGame Language Token della grammatica:
","=","+","*","/","^","\\","%"])+("}") >
Slide 10
RulesGame Language Produzioni della grammatica: Scopo::=Regole
Inizializzazione Regole::=Caselle Giocatori EntitaPassive
Caselle::= (RegolaCasella)+ Giocatori::=Attaccanti Difensori
Attaccanti::= Info Euristica Obiettivi Difensori::= Info Euristica
EntitaPassive::= (RegolaEntitaPassiva)*
Slide 11
RulesGame Language Produzioni della grammatica:
RegolaCasella::= Nome ( | Codice) Info::= | | Codice Euristica::=
|Codice Obiettivi::= RegolaEntitaPassiva::= Nome ( | | | | |
Codice) ( | | | | | Codice) Codice::= Nome::=
Slide 12
RulesGame Language Produzioni della grammatica:
Inizializzazione::= Griglia Mosse Griglia::= (Casella)+ Casella::=
Nome ( |Nome) (Attaccante|Difensore| ) Attaccante::= ( Bot )?
Difensore::= ( Bot )? Mosse::= Bot::=
Slide 13
RulesGame Language-esempio 1/5 caselle [ libero:windefender
bloccato:block ] Per prima cosa si creano le tipologie di caselle,
definendo il nome del tipo e quali sono gli effetti
dellattraversamento su una di esse. NomeEffetto Pu essere
sostituito da codice Prolog, racchiuso tra graffe, per maggiori
info vedere il manuale.
Slide 14
RulesGame Language-esempio 2/5 attaccanti [ nothing scorenemies
1 ] Si definiscono informazioni aggiuntive, euristica e obiettivi
dello schieramento attaccanti. Pu essere sostituito da codice
Prolog, racchiuso tra graffe, per maggiori info vedere il manuale.
Informazioni Euristica Obiettivi
Slide 15
RulesGame Language-esempio 3/5 difensori [ nothing scorenemies
] Pu essere sostituito da codice Prolog, racchiuso tra graffe, per
maggiori info vedere il manuale. Informazioni Euristica Si
definiscono informazioni aggiuntive, euristica dello schieramento
difensori.
Slide 16
RulesGame Language-esempio 4/5 entitapassive [ fine: attaccante
score difensore nothing ] Si definiscono le entit passive: nome,
effetto sullattaccante ed effetto sul difensore per ognuna. Pu
essere sostituito da codice Prolog, racchiuso tra graffe, per
maggiori info vedere il manuale. Effetto Attaccante Effetto
Difensore Nome
Slide 17
RulesGame Language-esempio 5/5 inizializzazione [
1,1:libero,nothing,attaccante1 1,2:libero,nothing,nothing...
2,3:libero,nothing,difensore1(bot,true)
3,1:bloccato,nothing,nothing 3,2:libero,nothing,nothing
3,3:libero,fine,nothing mosse:2 ] Infine si crea lo stato iniziale.
Colonna Riga Tipo casella Entit passiva Nome giocatore Definizione
BOT Max Mosse
Slide 18
RulesGame Language Poich il linguaggio non presenta
self-embedding esso una linguaggio di tipo 3. La grammatica appena
presentata di tipo 2, poich non lineare ne a destra ne a sinistra,
per facile trasformarla in una grammatica lineare a destra,
semplicemente eliminando un sacco di simboli non terminali, che
sono stati utilizzati per avere maggiore chiarezza. Scopo::=Regole
Inizializzazione Regole::=Caselle Giocatori EntitaPassive
Caselle::= La soluzione pessima in quanto a leggibilit e
chiarezza.
Slide 19
RulesGame Language Altra soluzione, cambiando un poco la
grammatica: Scopo::= Caselle::= Prima produzione pi pulita e chiara
Caselle Giocatori EntitaPassiveRegoleInizializzazione
Slide 20
RulesGame Language File di configurazione XMLRegole ed
inizializzazione
Slide 21
JAXB:Java Architecture for XML Binding JAXB permette agli
sviluppatori java di accedere e processare I dati XML senza
conoscere XML; per esempio non c bisogno di creare o usare un
parser SAX oppure scrivere metodi di callback.
Slide 22 "> "> " title="File XSD di esempio-RulesGame.xsd
">
File XSD di esempio-RulesGame.xsd
Slide 23
JAXB:creare le classi java da file XSD (Binding a schema) Fare
il binding di uno schema significa generare un set di classi java
che lo rappresentano. Ogni classe avr dei metodi get e set per gli
attributi ed elementi interni allelemento XML corrispondente.
Slide 24
JAXB:scrivere un file XML Per scrivere un file XML bisogna
creare unistanza del XmlRootElement ed inizializzarla a dovere
(utilizzando le set). Infine utilizzare un istanza della classe
Marshaller (si ottiene dal JABXContext) per creare il file XML
corrispondente.
Slide 25
JAXB:scrivere un file XML-esempio 1/3 try { // la stringa
jaxb.parser rappresenta il package delle classi create con JAXB
JAXBContext jc = JAXBContext.newInstance("jaxb.parser");
jaxb.parser.ObjectFactory factory=new jaxb.parser.ObjectFactory();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,new
Boolean(true)); jaxb.parser.Gioco gioco=factory.createGioco();
//creazione del XmlRootElement
Slide 26
JAXB:scrivere un file XML-esempio 2/3 jaxb.parser.Regole
regole=factory.createRegole(); jaxb.parser.Bots
bots=factory.createBots();
regole.setStatoIniziale("["+statoCaselle+","+statoAttaccanti+","+statoDifensori
+","+statoTurno+"]"); regole.setMosse(mosse);//mosse un intero
regole.setBOTS(bots); gioco.setMotore(motore);//motore una stringa
gioco.setRegole(regole);
JAXB:leggere un file XML Per leggere un file XML bisogna creare
unistanza dellUnmarshaller (si ottiene dal JABXContext), dal quale
ricaveremo lXmlRootElement. Quindi tramite le get sar possibile
accedere a tutti i campi del file XML.
Slide 29
JAXB:leggere un file XML-esempio 1/2 JAXBContext jc =
JAXBContext.newInstance("jaxb.parser"); //creazione
dellUnmarshaller Unmarshaller unmarshaller =
jc.createUnmarshaller(); //creazione del RootElement dal file XML
Gioco gioco=(Gioco)unmarshaller.unmarshal(new File(nomeFile));
//getMotore restituir una stringa
writer.println(gioco.getMotore());
Slide 30
JAXB:leggere un file XML-esempio 2/2 JAXBContext jc =
JAXBContext.newInstance("jaxb.parser"); Unmarshaller unmarshaller =
jc.createUnmarshaller(); Gioco
gioco=(Gioco)unmarshaller.unmarshal(new File(nomeFile)); Regole
regole=gioco.getRegole(); Bots bots=regole.getBOTS(); List
list=bots.getBOT(); statoCorrente=new
Stato(regole.getStatoIniziale(),list);
MAX_MOSSE=regole.getMosse();
Slide 31
JAXB-conclusioni JAXB risulta molto utile e facile da
utilizzare; in questo modo si riesce a disaccoppiare totalmente il
programma java dalla sintassi XML dei file utilizzati. Inoltre un
vantaggio non da poco dato dalla creazione e lettura di file
tramite tecniche che utilizzano un XSD Schema: difatti lXML verr
scritto seguendo le regole dettate nello schema, e, in automatico,
verr validato allatto della lettura, dando una eccezione nel caso
di validazione errata. XSD inoltre permette maggiori vincoli nei
confronti di DTD, quindi maggiori vincoli sintattici. Sito di
approfondimento:
http://www.oracle.com/technetwork/articles/javase/index-
140168.html#introjb JAXB scaricabile da:
http://www.oracle.com/technetwork/java/1-6-136288.html Per
utilizzare al meglio JAXB consiglio il plugin eclipse XJC:
http://www.webmanie.de/cms158/index.php?option=com_content&view=article&id=13&Itemid=0
Slide 32
Inizializzazione ed esecuzione del gioco Nel file XML di
configurazione sono presenti alcune informazioni utili per: Creare
il motore del gioco Informazioni allinterno del file XML;
Architettura di base gi implementata; Inizializzare il gioco Stato
iniziale (in formato Prolog); Mosse massime per giocatore; Lista
dei bot;
Slide 33
tuProlog-il motore del sistema La comunicazione tra motore ed
applicazione gestita da tuProlog, e le query fatte al motore Prolog
possono essere di 4 tipologie: Richiesta di spostamento Prossimo
turno Spostamento Bot Random Spostamento Bot con Euristica
tuProlog-query Spostamento Bot Random
movimentoCasualeBot(MaxMovimento, Siniziale, Sfinale, SUCCESS)
Spostamento Bot con Euristica movimentoEuristicoBot(Mosse,
Siniziale, Sfinale, Profondita, SUCCESS)
Slide 36
PercorsoParser Il compito di questo compilatore di trasformare
una stringa rappresentante lo spostamento richiesto da parte
dellutente attraverso la griglia di gioco, in una corretta
rappresentazione del tragitto in Prolog, e quindi utilizzabile
correttamente nella query al motore del gioco tramite tuProlog.
up,right,downUtente nella casella 3,4:
Prolog:[transito(on(2,4)),transito(on(2,5)),fine(on(3,5))]
Slide 37
PercorsoParser SF S F | F, S Grammatica Tipo 3: Linguaggio Tipo
3 Automa Riconoscitore top down Espressione regolare: (,)* -top
down
Slide 38
PercorsoParser IS I | S S, I Grammatica Tipo 3: Linguaggio Tipo
3 Automa Riconoscitore bottom up Espressione regolare: (, )*
-bottom up
Slide 39
Possibili sviluppi futuri Aggiungere nuove funzionalit di base
tramite la costruzione di regole personalizzate. Modificare
larchitettura Prolog di modo che possa sostenere anche altre
tipologie di gioco (con un relativo aumento del delay per Bot
Euristici). Creazione di una interfacca utente personalizzata,
correlata alle regole implementate, utilizzando la buona modularit
del sistema.