Innholdsfortegnelse:

Lenker fra variabler i garn med sukkerbit: 10 trinn
Lenker fra variabler i garn med sukkerbit: 10 trinn

Video: Lenker fra variabler i garn med sukkerbit: 10 trinn

Video: Lenker fra variabler i garn med sukkerbit: 10 trinn
Video: Полный курс React Query за час | TanStack Query v4 для начинающих 2024, Juli
Anonim
Lenker fra variabler i garn med sukkerterning
Lenker fra variabler i garn med sukkerterning

Jeg er så glad for at du ble med meg igjen! Dette betyr at Wumpus ikke har spist deg ennå. God!

For de av dere som ikke er kjent, er dette et sett med opplæringsprogrammer jeg lager for å hjelpe min yndige oochy-skootchy widdle fetter med sitt seniorprosjekt. Disse opplæringsprogrammene er ment å være en referanse for hva du kan gjøre med noen av programmeringsfunksjonene til Twine og Sugarcube. Hvis du vil følge med, kan du finne den første opplæringen her.

I den siste opplæringen bygde jeg et lite sett med rom som spilleren kan utforske. Jeg la til et Wumpus -objekt og laget en generisk romkode for å endre det som ble vist i hvert rom, avhengig av hvor Wumpus er.

Trinn 1: Lag spilleren din

Lag din spiller
Lag din spiller

Dette trinnet er veldig enkelt. I hovedsak bruker jeg bare den samme koden som min $ wumpus, men med en $ player -variabel i stedet.

Trinn 2: Ny romkode

Ny romkode
Ny romkode

Endret den generiske romkoden slik at verdien til $ player er gjeldende rom. Sammenlign deretter $ wumpus med $ player i stedet for det nåværende rommet.

Dette er en liten endring, og ikke helt nødvendig, men jeg liker å holde koden organisert.

Trinn 3: Opprette en kobling fra en variabel

Opprette en kobling fra en variabel
Opprette en kobling fra en variabel

Til slutt vil jeg erstatte lenken i startrommet mitt til en som endres basert på verdien av $ player. Dette kan gjøres med "" -funksjonen i Sugarcube. Du kan lese mer om det på Sugarcubes dokumentasjonsside.

Den første strengen etter kommandoen vår er setningen som vil vises i passasjen vår. Den andre er navnet på passasjen vi vil koble til. Jeg bruker "Hunt the Wumpus!" som min setning, men vi kan bruke variabelen vår der i stedet hvis vi vil at spilleren skal vite hvor de skal på forhånd, slik:

Trinn 4: Test

Test
Test
Test
Test

Når du tester koden din, bør du finne ut at lenken din er erstattet med hvilken setning du skrev før. Hvis du klikker på den, kommer du til et tilfeldig rom i spillet ditt.

Dessverre kan dette også ta deg rett til Wumpus -rommet! Det spiller ingen rolle akkurat nå, men i et ekte spill ville det være et øyeblikkelig spill. Vi må fikse det.

Trinn 5: Legg til en romliste

Legg til en romliste
Legg til en romliste

Først skal vi lage en romliste for å gjøre det enklere å administrere rom. Ved å deklarere denne matrisen kan vi bruke den til å angi verdiene $ player og $ wumpus uten å gjenta koden. Det har også en annen fordel som vi vil utforske neste.

Testing med denne koden skal oppføre seg akkurat som den hadde før.

Trinn 6: Eliminering av rom

Eliminere rom
Eliminere rom

Jeg har lagt til en enkelt kodelinje i koden fra før (uthevet).

Arrays i Sugarcube har en innebygd funksjon som lar deg slette elementer fra dem ved navn. I dette tilfellet, når vi tildeler $ wumpus et rom, kan vi slette dette rommet fra $ romlisten. Denne funksjonen er imidlertid fin. Det vil ikke fungere med mindre utdataene til funksjonen er tilordnet eller brukt på en eller annen måte. For å ta vare på det har jeg opprettet den midlertidige variabelen _temp.

I Sugarcube starter midlertidige variabler med en understreking (_) i stedet for en dollar ($). De er nyttige fordi de blir slettet når passasjen er kjørt, så du trenger ikke å bekymre deg for overlappende variabelnavn.

Jeg sletter $ spillerommet fra $ roomlist også, bare som en selvfølge.

Trinn 7: Testing

Testing
Testing
Testing
Testing

Selv om vi kunne kjøre koden slik den er nå, ville det ikke være en veldig grundig test. Hvis vi kjører koden og finner ut at $ player og $ wumpus er tilordnet forskjellige rom, vet vi ikke om det er fordi koden fungerer, eller om det bare er en tilfeldighet. Visst, vi kan kjøre koden mange ganger, og anta at hvis det aldri tildeler dem begge det samme rommet at det aldri vil gjøre det, men det vil ta evigheter, og det er fortsatt ikke 100% forsikring om at det aldri kan skje.

I stedet trenger vi en måte å sjekke på.

Jeg har lagt til tre linjer øverst i intropassasjen som lar oss se verdiene til $ wumpus-, $ player- og $ roomlist -variabler. På grunn av måten vi konfigurerte koden vår på, vet vi at $ wumpus -rommet og $ spillerommet bør fjernes fra $ roomlisten.

Når vi kjører denne koden, kan vi kontrollere at det er tilfelle.

Trinn 8: Odditeter med sukkerbit og objekter

Oddities With Sugarcube and Objects
Oddities With Sugarcube and Objects
Oddities With Sugarcube and Objects
Oddities With Sugarcube and Objects
Oddities With Sugarcube and Objects
Oddities With Sugarcube and Objects

Sugarcube -objekter er litt rare. La meg demonstrere dette.

Mens jeg bygde dette prosjektet opprinnelig, ønsket jeg å lagre $ roomlisten min i en $ saveroom -variabel før jeg begynte å slette rom fra den. Jeg tenkte at det ville komme godt med senere.

Da jeg fikk en merkelig oppførsel fra denne koden, la jeg til en annen linje på min intro -side for å la meg se på min $ saveroom -variabel (andre bilde).

Jeg ble sjokkert over å finne at elementene jeg hadde slettet fra $ roomlist også hadde blitt slettet fra min lagrede liste! Du kan se dette i aksjon på det tredje bildet.

Dette er fordi når du kopierer en matrise som denne, forteller du faktisk ikke Twine å kopiere matrisen, du forteller Twine at disse to variablene er samme matrise. Når du gjør noe med matrisen ved hjelp av en variabel, endrer den samme matrisen som den andre variabelen ser på!

Vi kan fikse dette med klonen () -funksjonen.

Trinn 9: Klonen () -funksjonen

Klonen () -funksjonen
Klonen () -funksjonen
Klonen () -funksjonen
Klonen () -funksjonen

Du kan lese om klone () -funksjonen på dokumentasjonssiden for Sugarcube.

En "grunne" kopi er det vi gjorde før. I stedet for å lage en fullstendig kopi av hele matrisen, antar det bare at variabelen din jobber med samme matrise. I stedet for en grunne kopi, gjør klon () en "dyp" kopi, som oppfører seg som du ville forvente. Hvert element i matrisen blir kopiert til en ny matrise, og er helt atskilt fra originalen.

Hvis vi tester denne nye koden, finner vi ut at den fungerer som forventet.

Selvfølgelig spiller det ingen rolle om du beholder $ roomlist eller ikke. Når det gjelder prosjektet mitt, skal jeg ikke. Dette var bare for å demonstrere dype kontra grunne kopier.

Trinn 10: Det er det for nå

Det er det for nå!
Det er det for nå!

Vi har lagt til kode som lar spilleren vår starte i et tilfeldig rom. I tillegg til det har vi eliminert en feil der spilleren skulle starte i samme rom som Wumpus.

Vi lærte om hvordan du oppretter lenker fra variabler, og hvordan matrisekopiering behandles av Sugarcube.

Ting stiger, men vi har nettopp begynt!

God jakt!

Anbefalt: