Come Creare un'Avventura Testuale Punta e Clicca per qualsiasi Dispositivo

Alla scoperta di Adventure Click 2020, lo strumento semplice per realizzare le tue avventure testuali punta e clicca.

Adventure Click 2020 - Realizzare Avventure Testuali Punta e Clicca
Grazie ad Adventure Click potrai creare la tua avventura testuale per qualsiasi dispositivo, sia fisso, che mobile.



Come Creare un'Avventura con Adventure Click 2020

Prima di intraprendere questa avventura, per realizzare un'Avventura con Adventure Click, facciamo alcune considerazioni per spiegare meglio il concetto alla base di Adventure Click e forniamo al tempo stesso alcune spiegazioni, per comprendere meglio come funziona, iniziando proprio dalla struttura di un'avventura.

Adventure Click permette di creare avventure punta e clicca in HTML e questo di fatto le rende compatibili con qualsiasi dispositivo, con qualsiasi Web Browser moderno, a qualsiasi risoluzione e con qualsiasi sistema operativo (Windows, Linux, Mac, Android, iOS, etc...).

Un'avventura in Adventure Click è strutturata in questo modo:

- Una Location, chiamata #Stanza;
- Il titolo della Location;
- La descrizione della Location;
- I collegamenti verso altre Locations;
- Le condizioni o le azioni che si possono fare all'interno di essa;

Facciamo subito un esempio pratico:

#Stanza_1
.titolo "Una fredda cantina"
.testo "Ti trovi all'interno di una cantina fredda e buia."
.acapo
.testo "Qui puoi vedere una "
.collega "porta", "2"
.testo " che conduce ad una stanza segreta."
#Fine

#Stanza_2
.titolo "Stanza segreta"
.testo "Una stanza vuota, non c'è altro."
.acapo
.testo "Puoi tornare nella "
.collega "cantina", "1"
#Fine

Questo sommariamente è il codice di Adventure Click. Da notare che ogni istruzione inizia con un punto (.), in questo modo le istruzioni non verranno mai confuse con il testo utilizzato dal programmatore durante la creazione dell'avventura, in quanto '.testo' è diverso dalla parola 'testo' ed entrambi verranno trattate dal programma in modo differente.

.testo verrà processato per visualizzare il testo della stanza.

Ogni testo è racchiuso tra i doppi apici (tasti Shift+2 dalla tastiera). Se vogliamo inserire un apice all'interno del testo possiamo utilizzare il backslash in questo modo:

.testo "Lei disse \"che non era saggio\" procedere per quella direzione."

Istruzioni e Funzioni

Le istruzioni all'interno di Adventure Click sono delle parole chiavi, dette anche Alias, che a loro volta richiamano una funzione. Il loro compito è quello di facilitare l'inserimento delle varie funzionalità. Ad esempio, l'istruzione '.testo' corrisponde in realtà alla funzione tx("");

.testo "Ti trovi in un atrio"
.tx("Ti trovi in un atrio") ;

Sono la stessa cosa, ma questa è solo una curiosità che non ha nulla a che fare con la creazione di un'avventura!

Analizziamo quindi le istruzioni incontrate fino ad ora:

.titolo "Stanza segreta"
E' il titolo mostrato per la stanza

.testo "Una stanza vuota, non c'è altro."
Descrive cosa c'è all'interno della stanza

.acapo
Crea un ritorno a capo

.collega "cantina", "1"
Collega la parola 'cantina' alla stanza numero 1.

Le stanze hanno infatti un numero sequenziale ed univoco e vengono chiuse dalla parola #Fine

#Stanza_1
...
#Fine

#Stanza_2
...
#Fine

#Stanza_3
...
#Fine

Chiaro e facile fino a qui, no?
Con questo semplice sistema è già possibile creare delle semplici avventure punta e clicca a bivio o dei Libri Gioco digitali.

Variabili

Le Variabili in Adventure Click sono dei piccoli frammenti di memoria in grado di memorizzare un valore e renderlo disponibile per fare una determinata azione. Supponiamo che il giocatore entri nella Stanza 1, poi va alla Stanza 2 ed infine ritorni alla Stanza 1. Una volta ritornato alla Stanza 1 deve essere mostrato comunque un testo differente. Come abbiamo già visto in precedenza, con il sistema proposto in precedenza, potremo fare la cosa aggiungendo una terza Stanza ed il gioco tornerà in realtà alla Stanza 3, anziché alla Stanza 1. Esempio:

#Stanza_1
.titolo "Una fredda cantina"
.testo "Ti trovi all'interno di una cantina fredda e buia."
.acapo
.testo "Qui puoi vedere una "
.collega "porta", "2"
.testo " che conduce ad una stanza segreta."
#Fine

#Stanza_2
.titolo "Stanza segreta"
.testo "Una stanza vuota, non c'è altro."
.acapo
.testo "Puoi tornare nella "
.collega "cantina", "3"
#Fine

#Stanza_3
.titolo "Una fredda cantina"
.testo "Nella "Stanza Segreta" non c'era proprio nulla di interessante."
.acapo
.testo "Ti trovi all'interno di una cantina fredda e buia."
.acapo
.testo "Qui puoi vedere una "
.collega "porta", "2"
.testo " che conduce ad una stanza segreta."
#Fine

Si crea dunque una stanza alternativa, la Stanza 3 appunto, che mostra nuove informazioni.

Se da un lato questo sistema può essere semplice e alla portata di tutti, dall'altro lato obbliga a creare nuove stanze e in un'avventura più complessa se ne dovrebbero creare talmente tante, per fare alla fine sempre la stessa cosa.

Esempio di combinazioni:
1) 2 X 1 = 2
2) 2 X 2 = 4
3) 4 x 2 = 8
4) 8 x 2 = 16
5) 16 x 2 = 32
6) 32 x 2 = 64
7) 64 x 2 = 128
8) 128 x 2 = 256
9) 256 x 2 = 512
10) 512 x 2 = 1024

Questo specchietto ci mostra che se volessimo mettere 10 stanze con altrettante 'stanze alternative' per coprire un solo puzzle ci vorrebbero 1024 stanze. In realtà ci sono dei trucchi per superare questo ostacolo, ad esempio creando degli enigmi solo in zone localizzate, ma dato che abbiamo le Variabili possiamo risolvere questo problema in modo differente, vediamo come.

Esempio con le Variabili
In questo esempio il giocatore andrà nella stanza segreta, poi tornerà nella cantina e vedrà il primo messaggio, poi tornerà ancora nella stanza segreta e quando tornerà nella cantina vedrà un secondo messaggio:

Dichiariamo una variabile in questo modo:

.variabile = ["0"]

Questa varibile è la variabile zero che al suo interno contiene il valore zero. Le variabili iniziano con zero e continuano in sequenza numerica. Esempio:

.variabile = ["0", "1", "5", "7", "2"]

Ecco come le interpreta in Adventure Click

variabile 0 = "0"
variabile 1 = "1"
variabile 2 = "5"
variabile 3 = "7"
variabile 4 = "2"

Per evitare confusioni Adventure Click ha bisogno che siano inserite tra delle parentesi quadre, diventano quindi così:

variabile[0] = "0"
variabile[1] = "1"
variabile[2] = "5"
variabile[3] = "7"
variabile[4] = "2"

e per evitare confusioni al programmatore, come abbiamo già visto in precedenza con altre istruzioni, verranno aggiunti i punti iniziali. Quindi in definitiva diventano così:

.variabile[0] = "0"
.variabile[1] = "1"
.variabile[2] = "5"
.variabile[3] = "7"
.variabile[4] = "2"

Tutto chiaro fino a qui?
Bene, allora passiamo all'esempio pratico:

.variabile = ["0"]

#Stanza_1
.titolo "Una fredda cantina"
.testo "Ti trovi all'interno di una cantina fredda e buia."
:s .se (.variabile[0]=="1") .allora .testo("Nella "Stanza Segreta" non c'era proprio nulla di interessante."); :Fine
:s .se (.variabile[0]=="2") .allora .testo("Non c'è proprio nulla di interessante."); :Fine
.acapo
.testo "Qui puoi vedere una "
.collega "porta", "2"
.testo " che conduce ad una stanza segreta."
#Fine

#Stanza_2
.titolo "Stanza segreta"
.testo "Una stanza vuota, non c'è altro."
.acapo
.testo "Puoi tornare nella "
.collega "cantina", "1"
:s .variabile[0]++;
#Fine

Le righe che ci interessano sono le seguenti.

Nella Stanza 1:

:s .se (.variabile[0]=="1") .allora .testo("Nella "Stanza Segreta" non c'era proprio nulla di interessante."); :Fine

:s .se (.variabile[0]=="2") .allora .testo("Non c'è proprio nulla di interessante.");

Nella Stanza 2:

:s .variabile[0]++;

Analizziamole:

:s
Indica ad Adventure Click che la riga contiene un riferimento alle Funzioni;

.se
(IF) è la condizione che si deve verificare per succedere qualcosa;

.variabile[0] == "1" oppure .variabile[0] == "2"
Se la variabile[0] diventa 1, viene mostrato il primo messaggio;
Se la variabile[0] diventa 2, viene mostrato il secondo messaggio;

.allora
Se si verificare una delle 2 condizioni ALLORA... accade qualcosa;

.testo("...");
Viene mostrato il testo all'interno degli doppi apici. Da notare che in questo caso ci sono anche le parentesi, proprio perché siamo all'interno di una funzione e l'istruzione .Testo va chiusa con un punto e virgola.

:Fine
Indica che la procedura di :S + .SE è conclusa.


Analizziamo ora quello che avviene nella Stanza 2:

:s .variabile[0]++;

:s
Come in precedenza, indica ad Adventure Click che la riga contiene un riferimento alle Funzioni;

.variabile[0]++;
Aggiunge un +1 alla Variabile zero, che di volta in volta diventerà così:

variabile[0] = 1
variabile[0] = 2
variabile[0] = 3
variabile[0] = 4
variabile[0] = 5

Anche in questo caso l'istruzione va chiusa con un punto e virgola
In questo caso, dato che non è presente nessun SE...ALLORA, non occorre mettere l'istruzione :Fine a fine riga.

All'inizio potrebbe sembrare un meccanismo complicato, ma non lo in quanto non muta nel tempo, quindi si può dire che è sempre lo stesso. Basta copiarlo ed incollarlo dove serve. Ovviamente possiamo fare la stessa cosa per altri scopi, come ad esempio far sì che sia il link a cambiare o che richiami in automatico una nuova Stanza. Vediamo alcuni esempi.

In questo esempio anziché mostrare il testo facciamo andare il giocatore alla Stanza 3 tramite link:

.variabile = ["0"]

#Stanza_1
.titolo "Una fredda cantina"
.testo "Ti trovi all'interno di una cantina fredda e buia."
.acapo
.testo "Qui puoi vedere una "
:s .se (.variabile[0]=="0") .allora .Collega("porta", "2"); :Fine
:s .se (.variabile[0]>="1") .allora .Collega("porta", "3"); :Fine
.testo " che conduce ad una stanza segreta."
#Fine

#Stanza_2
.titolo "Stanza segreta"
.testo "Una stanza vuota, non c'è altro."
.acapo
.testo "Puoi tornare nella "
.collega "cantina", "1"
:s .variabile[0]++;
#Fine

#Stanza_3
...
#Fine

Se la variabile è zero il link "Porta" conduce alla Stanza 2, mentre se la variabile assume un valore uguale o maggiore di 1, allora il link condurrà alla Stanza 3.

In questo esempio invece faremo la conoscenza dell'istruzione 'vai(stanza)' che può tornarci utile quando vogliamo che il giocatore vada in automatico in una nuova stanza, senza che clicchi sopra ad un collegamento:

.variabile = ["0"]

#Stanza_1
.titolo "Una fredda cantina"
.testo "Ti trovi all'interno di una cantina fredda e buia."
.acapo
.testo "Qui puoi vedere una "
.collega "porta", "2"
.testo " che conduce ad una stanza segreta."
:s .se (.variabile[0]>="1") .allora .vai(3); :Fine
#Fine

#Stanza_2
.titolo "Stanza segreta"
.testo "Una stanza vuota, non c'è altro."
.acapo
.testo "Puoi tornare nella "
.collega "cantina", "1"
:s .variabile[0]++;
#Fine

#Stanza_3
...
#Fine

Se la variabile quindi è maggiore o uguale a 1, verrà chiamata la Stanza 3 in automatico e il gioco continua da quella stanza.

Infine, le variabili possono essere settate anche manualmente. Abbiamo visto che nel caso dell'istruzione '.variabile[0]++' viene aumentato di una unita' per volta il valore di una variabile, ma possiamo creare qualsiasi stato, ci basterà scrivere:

.variabile[0] = "100"

Ed ora il nuovo valore è 100.

Per finire, alcune cose importanti.
- E' consigliabile, ma non obbligatorio, scrivere in minuscolo il nome di tutte le istruzioni.
- Tutto quello che viene dichiarato nella riga che inizia con ':s' deve rimanere nella stessa riga:

:s .se ... .allora .testo("Ciao Mondo); :fine

Non può essere dichiarato su più righe per come avviene con altri linguaggi, perché non funzionerebbe, come in questo caso:

:s
.se ... .allora
.testo("Ciao Mondo);
:fine




Oggetti Mobili

In un'avventura ci sono Oggetti Fissi, che non possono essere trasportati dal giocatore, come può esserlo ad esempio una porta o una cassaforte ed Oggetti Mobili che possono essere presi dal giocatore, aggiunti nell'inventario, combinati con altri oggetti o lasciati in altri luoghi. Adventure Click gestisce in automatico l'inventario e tutte le relative azioni, per vedere tuttavia come funziona la cosa in pratica, prendiamo subito in esame le seguenti istruzioni:

.Oggetto_Posizione = ["1", "2"]
.Oggetto_Codice = ["chiav", "torc"]
.Oggetto_Titolo = ["Chiave", "Torcia"]
.Oggetto_Nome = ["Una Chiave", "Una Torcia"]
.Oggetto_Usabile = ["y", "y"]
.Oggetto_Visibile = ["y", "y"]
.Oggetto_Lasciabile = ["n", "n"]
.Oggetto_Descrizione = ["Una chiave di colore giallo.", "Una Potente Torcia a batterie."]

Come nel caso delle variabili anche gli oggetti usano lo stesso sistema. Oggetto[0], Oggetto[1], Oggetto[2] e così via.

.Oggetto_Posizione
Questo esempio indica che la posizione iniziale dell'oggetto zero è la Stanza 1. Se il giocatore entrerà nella Stanza 1 vedrà in automatico la chiave. Mentre l'oggetto 1, ovvero la Torcia, sarà trovata nella stanza 2.

Se il giocatore prende la torcia e/o la chiave, verranno aggiunti in automatico nell'inventario e saranno contrassegnati da una 'i', in questo modo:

.Oggetto_Posizione[0] = "i";
.Oggetto_Posizione[1] = "i";

o meglio ancora:

.Oggetto_Posizione = ["i", "i"];

Avviene tutto in automatico, ma può tornare utile per il Debug.

Nota:
Durante la realizzazione dell'avventura è possibile utilizzare la funzione Debug che mostra l'esatto stato delle variabili e degli oggetti per aiutare meglio a comprendere il tutto al creatore.

Se un giocatore lascia la chiave nella stanza 10, allora il nuovo stato delle variabili oggetto sarà il seguente:

.Oggetto_Posizione = ["10", "i"];

Come già detto queste cose avvengono in automatico, ma possono essere utili per il Debug.

Se invece vogliamo eliminare definitivamente un oggetto, allora possiamo dichiararlo manualmente. Supponiamo che il giocatore usa la chiave per aprire la porta e che dopo averla aperta la chiave venga rimossa dall'inventario. Scriveremo manualmente:

.Oggetto_Posizione[0] = ["0"];

In questo caso la chiave verrà messa nella Stanza 0, una stanza alla quale il giocatore non accederà mai e quindi non potrà mai più vedere, mentre la torcia continuerà ad essere nell'inventario. Non occorre cambiare il valore di tutti gli oggetti, ma solo quello che ci interessa.

.Oggetto_Codice
E' un codice univoco da dare all'oggetto, che può essere alfanumerico. Esempio:
chiave1, chiave, key, key1.

E' possibile scegliere qualsiasi valore, ma è utile inserire un codice che sia facilmente identificabile, giusto per evitare di perdere tempo dopo, se non si ricorda più a quale oggetto apparteneva un codice.

Ad esempio:

chiaveGialla è sicuramente meglio di chiaveX

Nel primo caso è chiaro che la variabile fa riferimento alla chiave gialla, nel secondo caso, se ci sono anche altre chiavi, non è altrettanto chiaro, ma questo è solo un consiglio.

.Oggetto_Titolo e .Oggetto_Nome
Mostrano il nome dell'oggetto in automatico.

.Oggetto_Usabile
Se impostato su sì (y) l'oggetto può essere combinato con altri oggetti, altrimenti Adventure Click non mostra in automatico questa opzione.

.Oggetto_Visibile
Se impostato su sì (n), l'oggetto è in possesso del giocatore, ma non sarà visibile per poterlo combinare con altri oggetti.

.Oggetto_Lasciabile
Se impostato su sì (y) il giocatore avrà la possibilità di lasciarlo in un luogo e poi tornare a riprenderlo.

.Oggetto_Descrizione
Una descrizione più dettagliata, anche se breve, dell'oggetto posseduto dal giocatore.

Oggetti Fissi

Gli oggetti fissi sono oggetti che non possono essere trasportati dal giocare. Hanno lo stesso concetto delle variabili e degli oggetti mobili.

.Oggetto_Fisso_Posizione = ["1", "2"]
.Oggetto_Fisso_Codice = ["door1", "door2"]
.Oggetto_Fisso_Nome = ["La Possente Porta", "La Possente Porta"]

Questo codice indica che la porta 1 si trova nella Stanza 1 e la porta 2 si trova nella Stanza 2. I loro codici sono rispettivamente 'door1' e 'door2'.

Come Combinare gli Oggetti - Le Azioni Condizionate

Si tratta delle condizioni che permettono di creare determinate azioni quando il giocatore ad esempio combina 2 oggetti. E' il classico esempio di una chiave combinata con una porta, per aprire quest'ultima e continuare l'avventura.

Anche in questo caso si utilizzano le condizioni, quelle già viste in precedenza, ma anziché utilizzare ':s' all'inizio della riga, utilizzeremo ':c'. Infatti con 's:' indichiamo che la condizione deve agire solo su una determinata Stanza, mentre con ':c', che la condizione è generica, ovvero viene controllata in tutte le stanze.

Le condizioni inoltre sono formate da 2 oggetti (oj1 e oj2) e volendo, in casi più rari anche da 'rm" ovvero la stanza. Facciamo un esempio:

:c .se (oj1=="chiav" && oj2=="door1") .allora .Oggetto_Posizione[0]="0"; .vai(5); :Fine

:c
Inizializza la riga per la condizioni

.se (oj1=="chiav" && oj2=="door1") .allora
Se il giocatore combina la chiave con la porta 1, allora...

.Oggetto_Posizione[0]="0";
La chiave va nella stanza zero, quindi non sarà più presente nel gioco.

.vai(5);
Il giocatore verrà trasportato nella Stanza 5, dove potrà continuare l'avventura.

:Fine
Chiude la riga della condizione.

Anche in questo caso basta fare copia e incolla e cambiare solo il codice degli oggetti, per velocizzare il tutto.

Dicevamo che esiste anche una terza opzione, la 'rm', ma a parte casi davvero eccezionali, non occorre mai metterla in gioco. E' utile se il giocatore deve combinare 2 oggetti, ma solo in una specifica stanza, esempio:

:c .se (oj1=="chiav" && oj2=="door1" && rm="1") .allora ... :Fine

In pratica questa azione potrà avvenire solo ed esclusivamente se il giocatore combina gli oggetti chiave e porta, ma solo se si trova nella stanza 1. Ci sono stati casi comunque che è indispensabile, come quando il giocatore deve combinare 2 oggetti mobili, ma solo ad un certo punto dell'avventura.

(Possiede una Torcia e delle Batterie)

Se la .variabile[1]="0";
viene mostrato ...
Ti trovi in una grotta (Stanza 10) e noti degli strani simboli, ma che non riesci a vedere bene a causa della poca luce. E' il momento di fare qualcosa...
Vai alla stanza 11 (Torna indietro).

Se la .variabile[1]="1";
viene mostrato ...
Ti trovi in una grotta (Stanza 10) e quei simboli indicano l'uscita.
Vai alla stanza 12 (Può uscire dalla grotta sano e salvo).

Esempio di combinazione tra Torcia e Batterie:

:c .se (oj1=="torcia" && oj2=="batterie" && rm="10") .allora .variabile[1]="1"; vai(10); :Fine

Quindi, se si combinano Torcia e Batterie, ma solo nella stanza 10, allora il valore della variabile 1 diventa 1 e come conseguenza, verrà mostrata una seconda scelta nella stanza 10.

 

Le Azioni Condizionate in Tutte le Stanze

Per finire le condizioni che possono essere applicate a tutti gli eventi sono all'interno del file 'Eventi'. Qui dentro basterà scrivere l'azione da attivare in base alla condizione. In questo caso, trattandosi di un file esterno, non occorre iniziare la riga con ':s' oppure con ':c', ma basta scrivere la condizione. Facciamo un esempio. Creiamo una variabile contatore e dopo 3 volte essa dovrà mostrare il testo 'Ciao Mondo'.

Inseriamo la variabile in una stanza:

:s .variabile[0]++;

Tutte le volte che verrà incontrata questa istruzione dal giocatore la variabile 0 aumentarà di una unità. Ora scriviamo nel file Eventi quanto segue:

.se (variabile[0]>=3) .allora .testo('Ciao Mondo'); :fine


Conclusioni

All'interno di Adventure Click sono presenti molti altri esempi grazie ai quali le avventure, sia semplice, che complesse, prenderanno forma in poco tempo e con un poco di pratica.

Un ultimo consiglio
Non guardare il codice nel suo insieme, sarebbe davvero difficoltoso. Guarda piuttosto riga per riga, in questo modo sarà tutto chiaro e molto più semplice. Adventure Click inoltre fornisce tutta una serie di funzioni per gestire immagini, data, ora e molto altre cose interessanti, che verranno affrontante nelle prossime lezioni.





Data: 26.04.2020 - 12:04:14