Skocz do zawartości

Stacks - Stosy


Rekomendowane odpowiedzi

Napisałem ten artykuł z myślą o początkujących użytkownikach GM :D

 

STACKS

W Game Makerze występuje 6 różnych typów struktur danych. Możemy w nich zapisywać różne wartości, aby w przyszłości je odczytać, w każdej chwili możemy je usunąć, wyczyścić oraz sprawdzić ile akurat mamy przypisanych wartości.

 

W tym artykule napiszę o najprostszym oraz najmniej skomplikowanym typie : o stosach. Czym one w ogóle są ? Tak naprawdę zrozumienie na czym to wszystko polega jest bardzo proste. Załóżmy, że na biurku położyłeś małą karteczkę na której było napisane „1”. Następnie położyłeś na tę kartkę kolejną z napisem „2” a później jeszcze jedną z napisem „3”. W taki sposób utworzyłeś „stos”. Teraz na szczycie tego stosu znajduje się karteczka z napisem „3”, więc będzie również pierwszą karteczką którą zdejmiesz, natomiast ostatnią którą zdejmiesz będzie ta na samym spodzie a więc „1”.

stack_obrazek.png

 

Po przeczytaniu tego prostego przykładu, mam nadzieje że już rozumiesz co to są Stacks w GML’u , gdyż działają na tej samej zasadzie. Oczywiście do stosu możemy dodawać o wiele więcej takich „karteczek”. A oto funkcje które przydadzą się nam podczas tworzenia stosów.

ds_stack_create() – Dzięki tej funkcji stworzymy nowy stos. Najlepiej zapisać to w taki sposób :

stack1 = ds_stack_create();

, gdyż ta funkcja zwraca indeks stosu ( w skrócie id lub ind ) - jego unikalny identyfikator , który będzie potrzebny do innych funkcji. Gdybyśmy napisali tylko ds_stack_create(), musielibyśmy ręcznie pisać indeks, co jest bardzo uciążliwe. Oczywiście możemy tworzyć więcej stosów. Jak łatwo się domyśleć możemy to zapisać tak :

stack2 = ds_stack_create();
stack3 = ds_stack_create();

 

Teraz mamy już gotowy stos. Jak dodać do niego jakąś wartość ? użyjemy do tego funkcji ds_stack_push(id,val) . W pole oznaczone id wpisujemy indeks stosu (na przykład chcesz stos drugi to wpisujesz stack2, albo inną zmienną)W pole val wpisujesz jakąś wartość – może to być na przykład 5. Równie dobrze możesz tam wpisać nazwę zmiennej np. mana. Wtedy jeśli na przykład mana = 256 wtedy na szczyt stosu zostanie dodana wartość 256.

Funkcja ds_stack_top(id) , zwróci nam jaka wartość znajduje się na szczycie stosu ( czyli tą, jaką dodaliśmy jako ostatnią ) , natomiast jeśli chcemy aby wartość była zwrócona i usunięta, wtedy używamy funkcji ds_stack_pop(id).

Do usunięcia stosu przeznaczona jest funkcja : ds_stack_destroy(id),

Do wyczyszczenia stosu ( usuwa z niego wszystkie wartości ale sam stos zostaje ) : ds_stack_clear(id) Fukcja ds_stack_size(id) zwraca wielkość stosu ( wielkość zależy od tego ile jest w nim zapisanych wartości ).

jeśli chcemy na przykład aby zmienna AA miała wartość równą wielkości drugiego stosu to wtedy piszemy :

AA = ds_stack_size(stack2);

. funckja ds_stack_empty(id) sprawdza czy stos jest pusty ( jak łatwo się domyśleć zwraca 0 albo 1 ) .

 

Ćwiczenie :

 Włącz Game Makera, stwórz nowy stos i dodaj do niego kilka wartości

 Niech wartość zmiennej AA będzie równa wartości na szczycie stosu

 Niech w lewym górnym rogu ekranu będzie widoczna wielkość stosu

 Po naciśnięciu klawisza ENTER niech stos się wyczyści

 Jeśli stos jest pusty, niech gra się wyłączy.

 

Mam nadzieję, że choć trochę spodobał Ci się ten artykuł i pomógł Ci zrozumieć jak korzystać ze stosów. Proszę o komentarze i pisanie o ewentualnych błędach w artykule. :]

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm, bo ja wiem - ze stosow to ja nie kozystam (znam je ale listy przydaja mi sie bardziej), ale dodales obrazki, to pomaga zrozumiec. Niech inni mnie zbesztaja, jak chca, ale dam 4/5 bo gdybym byl poczatkujacym to latwo bym zrozumial. Co prawda, brakuje tu jakiegos przykladu do konkrentnych zastosowan w grach/programach bo to co podales za cwiczenie to troche odstrasza brakiem konkretyzacji.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...