Spisu treści:

Linki ze zmiennych w sznurku z kostką cukru: 10 kroków
Linki ze zmiennych w sznurku z kostką cukru: 10 kroków

Wideo: Linki ze zmiennych w sznurku z kostką cukru: 10 kroków

Wideo: Linki ze zmiennych w sznurku z kostką cukru: 10 kroków
Wideo: Nikola śpiewa i pokazuje #dlaciebie #fypシ #polish #polishgirl #magical #nikola #nikita 2024, Lipiec
Anonim
Linki ze zmiennych w sznurku z kostką cukru
Linki ze zmiennych w sznurku z kostką cukru

Tak się cieszę, że znów do mnie dołączyłeś! Oznacza to, że Wumpus jeszcze cię nie zjadł. Dobry!

Dla tych z was, którzy nie są zaznajomieni, jest to zestaw samouczków, które tworzę, aby pomóc mojej uroczej kuzynce oochy-skootchy widdle w jej starszym projekcie. Te samouczki mają stanowić odniesienie do tego, co możesz zrobić z niektórymi funkcjami programowania Twine i Sugarcube. Jeśli chcesz kontynuować, pierwszy samouczek znajdziesz tutaj.

W ostatnim samouczku zbudowałem mały zestaw pomieszczeń, które gracz może eksplorować. Dodałem obiekt Wumpus i stworzyłem ogólny kod pokoju, aby zmienić to, co było wyświetlane w każdym pokoju, w zależności od tego, gdzie znajduje się Wumpus.

Krok 1: Stwórz swojego gracza

Stwórz swojego gracza
Stwórz swojego gracza

Ten krok jest bardzo prosty. Zasadniczo używam tego samego kodu, co mój $wumpus, ale zamiast tego używam zmiennej $player.

Krok 2: Nowy kod pokoju

Nowy kod pokoju
Nowy kod pokoju

Zmieniono ogólny kod pokoju tak, że wartość $player jest bieżącym pokojem. Następnie porównaj $wumpus z $player zamiast bieżącego pokoju.

Jest to drobna zmiana i nie jest całkowicie konieczna, ale lubię uporządkować mój kod.

Krok 3: Tworzenie łącza ze zmiennej

Tworzenie łącza ze zmiennej
Tworzenie łącza ze zmiennej

Na koniec chcę zastąpić link w moim pokoju początkowym takim, który zmienia się na podstawie wartości $player. Można to zrobić za pomocą funkcji „” w SugarCube. Możesz przeczytać więcej na ten temat na stronie dokumentacji Sugarcube.

Pierwszy ciąg znaków po naszym poleceniu to fraza, która pojawi się w naszym fragmencie. Drugi to nazwa fragmentu, do którego chcemy się połączyć. Używam "Poluj na Wumpusa!" jak moja fraza, ale zamiast tego moglibyśmy użyć naszej zmiennej, jeśli chcemy, aby gracz wiedział wcześniej, dokąd zmierza, na przykład:

Krok 4: Test

Test
Test
Test
Test

Kiedy testujesz swój kod, powinieneś zauważyć, że twój link został zastąpiony dowolną frazą, którą napisałeś wcześniej. Kliknięcie go przeniesie Cię do losowego pokoju w grze.

Niestety, może to również doprowadzić Cię prosto do pokoju Wumpusa! W tej chwili nie ma to większego znaczenia, ale w prawdziwej grze, która byłaby natychmiastowa. Musimy to naprawić.

Krok 5: Dodaj listę pokoi

Dodaj listę pokoi
Dodaj listę pokoi

Najpierw utworzymy listę pokoi, aby ułatwić zarządzanie pokojami. Deklarując tę tablicę, możemy jej użyć do ustawienia naszych wartości $player i $wumpus bez powtarzania kodu. Ma też inną zaletę, którą omówimy dalej.

Testowanie za pomocą tego kodu powinno zachowywać się tak jak wcześniej.

Krok 6: Eliminacja pokoi

Eliminowanie pokoi
Eliminowanie pokoi

Do poprzedniego kodu dodałem pojedynczą linię kodu (podświetlone).

Tablice w Sugarcube mają wbudowaną funkcję, która pozwala usuwać z nich elementy według nazwy. W tym przypadku, kiedy już przypiszemy $wumpusowi pokój, możemy go usunąć z naszej $roomlist. Ta funkcja jest jednak wybredna. Nie zadziała, dopóki wyjście funkcji nie zostanie przypisane lub w jakiś sposób wykorzystane. Aby się tym zająć, stworzyłem zmienną tymczasową _temp.

W Sugarcube zmienne tymczasowe zaczynają się od podkreślenia (_) zamiast dolara ($). Są przydatne, ponieważ są usuwane po uruchomieniu fragmentu, więc nie musisz się martwić o nakładanie się nazw zmiennych.

Usuwam również $player room z $roomlist, oczywiście.

Krok 7: Testowanie

Testowanie
Testowanie
Testowanie
Testowanie

Chociaż moglibyśmy uruchomić kod tak, jak jest teraz, nie byłby to bardzo dokładny test. Jeśli uruchomimy kod i stwierdzimy, że $player i $wumpus są przypisane do różnych pokoi, nie wiemy, czy to dlatego, że kod działa, czy to tylko przypadek. Jasne, moglibyśmy uruchomić kod wiele razy i założyć, że jeśli nigdy nie przydzieli im obu tego samego pokoju, to nigdy nie będzie, ale to zajmie wieczność i nadal nie jest to 100% pewność, że to się nigdy nie stanie.

Zamiast tego potrzebujemy sposobu na sprawdzenie.

Dodałem trzy wiersze na początku naszego fragmentu wprowadzającego, które pozwolą nam zobaczyć wartości naszych zmiennych $wumpus, $player i $roomlist. Ze względu na sposób, w jaki ustawiliśmy nasz kod, wiemy, że $wumpus room i $player room powinny zostać usunięte z $roomlist.

Kiedy uruchamiamy ten kod, możemy sprawdzić, czy tak właśnie jest.

Krok 8: Dziwactwa z kostką cukru i przedmiotami

Dziwactwa z kostką cukru i przedmiotami
Dziwactwa z kostką cukru i przedmiotami
Dziwactwa z kostką cukru i przedmiotami
Dziwactwa z kostką cukru i przedmiotami
Dziwactwa z kostką cukru i przedmiotami
Dziwactwa z kostką cukru i przedmiotami

Przedmioty SugarCube są trochę dziwne. Pokażę to.

Kiedy pierwotnie budowałem ten projekt, chciałem zapisać moją $roomlist w zmiennej $saveroom, zanim zacząłem usuwać z niej pokoje. Pomyślałem, że przyda się później.

Kiedy zauważyłem dziwne zachowanie tego kodu, dodałem kolejną linię do mojej strony wprowadzającej, abym mógł spojrzeć na moją zmienną $saveroom (drugi obrazek).

Byłem zszokowany, gdy odkryłem, że elementy, które usunąłem z $roomlist, zostały również usunięte z mojej zapisanej listy! Widać to w akcji na trzecim zdjęciu.

Dzieje się tak, ponieważ kiedy kopiujesz tablicę w ten sposób, nie mówisz Twine'owi, aby skopiował tablicę, mówisz Twine'owi, że te dwie zmienne są tą samą tablicą. Kiedy robisz coś z tablicą przy użyciu jednej zmiennej, zmienia ona tę samą tablicę, na którą patrzy druga zmienna!

Możemy to naprawić za pomocą funkcji clone().

Krok 9: Funkcja Clone()

Funkcja Clone()
Funkcja Clone()
Funkcja Clone()
Funkcja Clone()

Możesz przeczytać o funkcji clone() na stronie dokumentacji Sugarcube.

„Płytka” kopia to to, co robiliśmy wcześniej. Zamiast tworzyć kompletną kopię całej tablicy, zakłada po prostu, że twoja zmienna pracuje z tą samą tablicą. Zamiast płytkiej kopii clone() wykonuje "głęboką" kopię, która zachowuje się tak, jak można by się tego spodziewać. Każdy element tablicy jest kopiowany do nowej tablicy i jest całkowicie oddzielony od oryginału.

Jeśli przetestujemy ten nowy kod, okaże się, że działa on zgodnie z oczekiwaniami.

Oczywiście nie ma znaczenia, czy trzymasz $roomlist, czy nie. Na potrzeby mojego projektu nie zamierzam. Wszystko po to, by zademonstrować kopie głębokie i płytkie.

Krok 10: To wszystko na teraz

To wszystko na teraz!
To wszystko na teraz!

Dodaliśmy kod, który pozwala naszemu graczowi rozpocząć grę w losowym pokoju. Oprócz tego usunęliśmy błąd, przez który gracz zaczynał w tym samym pomieszczeniu, co Wumpus.

Dowiedzieliśmy się, jak tworzyć linki ze zmiennych i jak Sugarcube traktuje kopiowanie tablic.

Sprawy nabierają tempa, ale dopiero zaczynamy!

Pomyślnych łowów!

Zalecana: