Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti
Sono programmi per computer che simulano un ambiente nel quale i giocatori usano comandi testuali per istruire il personaggio della storia ad interagire con l'ambiente in cui si trova. (Da Wikipedia)Wikipedia Caratterizzate da: Scopo Ambiente di gioco Stanze esplorabili Oggetti Inventario Obiettivo: Il giocatore deve esplorare lambiente di gioco e interagire con esso fino al completamento dello scopo dellavventura.
Realizzare un interprete per avventure testuali Riconoscere le frasi di gioco Eseguire le azioni corrispondenti
Tipologie di azioni: Movimento Raccolta Vista Utilizzo
Tipologie di azioni: Movimento Raccolta Vista Utilizzo Esempi: vai cantina - vai in cantina – vai nella cantina cammina verso cantina spostati verso tetto – spostati sul tetto
Tipologie di azioni: Movimento Raccolta Vista Utilizzo Esempi: prendi stivali – prendi gli stivali raccogli martello – raccogli il martello
Tipologie di azioni: Movimento Raccolta Vista Utilizzo Esempi: guarda la spada - guarda inventario osserva spada esamina cantina
Tipologie di azioni: Movimento Raccolta Vista Utilizzo Esempi: usa spada – usa la spada usa la spada su cattivo – usa spada cattivo utilizza il martello – utilizza il martello con le mura
Azione ::= ( Movimento | Raccoglimento | Vista | Utilizzo ) ; Movimento ::= Compl_movimento Compl_movimento ::= ( )? TOKEN : { } Raccolta ::= Compl_oggetto Compl_oggetto ::= ( )? TOKEN : { } Vista ::= Compl_oggetto TOKEN : { } Utilizzo ::= Compl_oggetto ( Compl_uso )? TOKEN : { } Compl_uso ::= ( )? ( )? TOKEN : { } TOKEN : { )+> | }
La struttura delle produzioni è vincolata alla forma Aα, conα(VT VN)*,A VN Grammatica di Tipo 2 Nessun simbolo non terminale è self-embedded Linguaggio generato di Tipo 3 (Regolare) Nessun simbolo non terminale genera la stringa vuota; per ogni simbolo non terminale che appare nella parte sinistra di più produzioni, gli starter symbol appartenenti alle parti destre delle produzioni alternative sono disgiunti Grammatica LL(1)
Scopo Oggetti Stanze Inventario Stato Stanza corrente Introduzione
Un visitor che evolve stato del gioco in base allazione eseguita Azione Movimento
Un visitor che evolve stato del gioco in base allazione eseguita Azione Raccolta
Un visitor che evolve stato del gioco in base allazione eseguita Azione Vista
Un visitor che evolve stato del gioco in base allazione eseguita Azione Utilizzo
Utilizzo del PlayVisitor fino alla condizione di terminazione
Gioco cablato nel codice
Ogni gioco ha la sua intro, le sue stanze e i suoi oggetti FACILE: istanze Ma anche un determinato scopo......e ogni oggetto ha un uso diverso! DIFFICILE: comportamento
1.Lettura informazioni di gioco da file esterno 2.Creazione di classi specifiche 3.Istanziamento stanze e oggetti
Start ::= DescrizioneGioco StanzaIniziale Oggetti Stanze DescrizioneGioco ::= Introduzione CondizioneTerminazione Introduzione ::= "INTRODUZIONE:" Descrizione CondizioneTerminazione ::= "FINE:" JavaCode StanzaIniziale ::= "STANZAINIZIALE:" Oggetti ::= ( Oggetto )* Oggetto ::= NomeOggetto Descrizione JavaCode NomeOggetto ::= "OGGETTO:" Stanze ::= ( Stanza )+ Stanza ::= NomeStanza Descrizione "[" ( OggettoPresente )* "]" "[" ( StanzaRaggiungibile )* "]" NomeStanza ::= "STANZA:" OggettoPresente ::= StanzaRaggiungibile ::= Descrizione ::= JavaCode ::= TOKEN : { }
Parsing file di gioco Controllo sintattico parser Controllo semantico CheckSemanticVisitor Controllo sintattico codice java ToolProvider.getSystemJavaCompiler(); Costruzione classi di gioco CreateGameVisitor Compilazione gioco compiler.getTask() Avvio (reflection) Controllo tramite engine di gioco (chiamata ciclica al PlayVisitor)
Acquisite le stanze e gli oggetti dal file di gioco: La stanza iniziale deve essere stata definitiva; Gli oggetti contenuti nelle varie stanze devono essere stati definiti; I vicinati devono essere consistenti Stanze vicine devono essere definite Stanze vicine devono esserlo reciprocamente
Creazione codice classe oggetti
Creazione codice classe di gioco
Istanziazione oggetti e stanze
Grammatica di gioco più elastica Stanze customizzabili Eventi allingresso Eventi alluscita Eventi asincroni Esecuzione azioni entro certi tempi Mostri in movimento Porting in JavaScript
Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti