Innehållsförteckning:

Länkar från variabler i garn med sockerrör: 10 steg
Länkar från variabler i garn med sockerrör: 10 steg

Video: Länkar från variabler i garn med sockerrör: 10 steg

Video: Länkar från variabler i garn med sockerrör: 10 steg
Video: SCP-261 Pan-dimensionell Vending och experiment Log 261 Ad De + Komplett + 2024, Juli
Anonim
Länkar från variabler i garn med sockerrör
Länkar från variabler i garn med sockerrör

Jag är så glad att du gick med mig igen! Det betyder att Wumpus inte har ätit dig än. Bra!

För er som inte är bekanta är det här en uppsättning självstudier som jag gör för att hjälpa min förtjusande oochy-skootchy widdle-kusin med sitt seniorprojekt. Dessa självstudier är avsedda att vara en referens för vad du kan göra med några av programmeringsfunktionerna i Twine och Sugarcube. Om du vill följa med kan du hitta den första självstudien här.

I den senaste handledningen byggde jag en liten uppsättning rum som spelaren kan utforska. Jag lade till ett Wumpus -objekt och gjorde en generisk rumskod för att ändra vad som visas i varje rum beroende på var Wumpus är.

Steg 1: Skapa din spelare

Skapa din spelare
Skapa din spelare

Detta steg är mycket enkelt. I huvudsak använder jag bara samma kod som min $ wumpus, men med en $ player -variabel istället.

Steg 2: Ny rumskod

Ny rumskod
Ny rumskod

Ändrade din generiska rumskod så att värdet på $ player är det aktuella rummet. Jämför sedan $ wumpus med $ player istället för det aktuella rummet.

Detta är en mindre förändring, och inte helt nödvändig, men jag gillar att hålla min kod organiserad.

Steg 3: Skapa en länk från en variabel

Skapa en länk från en variabel
Skapa en länk från en variabel

Slutligen vill jag byta ut länken i mitt startrum till en som ändras baserat på värdet på $ player. Detta kan göras med "" -funktionen i Sugarcube. Du kan läsa mer om det på Sugarcubes dokumentationssida.

Den första strängen efter vårt kommando är frasen som kommer att visas i vår passage. Den andra är namnet på passagen som vi vill länka till. Jag använder "Hunt the Wumpus!" som min fras, men vi kan använda vår variabel där istället om vi vill att spelaren ska veta vart de ska på förhand, så här:

Steg 4: Testa

Testa
Testa
Testa
Testa

När du testar din kod bör du upptäcka att din länk har ersatts med vilken fras du än skrev tidigare. Genom att klicka på den tar du dig till ett slumpmässigt rum i ditt spel.

Tyvärr kan detta också ta dig direkt till Wumpus -rummet! Det spelar ingen större roll just nu, men i ett riktigt spel skulle det vara ett omedelbart spel över. Vi måste fixa det.

Steg 5: Lägg till en rumslista

Lägg till en rumslista
Lägg till en rumslista

Först ska vi skapa en rumslista för att göra hanteringen av rum enklare. Genom att deklarera denna array kan vi använda den för att ställa in våra $ player- och $ wumpus -värden utan att upprepa kod. Det har också en annan fördel som vi kommer att utforska härnäst.

Att testa med den här koden borde bete sig precis som den hade tidigare.

Steg 6: Eliminera rum

Eliminera rum
Eliminera rum

Jag har lagt till en enda kodrad i koden från tidigare (markerad).

Arrays i Sugarcube har en inbyggd funktion som låter dig ta bort element från dem med namn. I det här fallet kan vi när vi tilldelar $ wumpus ett rum ta bort det rummet från vår $ roomlista. Den här funktionen är dock knepig. Det kommer inte att fungera om inte utmatningen från funktionen tilldelas eller används på något sätt. För att ta hand om det har jag skapat den tillfälliga variabeln _temp.

I Sugarcube börjar tillfälliga variabler med en understrykning (_) istället för en dollar ($). De är användbara eftersom de raderas när passagen körs, så du behöver inte oroa dig för överlappande variabelnamn.

Jag tar bort $ player room från $ roomlist också, bara som en självklarhet.

Steg 7: Testning

Testning
Testning
Testning
Testning

Även om vi kunde köra koden som den är nu, skulle det inte vara ett mycket noggrant test. Om vi kör koden och upptäcker att $ player och $ wumpus tilldelas olika rum vet vi inte om det beror på att koden fungerar, eller om det bara är en slump. Visst, vi kan köra koden många gånger och anta att om det aldrig tilldelar dem båda samma rum som det aldrig kommer att göra, men det kommer att ta evigheter och det är fortfarande inte en 100% försäkran om att det aldrig kan hända.

Istället behöver vi ett sätt att kontrollera.

Jag har lagt till tre rader högst upp i vår intropassage som låter oss se värdena för våra $ wumpus-, $ player- och $ roomlist -variabler. På grund av vårt sätt att sätta upp vår kod vet vi att $ wumpus -rummet och $ -rummet bör elimineras från $ roomlistan.

När vi kör den här koden kan vi kontrollera att det är så.

Steg 8: Odditeter med Sugarcube och Objects

Oddities With Sugarcube och Objects
Oddities With Sugarcube och Objects
Oddities With Sugarcube och Objects
Oddities With Sugarcube och Objects
Oddities With Sugarcube och Objects
Oddities With Sugarcube och Objects

Sugarcube -objekt är lite udda. Låt mig visa detta.

Medan jag byggde detta projekt ursprungligen ville jag spara min $ roomlista till en $ saveroom -variabel innan jag började ta bort rum från den. Jag tänkte att det skulle komma till nytta senare.

När jag fick något konstigt beteende från den här koden lade jag till en annan rad på min intro -sida för att låta mig titta på min $ saveroom -variabel (andra bilden).

Jag blev chockad över att upptäcka att elementen som jag hade tagit bort från $ roomlist också hade tagits bort från min sparade lista! Du kan se detta i aktion på den tredje bilden.

Detta beror på att när du kopierar en array så här, säger du faktiskt inte till Twine att kopiera matrisen, du säger till Twine att dessa två variabler är samma array. När du gör något med matrisen med en variabel, ändras samma matris som den andra variabeln tittar på!

Vi kan fixa detta med funktionen klon ().

Steg 9: Klonen () -funktionen

Klonen () -funktionen
Klonen () -funktionen
Klonen () -funktionen
Klonen () -funktionen

Du kan läsa om funktionen klon () på dokumentationssidan för Sugarcube.

En "ytlig" kopia är vad vi gjorde tidigare. Istället för att göra en fullständig kopia av hela matrisen antar det bara att din variabel arbetar med samma array. I stället för en grund kopia gör klon () en "djup" kopia, som beter sig som du skulle förvänta dig. Varje element i matrisen kopieras över till en ny matris och är helt separat från originalet.

Om vi testar den här nya koden tycker vi att den fungerar som förväntat.

Naturligtvis spelar det ingen roll om du behåller $ roomlista eller inte. För mitt projekt kommer jag inte att göra det. Detta var bara för att visa djupa kontra grunda kopior.

Steg 10: Det är det för nu

Det är det för nu!
Det är det för nu!

Vi har lagt till kod som låter vår spelare börja i ett slumpmässigt rum. Utöver det har vi eliminerat ett fel där spelaren skulle börja i samma rum som Wumpus.

Vi lärde oss hur man skapar länkar från variabler och hur array -kopiering behandlas av Sugarcube.

Saker och ting ökar, men vi har precis börjat!

Glad jakt!

Rekommenderad: