Specifiche del progetto

 

Corso di Laurea in Ingegneria Informatica

Progetto per il corso di Fondamenti di Informatica 2

Luigi Palopoli ed Alessio Bechini

7 aprile 2002

 
 
 
1 Titolo

Gota (generator of text adventures): libreria di classi per la generazione di avventure testuali.


2 Descrizione sommaria
 

Un gioco di avventura ricostruisce un ambiente virtuale fatto di luoghi interconnessi e disseminato di oggetti. Il giocatore si muove ed agisce in questo ambiente per raggiungere un obiettivo. Pu aiutare pensare, per analogia, ad una forma piuttosto sofisticata di caccia al tesoro. Nel caso di avventure testuali il giocatore interagisce con il calcolatore attraverso la stampa e l'immissione di messaggi di testo. I comandi vengono impartiti con una sintassi molto semplice. Esempi sono:

  • guarda

  • guarda tappeto

  • prendi ascia

  • vai nord

  • usa chiave con porta

Gota una libreria di classi che deve consentire la costruzione di un ambiente ed il gioco di una partita.


3 Descrizione analitica dei requisiti

In questa sezione vengono specificati i requisiti minimi che la libreria deve avere per essere ritenuta accettabile per lo svolgimento del progetto.


3.1 Interfaccia utente

Le interazioni tra utente e sistema sono molto semplici: l'utente impartisce un comando ed il calcolatore risponde con una opportuna stringa di testo. Le strutture sintattiche che devono essere riconosciute come comandi sono le seguenti:

  1. Inventario

  2. <Verbo>

  3. <Verbo> ["Nord","Sud", "Ovest","Est","Alto","Basso"]

  4. <Verbo> <Oggetto>

  5.  "usa" <Oggetto>"con"<Oggetto>

Il comando inventario permette di stampare la lista di oggetti attualmente trasportati dal giocatore. Gota dovr riconoscere almeno i seguenti verbi:

Vai

Serve per spostarsi in un luogo attiguo,secondo la direzione specificata;

Esci Esce dal gioco;
Prendi

Preleva un oggetto dal luogo in cui si trova il giocatore e lo deposita nell'inventario (se l'oggetto trasportabile);

Lascia

Opposto di Prendi: deposita un oggetto dall'inventario al luogo dove si trova il giocatore;

Apre un oggetto apribile liberando un passaggio ( oggetto porta, cancello ) o rivelando il contenuto di un oggetto contenitore (valigia, baule);

Apri

Apre un oggetto apribile liberando un passaggio ( oggetto porta, cancello ) o rivelando il contenuto di un oggetto contenitore ( valigia , baule );

Sposta Sposta un oggetto spostabile;
Usa... con...

una combinazione che consente di utilizzare un oggetto su un altro. Ad esempio per aprire una porta si ricorrer alla combinazione di comandi:

  1. Usa chiave con porta.
  2. Apri porta. 

Per spostare un masso che occlude il passaggio:

  1. Usa bastone con masso
  2. Sposta masso.
Accendi Serve ad accendere un oggetto illuminabile: luce, torcia;
Guarda

Se applicato ad un oggetto lo descrive; se utilizzato senza oggetto fornisce una
descrizione del luogo corrente e degli oggetti visibili.


Luoghi ed oggetti sono caratterizzati da un identificatore testuale unico.


3.2 I luoghi

L'ambiente virtuale caratterizzato da una serie di luoghi interconnessi. Ciascun luogo ha:

  • l'identificatore testuale

  • una descrizione lunga che viene stampata a schermo la prima volta che il giocatore vi accede o in risposta al comando guarda

  • una descrizione breve che viene stampata ogni volta che il giocatore passa per quel luogo

  • una lista di oggetti attualmente contenuti (stampata insieme alla descrizione lunga in risposta al comando guarda)

Ciascun luogo confina con almeno un altro. I punti di confine con altri oggetti sono individuati da una stringa (es. uscita sinistra) ed essere ostruiti da oggetti come porte,massi etc... Alcuni luoghi possono essere bui e richiedere l'uso di un oggetto per illuminarli. Il comando guarda su un ambiente buio non produce nulla.


3.3 Gli oggetti

Ciascun oggetto all'interno dell'avventura caratterizzato da:

  • l'identificatore testuale

  • una descrizione testuale che viene esibita in risposta al comando guarda applicato all'oggetto.
    Gli oggetti vengono identificati tramite l'identificatore testuale. Tuttavia questo pu essere poco pratico (ad es. con 10 armadi disseminati nei vari ambienti dovremo inventare un nome diverso per ogni armadio come "armadio grande","armadio vecchio" ) ecc... Per questo motivo possibile , ma non richiesto , prevedere un nome identificativo addizionale che pu non essere unico. A questo punto occorrerebbe pensare a come evitare conflitti... ad esempio proibendo oggetti con lo stesso nome nello stesso ambiente o oggetti con lo stesso nome che siano trasportabili da un ambiente all'altro generando eventuali conflitti. I vari oggetti di cui l'avventura pu essere disseminata appartengono a varie categorie.
    In particolare abbiamo:

  • oggetti trasportabili e non trasportabili (es. un'ascia trasportabile mentre una porta non lo ); i comandi Prendi e Ascia ha senso solo su oggetti trasportabili. Inoltre il comando Prendi ha senso solo su oggetti che siano visibili o che siano stati resi tali (ad es. aprendo un contenitore o spostando un oggetto che ne occludeva la vista).

  • oggetti contenitore: ci possono essere oggetti che ne contengono altri come un cofanetto o una cartella. Un oggetto contenitore pu essere aperto o chiuso. Il comando Guarda su un oggetto contenitore aperto espone la lista degli oggetti contenuti.

  • oggetti apribili: possono essere oggetto di un comando Apri; su alcuni tale comando pu richiedere delle azioni preliminare come ad es. l'uso di una chiave o di un martello per forzare la serratura.

  • oggetti illuminabili: hanno il potere di rendere luminoso un luogo buio. Alcuni danno una luminosit temporanea che dura per un certo numero di azioni (es. accendino) altri definitiva (come una torcia che viene accesa e lasciata in un luogo). oggetti spostabili: alcuni oggetti sono ingombranti e non possono essere prelevati ma possono essere spostati in risposta al comando Sposta.

  • oggetti nascondiglio: che hanno il potere di nasconderne altri (ad es. un tappeto pu nascondere una chiave) un oggetto di tale tipo pu essere attivo (ed in questo caso nascondere gli altri oggetti) o disattivo in seguito ad un'azione che abbia messo allo scoperto gli oggetti nascosti.

  • oggetti passaggio: tali oggetti hanno il potere di ostruire un passaggio fino a che un'azione opportuna non lo liberi. Un oggetto di questo tipo pu essere in uno stato in cui ostruisce il passaggio o in cui l'ostruzione stata rimossa.

Le categorie di oggetti sopra citate sono da intendersi come ortogonali: un oggetto pu appartenere a pi di esse insieme. Ad esempio un cofanetto sia un contenitore che un oggetto apribile. In questo caso l'azione Apri che pu essere preceduta da azioni preliminari (come l'uso di una chiave) fa diventare lo stato del contenitore "aperto" esponendo il contenuto e consentendo il prelievo. Una porta sia un passaggio che un oggetto apribile, mentre un masso pu essere un oggetto passaggio ed un altro oggetto spostabile. In questo caso l'azione di apertura o spostamento libera l'occlusione del passaggio. Continuando con gli esempi, un oggetto nascondiglio pu essere trasportabile (es. fazzoletto) o spostabile (es. tavola). Nel primo caso l'azione Prendi rivela gli oggetti nascosti, che nel secondo caso sono rivelati dall'azione Sposta.


3.4 Requisiti di sistema

Come requisito minimo si richiede la costruzione di una libreria di classi che,unita ad una funzione main opportunamente definita, consenta di giocare una semplice avventura scelta dagli autori. Tale avventura dovr contenere almeno cinque luoghi diversi ed una decina di oggetti. Tutte le scelte di progetto ed il codice dovranno opportunamente essere documentate. L'avventura dovr essere interamente funzionante.


3.5 Requisiti opzionali

Un possibile arricchimento del progetto sono i seguenti:

  • Salvataggio su file e caricamento da file di un gioco: in questo caso la mappa e la descrizione di un gioco sono generiche e descritte su un file; il programma dovr consentire salvataggio e caricamento di una situazione di gioco da file.

4 Tappe

Si consiglia di procedere in maniera incrementale seguendo la seguente tabella di marcia:
  1. progetto di massima della gerarchia di classi.

  2. progetto dettagliato del modulo di programma che realizza l'interpretazione dei comandi

  3. progetto dettagliato delle classi e delle strutture dati che modellano i luoghi.

  4. realizzazione prototipale di una prima versione del programma che realizza una mappa di luoghi e consente la navigazione da una all'altro implementando i comandi Vai e Guarda, trascurando la possibilit che alcuni passaggi siano impediti da porte o oggetti ostruenti.

  5. progetto dettagliato delle classi e delle strutture dati che realizzeranno gli oggetti.

  6. realizzazione prototipale di una seconda versione del programma che, oltre a consentire gli spostamenti nella mappa del gioco, consenta di interagire con gli oggetti

  7. opzionale: progetto e realizzazione di un modulo di programma che consenta di caricare un gioco da disco e di salvarlo;
    In particolare:

  • specifica di un formato per il / i file / s su cui salvare e da cui caricare una situazione di gioco (tale formato dovr essere concordato con i docenti)

  • progetto ed implementazione di un modulo di programma che a partire da un file ricostruisca una mappa e viceversa

  • implementazione e dimostrazione su un file di prova

5 Consegna del progetto
 

Lo studente, una volta terminato il progetto, dovr provvedere a consegnare (obbligatoriamente) quanto segue:
  1. Documentazione sotto forma cartacea. Essa deve avere due sezioni:
  • Documentazione funzionale, ovvero descrizione del comportamento del programma dal punto di vista utente
  • Descrizione strutturale, ovvero una sommaria panoramica sulle strutture dati, gli algoritmi e l'organizzazione del progetto

  1. Codice sorgente dell'intero programma, su disco floppy.
  2. Il codice sorgente deve essere una forma direttamente compilabile. Programma eseguibile su floppy disk.