1 / 29

JATA Just Another Text Adventure

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

terah
Download Presentation

JATA Just Another Text Adventure

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JATAJust Another Text Adventure Progetto d’esame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti

  2. Avventure testuali • “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.

  3. Scopo del progetto • Realizzare un interprete per avventure testuali • Riconoscere le frasi di gioco • Eseguire le azioni corrispondenti

  4. Linguaggio • Tipologie di azioni: • Movimento • Raccolta • Vista • Utilizzo

  5. Linguaggio • 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

  6. Linguaggio • Tipologie di azioni: • Movimento • Raccolta • Vista • Utilizzo Esempi: prendi stivali – prendi gli stivali raccogli martello – raccogli il martello

  7. Linguaggio • Tipologie di azioni: • Movimento • Raccolta • Vista • Utilizzo Esempi: guarda la spada - guarda inventario osserva spada esamina cantina

  8. Linguaggio • 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

  9. Grammatica di gioco • 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"]> }

  10. Grammatica e linguaggio • 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 disgiuntiGrammatica LL(1)

  11. Struttura del gioco Stato Introduzione Stanza corrente Stanze Inventario Oggetti Scopo

  12. Semantica di gioco: PlayVisitor • Un visitor che evolve stato del gioco in base all’azione eseguita • Azione Movimento

  13. Semantica di gioco: PlayVisitor • Un visitor che evolve stato del gioco in base all’azione eseguita • Azione Raccolta

  14. Semantica di gioco: PlayVisitor • Un visitor che evolve stato del gioco in base all’azione eseguita • Azione Vista

  15. Semantica di gioco: PlayVisitor • Un visitor che evolve stato del gioco in base all’azione eseguita • Azione Utilizzo

  16. Struttura dell’engine • Utilizzo del PlayVisitor fino alla condizione di terminazione

  17. Esempio Gioco cablato nel codice

  18. Estrarre l’ambiente 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

  19. Gioco dinamico Lettura informazioni di gioco da file esterno Creazione di classi specifiche Istanziamento stanze e oggetti

  20. Grammatica dei giochi • Start ::= DescrizioneGiocoStanzaInizialeOggettiStanze • 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> • Descrizione ::= <DESCRIZIONE> • JavaCode ::= <CODE> • <DEFAULT> TOKEN : { <CODE: "$" (~["$"])* "$"> } • <DEFAULT> TOKEN : { <DESCRIZIONE: "{" (~["}"])* "}"> }

  21. Struttura del costruttore • 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)

  22. Controllo semantico: CheckSemanticVisitor • 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

  23. Esempio di gioco esterno

  24. Costruzione del gioco: CreateGameVisitor • Creazione codice classe oggetti

  25. Costruzione del gioco: CreateGameVisitor • Creazione codice classe di gioco

  26. Costruzione del gioco: CreateGameVisitor • Istanziazione oggetti e stanze

  27. Esempio completo

  28. Sviluppi futuri • 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

  29. JATAJust Another Text Adventure Progetto d’esame di Gianluca Gallo Linguaggi e modelli computazionali LM Prof. Enrico Denti

More Related