Inhoudsopgave:

Links van variabelen in touw met Sugarcube - Ajarnpa
Links van variabelen in touw met Sugarcube - Ajarnpa

Video: Links van variabelen in touw met Sugarcube - Ajarnpa

Video: Links van variabelen in touw met Sugarcube - Ajarnpa
Video: Leer gratis onder begeleiding een dobbelspel programmeren in HTML, CSS & JavaScript! 2024, Juli-
Anonim
Links van variabelen in touw met Sugarcube
Links van variabelen in touw met Sugarcube

Ik ben zo blij dat je weer bij me bent! Dit betekent dat de Wumpus je nog niet heeft opgegeten. Mooi zo!

Voor degenen onder u die niet bekend zijn, dit is een reeks tutorials die ik maak om mijn schattige oochy-skootchy widdle neef te helpen met haar senior project. Deze tutorials zijn bedoeld als referentie voor wat u kunt doen met enkele programmeerfuncties van Twine en Sugarcube. Als je mee wilt doen, kun je hier de eerste tutorial vinden.

In de laatste tutorial heb ik een kleine set kamers gebouwd die de speler kan verkennen. Ik heb een Wumpus-object toegevoegd en een generieke kamercode gemaakt om te veranderen wat in elke kamer werd weergegeven, afhankelijk van waar de Wumpus zich bevindt.

Stap 1: Maak uw speler

Maak je speler
Maak je speler

Deze stap is heel eenvoudig. In wezen gebruik ik gewoon dezelfde code als mijn $wumpus, maar in plaats daarvan met een $player-variabele.

Stap 2: Nieuwe kamercode

Nieuwe kamercode
Nieuwe kamercode

Je algemene kamercode gewijzigd, zodat de waarde van $player de huidige kamer is. Vergelijk dan $wumpus met $player in plaats van de huidige kamer.

Dit is een kleine verandering, en niet helemaal noodzakelijk, maar ik hou mijn code graag georganiseerd.

Stap 3: Een link maken vanuit een variabele

Een koppeling maken vanuit een variabele
Een koppeling maken vanuit een variabele

Ten slotte wil ik de link in mijn startkamer vervangen door een link die verandert op basis van de waarde van $player. Dit kan met de functie "" in Sugarcube. Op de documentatiepagina van Sugarcube lees je daar meer over.

De eerste string na onze opdracht is de zin die in onze passage zal verschijnen. De tweede is de naam van de passage waarnaar we willen linken. Ik gebruik "Hunt the Wumpus!" als mijn zin, maar we zouden in plaats daarvan onze variabele daar kunnen gebruiken als we willen dat de speler van tevoren weet waar ze naartoe gaan, zoals dit:

Stap 4: Testen

Toets
Toets
Toets
Toets

Wanneer u uw code test, zou u moeten ontdekken dat uw link is vervangen door de zin die u eerder hebt geschreven. Als je erop klikt, ga je naar een willekeurige kamer in je spel.

Helaas kan dit je ook rechtstreeks naar de Wumpus-kamer brengen! Dat maakt op dit moment niet veel uit, maar in een echte game zou dat een instant game-over zijn. Dat moeten we oplossen.

Stap 5: Voeg een kamerlijst toe

Voeg een kamerlijst toe
Voeg een kamerlijst toe

Eerst gaan we een kamerlijst maken om het beheren van kamers gemakkelijker te maken. Door deze array te declareren, kunnen we deze gebruiken om onze $player- en $wumpus-waarden in te stellen zonder code te herhalen. Het heeft ook nog een ander voordeel dat we hierna zullen onderzoeken.

Testen met deze code zou zich net zo moeten gedragen als voorheen.

Stap 6: Kamers elimineren

Kamers elimineren
Kamers elimineren

Ik heb een enkele regel code toegevoegd aan de code van eerder (gemarkeerd).

Arrays in Sugarcube hebben een ingebouwde functie waarmee u elementen op naam kunt verwijderen. In dit geval kunnen we, zodra we $wumpus een kamer hebben toegewezen, die kamer van onze $roomlijst verwijderen. Deze functie is echter kieskeurig. Het werkt niet tenzij de uitvoer van de functie op een of andere manier wordt toegewezen of gebruikt. Om daarvoor te zorgen, heb ik de tijdelijke variabele _temp gemaakt.

In Sugarcube beginnen tijdelijke variabelen met een onderstrepingsteken (_) in plaats van een dollar ($). Ze zijn handig omdat ze worden verwijderd zodra de passage is uitgevoerd, dus u hoeft zich geen zorgen te maken over overlappende variabelenamen.

Ik verwijder ook de $player room van $roomlist, gewoon als een vanzelfsprekendheid.

Stap 7: Testen

Testen
Testen
Testen
Testen

Hoewel we de code zouden kunnen uitvoeren zoals deze nu is, zou dat geen erg grondige test zijn. Als we de code uitvoeren en ontdekken dat $player en $wumpus aan verschillende kamers zijn toegewezen, weten we niet of dat komt omdat de code werkt, of dat het gewoon toeval is. Natuurlijk kunnen we de code vele malen uitvoeren en aannemen dat als het hen nooit allebei dezelfde kamer toewijst, dit nooit zal gebeuren, maar dat zal een eeuwigheid duren en het is nog steeds geen 100% zekerheid dat het nooit kan gebeuren.

In plaats daarvan hebben we een manier nodig om te controleren.

Ik heb drie regels toegevoegd aan de bovenkant van onze intro-passage die ons de waarden van onze $wumpus-, $player- en $roomlist-variabelen laat zien. Door de manier waarop we onze code hebben opgezet, weten we dat de $wumpus room en $player room van de $roomlijst moeten worden verwijderd.

Wanneer we deze code uitvoeren, kunnen we controleren of dat het geval is.

Stap 8: Eigenaardigheden met Sugarcube en objecten

Eigenaardigheden met Sugarcube en objecten
Eigenaardigheden met Sugarcube en objecten
Eigenaardigheden met Sugarcube en objecten
Eigenaardigheden met Sugarcube en objecten
Eigenaardigheden met Sugarcube en objecten
Eigenaardigheden met Sugarcube en objecten

Sugarcube-objecten zijn een beetje vreemd. Laat me dit aantonen.

Terwijl ik dit project oorspronkelijk aan het bouwen was, wilde ik mijn $roomlist opslaan in een $saverroom-variabele voordat ik kamers ervan begon te verwijderen. Ik dacht dat het later wel van pas zou komen.

Toen ik vreemd gedrag van deze code kreeg, voegde ik nog een regel toe aan mijn intropagina om me naar mijn $saverroom-variabele te laten kijken (tweede afbeelding).

Ik was geschokt toen ik ontdekte dat de elementen die ik van $roomlist had verwijderd, ook waren verwijderd uit mijn opgeslagen lijst! Je kunt dit in actie zien op de derde foto.

Dit komt omdat wanneer je een array als deze kopieert, je Twine niet echt vertelt om de array te kopiëren, je vertelt Twine dat deze twee variabelen dezelfde array zijn. Wanneer u iets doet aan de array met behulp van één variabele, verandert het dezelfde array waar de andere variabele naar kijkt!

We kunnen dit oplossen met de clone() functie.

Stap 9: De Clone()-functie

De Kloon()-functie
De Kloon()-functie
De Kloon()-functie
De Kloon()-functie

U kunt meer lezen over de clone()-functie op de Sugarcube-documentatiepagina.

Een "ondiepe" kopie is wat we eerder deden. In plaats van een volledige kopie van de hele array te maken, wordt er gewoon vanuit gegaan dat je variabele met dezelfde array werkt. In plaats van een ondiepe kopie, maakt clone() een "diepe" kopie, die zich gedraagt zoals je zou verwachten. Elk element van de array wordt gekopieerd naar een nieuwe array en staat volledig los van het origineel.

Als we deze nieuwe code testen, merken we dat deze werkt zoals verwacht.

Het maakt natuurlijk niet uit of je $roomlist bijhoudt of niet. Voor de doeleinden van mijn project ga ik dat niet doen. Dit was allemaal alleen om diepe versus ondiepe kopieën te demonstreren.

Stap 10: Dat is het voor nu

Dat is het voor nu!
Dat is het voor nu!

We hebben code toegevoegd waarmee onze speler in een willekeurige kamer kan beginnen. Daarnaast hebben we een bug geëlimineerd waarbij de speler in dezelfde kamer als de Wumpus zou beginnen.

We hebben geleerd hoe je links van variabelen kunt maken en hoe het kopiëren van arrays wordt behandeld door Sugarcube.

Het gaat steeds beter, maar we zijn nog maar net begonnen!

Goede jacht!

Aanbevolen: