Obsah:

Odkazy z proměnných v motouzu se Sugarcube: 10 kroků
Odkazy z proměnných v motouzu se Sugarcube: 10 kroků

Video: Odkazy z proměnných v motouzu se Sugarcube: 10 kroků

Video: Odkazy z proměnných v motouzu se Sugarcube: 10 kroků
Video: Proměnné - vytvoření, změna, pojmenování | 3. lekce (Python pro začátečníky) 2024, Červenec
Anonim
Odkazy z proměnných v motouzu se Sugarcube
Odkazy z proměnných v motouzu se Sugarcube

Jsem tak rád, že jsi se ke mně znovu přidal! To znamená, že tě Wumpus ještě nesnědl. Dobrý!

Pro ty z vás, kteří nejsou obeznámeni, je to sada tutoriálů, které vytvářím, abych pomohl své rozkošné sestřence oochy-skootchy widdle s jejím starším projektem. Tyto výukové programy mají být referencí na to, co můžete dělat s některými programovacími funkcemi Twine a Sugarcube. Pokud se chcete řídit, první tutoriál najdete zde.

V posledním tutoriálu jsem postavil malou sadu místností, které může hráč prozkoumat. Přidal jsem objekt Wumpus a vytvořil obecný kód místnosti, který měnil to, co se zobrazovalo v každé místnosti, podle toho, kde se Wumpus nachází.

Krok 1: Vytvořte si hráče

Vytvořte si svého hráče
Vytvořte si svého hráče

Tento krok je velmi jednoduchý. V zásadě používám stejný kód jako můj $ wumpus, ale místo toho s proměnnou $ player.

Krok 2: Nový kód pokoje

Nový kód pokoje
Nový kód pokoje

Změněn váš obecný kód místnosti, takže hodnota $ hráče je aktuální místnost. Poté porovnejte $ wumpus s $ playerem místo aktuální místnosti.

Toto je drobná změna, a není úplně nezbytná, ale rád udržuji svůj kód organizovaný.

Krok 3: Vytvoření odkazu z proměnné

Vytvoření odkazu z proměnné
Vytvoření odkazu z proměnné

Nakonec chci nahradit odkaz v mé počáteční místnosti na ten, který se mění na základě hodnoty $ hráče. To lze provést pomocí funkce "" v Sugarcube. Více si o tom můžete přečíst na stránce dokumentace Sugarcube.

První řetězec po našem příkazu je fráze, která se objeví v naší pasáži. Druhý je název pasáže, na kterou chceme odkazovat. Používám „Hunt the Wumpus!“jako moje fráze, ale mohli bychom místo toho použít naši proměnnou, pokud chceme, aby hráč předem věděl, kam jde:

Krok 4: Test

Test
Test
Test
Test

Při testování kódu byste měli zjistit, že váš odkaz byl nahrazen jakoukoli frází, kterou jste dříve napsali. Kliknutím na něj se dostanete do náhodné místnosti ve vaší hře.

Bohužel vás to také může zavést přímo do místnosti Wumpus! Na tom teď moc nezáleží, ale ve skutečné hře by to byla okamžitá hra. Musíme to opravit.

Krok 5: Přidejte seznam místností

Přidejte seznam místností
Přidejte seznam místností

Nejprve vytvoříme seznam místností, abychom usnadnili správu místností. Deklarací tohoto pole ho můžeme použít k nastavení hodnot $ player a $ wumpus bez opakování kódu. Má také další výhodu, kterou prozkoumáme dále.

Testování s tímto kódem by se mělo chovat stejně jako dříve.

Krok 6: Odstranění místností

Odstranění místností
Odstranění místností

Přidal jsem jeden řádek kódu do kódu z předchozího (zvýrazněno).

Pole v Sugarcube mají vestavěnou funkci, která vám umožňuje odstranit prvky z nich podle názvu. V tomto případě, jakmile přidělíme $ wumpus místnost, můžeme tuto místnost odstranit ze seznamu $ roomlist. Tato funkce je však náročná. Nebude to fungovat, pokud nebude výstup funkce přiřazen nebo nějakým způsobem použit. Abych se o to postaral, vytvořil jsem dočasnou proměnnou _temp.

V Sugarcube začínají dočasné proměnné podtržítkem (_) místo dolaru ($). Jsou užitečné, protože se po spuštění pasáže smažou, takže si nemusíte dělat starosti s překrývajícími se názvy proměnných.

Vymazávám také hráčskou místnost $ ze seznamu $ roomlist, jako samozřejmost.

Krok 7: Testování

Testování
Testování
Testování
Testování

I když bychom mohli spustit kód tak, jak je nyní, nebyl by to příliš důkladný test. Pokud spustíme kód a zjistíme, že $ player a $ wumpus jsou přiřazeny k různým místnostem, nevíme, zda je to proto, že kód funguje, nebo je to jen náhoda. Jistě, mohli bychom kód spustit mnohokrát a předpokládat, že pokud jim oběma nikdy nepřidělí stejnou místnost, nikdy to nebude, ale bude to trvat věčnost a stále to není stoprocentní jistota, že se to nikdy nemůže stát.

Místo toho potřebujeme způsob kontroly.

Do horní části naší úvodní pasáže jsem přidal tři řádky, které nám umožní vidět hodnoty našich proměnných $ wumpus, $ player a $ roomlist. Vzhledem k tomu, jak jsme nastavili náš kód, víme, že místnost $ wumpus a $ hráč by měla být ze seznamu $ roomlist odstraněna.

Když spustíme tento kód, můžeme zkontrolovat, zda je tomu tak.

Krok 8: Podivnosti s Sugarcube a objekty

Zvláštnosti se Sugarcube a objekty
Zvláštnosti se Sugarcube a objekty
Zvláštnosti se Sugarcube a objekty
Zvláštnosti se Sugarcube a objekty
Zvláštnosti se Sugarcube a objekty
Zvláštnosti se Sugarcube a objekty

Objekty Sugarcube jsou trochu zvláštní. Ukážu to.

Zatímco jsem původně stavěl tento projekt, chtěl jsem uložit svůj $ roomlist do proměnné $ saveroom, než jsem z něj začal mazat místnosti. Myslel jsem, že se to bude hodit později.

Když jsem z tohoto kódu dostal nějaké podivné chování, přidal jsem na úvodní stránku další řádek, abych se mohl podívat na svou proměnnou $ saveroom (druhý obrázek).

Byl jsem šokován, když jsem zjistil, že prvky, které jsem odstranil z $ roomlist, byly také odstraněny z mého uloženého seznamu! Na třetím obrázku to můžete vidět v akci.

Důvodem je, že když kopírujete pole takto, ve skutečnosti neříkáte Twine, aby kopírovalo pole, říkáte Twine, že tyto dvě proměnné jsou stejné pole. Když uděláte něco s polem pomocí jedné proměnné, změní to stejné pole, na které se dívá druhá proměnná!

Můžeme to opravit pomocí funkce clone ().

Krok 9: Funkce Clone ()

Funkce Clone ()
Funkce Clone ()
Funkce Clone ()
Funkce Clone ()

O funkci clone () si můžete přečíst na stránce dokumentace Sugarcube.

Dříve jsme dělali „mělkou“kopii. Namísto vytvoření úplné kopie celého pole pouze předpokládá, že vaše proměnná pracuje se stejným polem. Místo mělké kopie provede clone () „hlubokou“kopii, která se chová tak, jak byste čekali. Každý prvek pole je zkopírován do nového pole a je zcela odlišný od původního.

Pokud tento nový kód otestujeme, zjistíme, že funguje podle očekávání.

Samozřejmě nezáleží na tom, zda si ponecháte $ roomlist nebo ne. Pro účely mého projektu se nechystám. Všechno to bylo jen pro ukázku hlubokých vs. mělkých kopií.

Krok 10: To je prozatím vše

To je prozatím vše!
To je prozatím vše!

Přidali jsme kód, který umožňuje našemu hráči začít v náhodné místnosti. Kromě toho jsme odstranili chybu, kde by hráč začínal ve stejné místnosti jako Wumpus.

Dozvěděli jsme se o tom, jak vytvářet odkazy z proměnných a jak kopírování polí zpracovává Sugarcube.

Věci se zrychlují, ale teprve začínáme!

Šťastný lov!

Doporučuje: