Inhaltsverzeichnis:

Verknüpfungen von Variablen in Twine mit Sugarcube - Gunook
Verknüpfungen von Variablen in Twine mit Sugarcube - Gunook

Video: Verknüpfungen von Variablen in Twine mit Sugarcube - Gunook

Video: Verknüpfungen von Variablen in Twine mit Sugarcube - Gunook
Video: Decoding Twine Episode One | Passages, Links & Variables 2024, Juli
Anonim
Verknüpfungen von Variablen in Twine mit Sugarcube
Verknüpfungen von Variablen in Twine mit Sugarcube

Ich freue mich sehr, dass du wieder bei mir bist! Das heißt, der Wumpus hat dich noch nicht gefressen. Gut!

Für diejenigen unter Ihnen, die sich nicht auskennen, ist dies eine Reihe von Tutorials, die ich mache, um meiner entzückenden oochy-skootchy Widdle-Cousine bei ihrem Senior-Projekt zu helfen. Diese Tutorials sind als Referenz für einige der Programmierfunktionen von Twine und Sugarcube gedacht. Wenn Sie mitmachen möchten, finden Sie hier das erste Tutorial.

Im letzten Tutorial habe ich eine kleine Reihe von Räumen gebaut, die der Spieler erkunden kann. Ich habe ein Wumpus-Objekt hinzugefügt und einen generischen Raumcode erstellt, um zu ändern, was in jedem Raum angezeigt wird, je nachdem, wo sich der Wumpus befindet.

Schritt 1: Erstellen Sie Ihren Player

Erstelle deinen Spieler
Erstelle deinen Spieler

Dieser Schritt ist sehr einfach. Im Wesentlichen verwende ich nur den gleichen Code wie mein $wumpus, aber stattdessen mit einer $player-Variablen.

Schritt 2: Neuer Zimmercode

Neuer Zimmercode
Neuer Zimmercode

Der allgemeine Raumcode wurde geändert, sodass der Wert von $player der aktuelle Raum ist. Vergleichen Sie dann $wumpus mit $player statt mit dem aktuellen Raum.

Dies ist eine geringfügige Änderung und nicht unbedingt erforderlich, aber ich möchte meinen Code organisiert halten.

Schritt 3: Erstellen eines Links aus einer Variablen

Erstellen eines Links aus einer Variablen
Erstellen eines Links aus einer Variablen

Schließlich möchte ich den Link in meinem Startraum durch einen ersetzen, der sich basierend auf dem Wert von $player ändert. Dies kann mit der Funktion "" in Sugarcube erfolgen. Sie können mehr darüber auf der Dokumentationsseite von Sugarcube lesen.

Die erste Zeichenfolge nach unserem Befehl ist die Phrase, die in unserer Passage erscheinen wird. Der zweite ist der Name der Passage, auf die wir verlinken möchten. Ich benutze "Jag den Wumpus!" wie mein Satz, aber wir könnten stattdessen unsere Variable dort verwenden, wenn wir möchten, dass der Spieler vorher weiß, wohin er geht, wie folgt:

Schritt 4: Testen

Prüfen
Prüfen
Prüfen
Prüfen

Wenn Sie Ihren Code testen, sollten Sie feststellen, dass Ihr Link durch einen Satz ersetzt wurde, den Sie zuvor geschrieben haben. Wenn Sie darauf klicken, gelangen Sie zu einem zufälligen Raum in Ihrem Spiel.

Dieser kann Sie leider auch direkt ins Wumpuszimmer führen! Das spielt im Moment keine große Rolle, aber in einem echten Spiel wäre das ein sofortiges Spiel vorbei. Wir müssen das beheben.

Schritt 5: Raumliste hinzufügen

Raumliste hinzufügen
Raumliste hinzufügen

Zuerst erstellen wir eine Raumliste, um die Verwaltung von Räumen zu vereinfachen. Indem wir dieses Array deklarieren, können wir damit unsere $player- und $wumpus-Werte setzen, ohne Code zu wiederholen. Es hat auch einen weiteren Vorteil, den wir als nächstes untersuchen werden.

Das Testen mit diesem Code sollte sich wie zuvor verhalten.

Schritt 6: Räume eliminieren

Räume eliminieren
Räume eliminieren

Ich habe dem Code von vorhin eine einzelne Codezeile hinzugefügt (hervorgehoben).

Arrays in Sugarcube verfügen über eine integrierte Funktion, mit der Sie Elemente nach Namen löschen können. In diesem Fall können wir, sobald wir $wumpus einen Raum zugewiesen haben, diesen Raum aus unserer $roomlist löschen. Diese Funktion ist jedoch knifflig. Sie funktioniert nur, wenn die Ausgabe der Funktion zugewiesen oder in irgendeiner Weise verwendet wird. Dafür habe ich die temporäre Variable _temp erstellt.

In Sugarcube beginnen temporäre Variablen mit einem Unterstrich (_) anstelle eines Dollars ($). Sie sind nützlich, da sie gelöscht werden, sobald die Passage ausgeführt wird, sodass Sie sich keine Sorgen über sich überschneidende Variablennamen machen müssen.

Selbstverständlich lösche ich auch den Raum $player aus der $roomlist.

Schritt 7: Testen

Testen
Testen
Testen
Testen

Wir könnten den Code zwar so ausführen, wie er jetzt ist, aber das wäre kein sehr gründlicher Test. Wenn wir den Code ausführen und feststellen, dass $player und $wumpus verschiedenen Räumen zugewiesen sind, wissen wir nicht, ob das daran liegt, dass der Code funktioniert oder ob es nur Zufall ist. Sicher, wir könnten den Code viele Male ausführen und annehmen, dass, wenn er beiden nie den gleichen Raum zuweist, dies niemals der Fall sein wird, aber das wird ewig dauern und es ist immer noch keine 100%ige Sicherheit, dass es nie passieren kann.

Stattdessen brauchen wir eine Möglichkeit, dies zu überprüfen.

Ich habe am Anfang unserer Einführungspassage drei Zeilen hinzugefügt, die uns die Werte unserer Variablen $wumpus, $player und $roomlist anzeigen lassen. Aufgrund der Art und Weise, wie wir unseren Code eingerichtet haben, wissen wir, dass der Raum $wumpus und der Raum $player aus der $roomlist entfernt werden sollten.

Wenn wir diesen Code ausführen, können wir überprüfen, ob dies der Fall ist.

Schritt 8: Kurioses mit Sugarcube und Objekten

Kurioses mit Sugarcube und Objekten
Kurioses mit Sugarcube und Objekten
Kurioses mit Sugarcube und Objekten
Kurioses mit Sugarcube und Objekten
Kurioses mit Sugarcube und Objekten
Kurioses mit Sugarcube und Objekten

Sugarcube-Objekte sind ein wenig seltsam. Lassen Sie mich dies demonstrieren.

Während ich dieses Projekt ursprünglich erstellte, wollte ich meine $roomlist in einer $saveroom-Variablen speichern, bevor ich anfing, Räume daraus zu löschen. Ich dachte, es würde sich später als nützlich erweisen.

Als ich ein seltsames Verhalten von diesem Code bekam, fügte ich meiner Intro-Seite eine weitere Zeile hinzu, damit ich mir meine $saveroom-Variable ansehen konnte (zweites Bild).

Ich war schockiert, als ich feststellte, dass die Elemente, die ich aus $roomlist gelöscht hatte, auch aus meiner gespeicherten Liste gelöscht wurden! Sie können dies im dritten Bild in Aktion sehen.

Dies liegt daran, dass Sie Twine beim Kopieren eines solchen Arrays nicht anweisen, das Array zu kopieren, sondern dass diese beiden Variablen dasselbe Array sind. Wenn Sie mit einer Variablen etwas mit dem Array tun, ändert es dasselbe Array, das die andere Variable betrachtet!

Wir können dies mit der Funktion clone() beheben.

Schritt 9: Die Clone()-Funktion

Die Clone()-Funktion
Die Clone()-Funktion
Die Clone()-Funktion
Die Clone()-Funktion

Informationen zur Funktion clone() finden Sie auf der Sugarcube-Dokumentationsseite.

Eine "flache" Kopie ist das, was wir vorher gemacht haben. Anstatt eine vollständige Kopie des gesamten Arrays zu erstellen, wird einfach davon ausgegangen, dass Ihre Variable mit demselben Array arbeitet. Anstelle einer flachen Kopie führt clone() eine "tiefe" Kopie aus, die sich so verhält, wie Sie es erwarten würden. Jedes Element des Arrays wird in ein neues Array kopiert und ist vollständig vom Original getrennt.

Wenn wir diesen neuen Code testen, stellen wir fest, dass er wie erwartet funktioniert.

Natürlich spielt es keine Rolle, ob Sie $roomlist führen oder nicht. Für die Zwecke meines Projekts werde ich das nicht tun. Dies alles nur, um tiefe vs. flache Kopien zu demonstrieren.

Schritt 10: Das war's für jetzt

Das war es fürs Erste!
Das war es fürs Erste!

Wir haben Code hinzugefügt, mit dem unser Spieler in einem zufälligen Raum starten kann. Darüber hinaus haben wir einen Fehler beseitigt, bei dem der Spieler im selben Raum wie der Wumpus startete.

Wir haben gelernt, wie man Links aus Variablen erstellt und wie das Kopieren von Arrays von Sugarcube behandelt wird.

Die Dinge laufen auf Hochtouren, aber wir fangen gerade erst an!

Fröhliches Jagen!

Empfohlen: