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:
-
Inventario
-
<Verbo>
-
<Verbo>
["Nord","Sud",
"Ovest","Est","Alto","Basso"]
-
<Verbo>
<Oggetto>
-
"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:
- Usa chiave con porta.
- Apri porta.
Per spostare un masso che occlude il
passaggio:
- Usa bastone con masso
- 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:
|
4 Tappe
Si consiglia di procedere in maniera
incrementale seguendo la seguente tabella di marcia:
-
progetto di massima della
gerarchia di classi.
-
progetto dettagliato del
modulo di programma che realizza l'interpretazione dei comandi
-
progetto dettagliato delle
classi e delle strutture dati che modellano i luoghi.
-
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.
-
progetto dettagliato delle
classi e delle strutture dati che realizzeranno gli oggetti.
-
realizzazione prototipale di
una seconda versione del programma che, oltre a consentire gli
spostamenti nella mappa del gioco, consenta di interagire con
gli oggetti
-
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:
- Documentazione sotto forma cartacea. Essa
deve avere due sezioni:
- Codice sorgente dell'intero
programma, su disco floppy.
-
Il codice sorgente deve
essere una forma direttamente compilabile. Programma
eseguibile su floppy disk.
|
|