Progetto desame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti

Preview:

Citation preview

JATA Just Another Text Adventure

Progetto d’esame 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)

Caratterizzate da: Scopo Ambiente di gioco

Stanze esplorabili Oggetti Inventario

Obiettivo: Il giocatore deve esplorare l’ambiente di gioco e interagire

con esso fino al completamento dello scopo dell’avventura.

Avventure testuali

Realizzare un interprete per avventure testuali Riconoscere le frasi di gioco Eseguire le azioni corrispondenti

Scopo del progetto

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

vai cantina - vai in cantina – vai nella cantinacammina verso cantinaspostati verso tetto – spostati sul tetto

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

prendi stivali – prendi gli stivaliraccogli martello – raccogli il martello

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

guarda la spada - guarda inventarioosserva spadaesamina cantina

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

usa spada – usa la spada usa la spada su cattivo – usa spada cattivoutilizza il martello – utilizza il martello con le mura

Azione ::= ( Movimento | Raccoglimento | Vista | Utilizzo ) “;”

Movimento ::= <MOVIMENTO> Compl_movimento

Compl_movimento ::= ( <PARTICELLA_MOVIMENTO> )? <STRINGA> <DEFAULT> TOKEN : { <MOVIMENTO: "vai" | "cammina" | "spostati" | "VAI" | "CAMMINA" | "SPOSTATI"> }

<DEFAULT> TOKEN : { <PARTICELLA_MOVIMENTO: "verso" | "in" | "sul" | "a" | "nel" | "nella" | "VERSO" | "IN" | "SUL" | "A" | "NEL" | "NELLA"> }

Raccolta ::= <RACCOLTA> Compl_oggetto

Compl_oggetto ::= ( <ARTICOLO> )? <STRINGA> <DEFAULT> TOKEN : { <RACCOLTA: "prendi" | "raccogli" | "PRENDI" | "RACCOGLI"> }

Vista ::= <VISTA> Compl_oggetto <DEFAULT> TOKEN : { <VISTA: "guarda" | "osserva" | "esamina" | "GUARDA" | "OSSERVA" | "ESAMINA"> }

Utilizzo ::= <UTILIZZO> Compl_oggetto ( Compl_uso )? <DEFAULT> TOKEN : { <UTILIZZO: "usa" | "utilizza" | "USA" | "UTILIZZA"> }

Compl_uso ::= ( <PREPOSIZIONE_USO> )? ( <ARTICOLO> )? <STRINGA> <DEFAULT> TOKEN : { <PREPOSIZIONE_USO: "con" | "su" | "CON" | "SU"> }

<DEFAULT> TOKEN : { <ARTICOLO: "il" | "lo" | "la" | "le" | "gli" | "i" | "IL" | "LO" | "LA" | "LE" | "GLI" | "I“> }

<DEFAULT> TOKEN : { <STRINGA: (<LETTERA>)+> | <#LETTERA: ["_","a"-"z","A"-"Z"]> }

Grammatica di gioco

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)

Grammatica e linguaggio

Struttura del gioco

Scopo

Oggetti

Stanze

Inventario

Stato

Stanza corrente

Introduzione

Un visitor che evolve stato del gioco in base all’azione eseguita

Azione Movimento

Semantica di gioco: PlayVisitor

Un visitor che evolve stato del gioco in base all’azione eseguita

Azione Raccolta

Semantica di gioco: PlayVisitor

Un visitor che evolve stato del gioco in base all’azione eseguita

Azione Vista

Semantica di gioco: PlayVisitor

Un visitor che evolve stato del gioco in base all’azione eseguita

Azione Utilizzo

Semantica di gioco: PlayVisitor

Utilizzo del PlayVisitor fino alla condizione di terminazione

Struttura dell’engine

Esempio

Gioco cablato nel codice

Estrarre l’ambienteOgni 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

Gioco dinamico1. 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:" <STRINGA>

Oggetti ::= ( Oggetto )*

Oggetto ::= NomeOggetto Descrizione JavaCode

NomeOggetto ::= "OGGETTO:" <STRINGA>

Stanze ::= ( Stanza )+

Stanza ::= NomeStanza Descrizione "[" ( OggettoPresente )* "]" "[" ( StanzaRaggiungibile )* "]"

NomeStanza ::= "STANZA:" <STRINGA>

OggettoPresente ::= <STRINGA>

StanzaRaggiungibile ::= <STRINGA>

Grammatica dei giochi

Descrizione ::= <DESCRIZIONE>

JavaCode ::= <CODE>

<DEFAULT> TOKEN : { <CODE: "$" (~["$"])* "$"> }

<DEFAULT> TOKEN : { <DESCRIZIONE: "{" (~["}"])* "}"> }

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)

Struttura del costruttore

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

Controllo semantico: CheckSemanticVisitor

Esempio di gioco esterno

Creazione codice classe oggetti

Costruzione del gioco: CreateGameVisitor

Creazione codice classe di gioco

Costruzione del gioco: CreateGameVisitor

Istanziazione oggetti e stanze

Costruzione del gioco: CreateGameVisitor

Esempio completo

Grammatica di gioco più elastica Stanze customizzabili

Eventi all’ingresso Eventi all’uscita

Eventi asincroni Esecuzione azioni entro certi tempi Mostri in movimento

Porting in JavaScript

Sviluppi futuri

JATA Just Another Text Adventure

Progetto d’esame di Gianluca Gallo

Linguaggi e modelli computazionali LM

Prof. Enrico Denti

Recommended