Sommario:

Collegamenti da variabili in spago con Sugarcube: 10 passaggi
Collegamenti da variabili in spago con Sugarcube: 10 passaggi

Video: Collegamenti da variabili in spago con Sugarcube: 10 passaggi

Video: Collegamenti da variabili in spago con Sugarcube: 10 passaggi
Video: Twine 2 - #3 - Variabili e Condizioni 2024, Dicembre
Anonim
Collegamenti da variabili in spago con Sugarcube
Collegamenti da variabili in spago con Sugarcube

Sono così felice che tu ti sia unito di nuovo a me! Questo significa che il Wumpus non ti ha ancora mangiato. Bene!

Per quelli di voi che non hanno familiarità, questa è una serie di tutorial che sto realizzando per aiutare la mia adorabile cugina Widdle oochy-skootchy con il suo progetto senior. Questi tutorial sono pensati per essere un riferimento per ciò che puoi fare con alcune delle funzionalità di programmazione di Twine e Sugarcube. Se vuoi seguire, puoi trovare il primo tutorial qui.

Nell'ultimo tutorial, ho costruito un piccolo insieme di stanze che il giocatore può esplorare. Ho aggiunto un oggetto Wumpus e ho creato un codice di stanza generico per cambiare ciò che veniva visualizzato in ogni stanza a seconda di dove si trovava il Wumpus.

Passaggio 1: crea il tuo giocatore

Crea il tuo giocatore
Crea il tuo giocatore

Questo passaggio è molto semplice. Essenzialmente sto usando lo stesso codice del mio $wumpus, ma con una variabile $player invece.

Passaggio 2: nuovo codice camera

Nuovo codice camera
Nuovo codice camera

Modificato il codice della tua stanza generica in modo che il valore di $player sia la stanza corrente. Quindi confronta $wumpus con $player invece della stanza corrente.

Questa è una modifica minore e non del tutto necessaria, ma mi piace mantenere il mio codice organizzato.

Passaggio 3: creazione di un collegamento da una variabile

Creazione di un collegamento da una variabile
Creazione di un collegamento da una variabile

Infine, voglio sostituire il collegamento nella mia stanza iniziale con uno che cambia in base al valore di $ giocatore. Questo può essere fatto con la funzione "" in Sugarcube. Puoi leggere di più a riguardo nella pagina della documentazione di Sugarcube.

La prima stringa dopo il nostro comando è la frase che apparirà nel nostro passaggio. Il secondo è il nome del passaggio a cui vogliamo collegarci. Sto usando "Hunt the Wumpus!" come la mia frase, ma potremmo usare la nostra variabile lì invece se vogliamo che il giocatore sappia in anticipo dove stanno andando, in questo modo:

Passaggio 4: prova

Test
Test
Test
Test

Quando provi il tuo codice, dovresti scoprire che il tuo link è stato sostituito con qualsiasi frase tu abbia scritto prima. Fare clic su di esso ti porta in una stanza casuale nel tuo gioco.

Sfortunatamente, questo può anche portarti direttamente nella stanza dei Wumpus! Non ha molta importanza in questo momento, ma in un gioco reale sarebbe un game over istantaneo. Dobbiamo aggiustarlo.

Passaggio 5: aggiungi un elenco di stanze

Aggiungi un elenco di stanze
Aggiungi un elenco di stanze

Per prima cosa, creeremo un elenco di stanze, per semplificare la gestione delle stanze. Dichiarando questo array, possiamo usarlo per impostare i nostri valori $player e $wumpus senza dover ripetere il codice. Ha anche un altro vantaggio che esploreremo in seguito.

Il test con questo codice dovrebbe comportarsi come prima.

Passaggio 6: eliminare le stanze

Eliminare le stanze
Eliminare le stanze

Ho aggiunto una singola riga di codice al codice precedente (evidenziato).

Gli array in Sugarcube hanno una funzione integrata che ti consente di eliminare gli elementi da essi per nome. In questo caso, una volta assegnata a $wumpus una stanza, possiamo eliminare quella stanza dalla nostra $roomlist. Questa funzione è però pignola. Non funzionerà a meno che l'output della funzione non venga assegnato o utilizzato in qualche modo. Per occuparmene, ho creato la variabile temporanea _temp.

In Sugarcube, le variabili temporanee iniziano con un carattere di sottolineatura (_) anziché con un dollaro ($). Sono utili perché vengono eliminati una volta eseguito il passaggio, quindi non devi preoccuparti della sovrapposizione dei nomi delle variabili.

Sto eliminando anche la stanza $player da $roomlist, ovviamente.

Passaggio 7: test

test
test
test
test

Anche se potremmo eseguire il codice così com'è ora, non sarebbe un test molto approfondito. Se eseguiamo il codice e scopriamo che $player e $wumpus sono assegnati a stanze diverse, non sappiamo se è perché il codice funziona o se è solo un caso. Certo, potremmo eseguire il codice molte volte e presumere che se non assegna mai a entrambi la stessa stanza non lo farà mai, ma ci vorrà un'eternità e non è ancora una garanzia al 100% che non possa mai accadere.

Invece, abbiamo bisogno di un modo per controllare.

Ho aggiunto tre righe all'inizio del nostro passaggio introduttivo che ci permetteranno di vedere i valori delle nostre variabili $wumpus, $player e $roomlist. A causa del modo in cui abbiamo impostato il nostro codice, sappiamo che la stanza $wumpus e la stanza $player dovrebbero essere eliminate dalla $roomlist.

Quando eseguiamo questo codice, possiamo verificare che sia così.

Passaggio 8: stranezze con zolletta di zucchero e oggetti

Stranezze con zolletta di zucchero e oggetti
Stranezze con zolletta di zucchero e oggetti
Stranezze con zolletta di zucchero e oggetti
Stranezze con zolletta di zucchero e oggetti
Stranezze con zolletta di zucchero e oggetti
Stranezze con zolletta di zucchero e oggetti

Gli oggetti Sugarcube sono un po' strani. Permettetemi di dimostrarlo.

Mentre stavo costruendo questo progetto in origine, volevo salvare il mio $ roomlist in una variabile $ saveroom prima di iniziare a eliminare le stanze da esso. Ho pensato che sarebbe tornato utile in seguito.

Quando ho riscontrato uno strano comportamento da questo codice, ho aggiunto un'altra riga alla mia pagina di introduzione per permettermi di guardare la mia variabile $ saveroom (seconda immagine).

Sono rimasto scioccato nello scoprire che gli elementi che avevo cancellato da $ roomlist erano stati cancellati anche dalla mia lista salvata! Potete vederlo in azione nella terza immagine.

Questo perché quando copi un array come questo, in realtà non stai dicendo a Twine di copiare l'array, stai dicendo a Twine che queste due variabili sono lo stesso array. Quando fai qualcosa sull'array usando una variabile, cambia lo stesso array che sta guardando l'altra variabile!

Possiamo risolvere questo problema con la funzione clone().

Passaggio 9: la funzione Clone()

La funzione Clone()
La funzione Clone()
La funzione Clone()
La funzione Clone()

Puoi leggere la funzione clone() nella pagina della documentazione di Sugarcube.

Una copia "superficiale" è ciò che facevamo prima. Invece di fare una copia completa dell'intero array, presuppone solo che la tua variabile funzioni con lo stesso array. Invece di una copia superficiale, clone() esegue una copia "profonda", che si comporta come ci si aspetterebbe. Ogni elemento dell'array viene copiato in un nuovo array ed è totalmente separato dall'originale.

Se testiamo questo nuovo codice, troviamo che funziona come previsto.

Naturalmente, non importa se tieni o meno $roomlist. Ai fini del mio progetto, non lo farò. Tutto questo era solo per dimostrare copie profonde contro superficiali.

Passaggio 10: per ora è tutto

Questo è tutto per ora!
Questo è tutto per ora!

Abbiamo aggiunto un codice che consente al nostro giocatore di iniziare in una stanza casuale. In aggiunta a ciò, abbiamo eliminato un bug per cui il giocatore iniziava nella stessa stanza del Wumpus.

Abbiamo imparato come creare collegamenti da variabili e come la copia di array viene gestita da Sugarcube.

Le cose stanno aumentando, ma siamo solo all'inizio!

Buona caccia!

Consigliato: