29
JATA Just Another Text Adventure getto d’esame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti

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

Embed Size (px)

Citation preview

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

JATA Just Another Text Adventure

Progetto d’esame di Gianluca Gallo

Linguaggi e modelli computazionali LM

Prof. Enrico Denti

Page 2: 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)

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

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

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

Scopo del progetto

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

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

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

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

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

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

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

prendi stivali – prendi gli stivaliraccogli martello – raccogli il martello

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

Tipologie di azioni: Movimento Raccolta Vista Utilizzo

Linguaggio

Esempi:

guarda la spada - guarda inventarioosserva spadaesamina cantina

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

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

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

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

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

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

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

Struttura del gioco

Scopo

Oggetti

Stanze

Inventario

Stato

Stanza corrente

Introduzione

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

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

Azione Movimento

Semantica di gioco: PlayVisitor

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

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

Azione Raccolta

Semantica di gioco: PlayVisitor

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

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

Azione Vista

Semantica di gioco: PlayVisitor

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

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

Azione Utilizzo

Semantica di gioco: PlayVisitor

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

Utilizzo del PlayVisitor fino alla condizione di terminazione

Struttura dell’engine

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

Esempio

Gioco cablato nel codice

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

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

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

Gioco dinamico1. Lettura

informazioni di gioco da file esterno

2. Creazione di classi specifiche

3. Istanziamento stanze e oggetti

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

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: "{" (~["}"])* "}"> }

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

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

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

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

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

Esempio di gioco esterno

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

Creazione codice classe oggetti

Costruzione del gioco: CreateGameVisitor

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

Creazione codice classe di gioco

Costruzione del gioco: CreateGameVisitor

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

Istanziazione oggetti e stanze

Costruzione del gioco: CreateGameVisitor

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

Esempio completo

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

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

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

JATA Just Another Text Adventure

Progetto d’esame di Gianluca Gallo

Linguaggi e modelli computazionali LM

Prof. Enrico Denti