GCM – Wrzesień: Gra w TypeScript. Skończona Gra.

Dziś przedstawiam ostateczną wersję mojej pierwszej napisanej w TypeScripcie gry. Szczerze mówiąc ani nie jest to moja najlepsza gra, ani nie jest to wybitny program TypeScriptowy. No ale tak zazwyczaj wyglądają początki, nic na to nie poradzę 🙂 .

Kolejne programy będą na pewno coraz lepsze. Póki co jestem zadowolony, że udało mi się napisać działającą grę bez pomocy żadnych frameworków, nawet jeżeli z założenia jest bardzo prosta.

TypeScript Komplena Gra

Aktualną wersję gry przetestować można klikając w obrazek powyżej. Na moim githubie znajduje się repozytorium zawierające jak najaktualniejszy stan gry. Wersja przedstawiona w poście nie będzie dostępna w źródle strony. To czego używa przeglądarka to przetranspilowany na JS kod. Wersję TypeScriptową zobaczyć można klikając w ten link.

Dużym minusem aktualnej wersji gry jest spora ilość bezpośrednich połączeń między obiektami. Moja gra jest niewielka, więc nie widać tego aż tak bardzo, ale gdyby w przyszłości miała się rozrastać, mogłoby to być problematycznie. Zdaję sobie z tego sprawę, jednak jak zazwyczaj w takich przypadkach, nie będę już poprawiał aktualnego programu. Po prostu w kolejnych postaram się unikać tego typu błędów. Chciałem o tym wspomnieć, aby każdy zdawał sobie sprawę, że można to napisać lepiej 🙂 Ale tak jak wspominałem na początku, to dopiero moja pierwsza aplikacja 😉

Z tego powodu, nie będę dziś wklejał kodu, nie ma sensu pokazywać coś co nie jest najlepiej napisane. Opiszę tylko ogólnie mechanizmy jakie stosuję dla poszczególnych elementów gry. Jeśli jednak ktoś interesuje się jak zaimplementowałem te rozwiązania, linki do odpowiednich materiałów umieściłem kilka akapitów wyżej. Oczywiście chętnie odpowiem na wszelkie pytania na temat kodu 🙂 .

Ponieważ na potkałem problemy z kolizjami, musiałem trochę zmienić pierwotne podejście. Dzięki temu metoda update głównego stanu trochę schudła, ale za to więcej kodu pojawiło się w obiekcie gracza. Pierwszym krokiem była zmiana sposobu w jaki porusza się gracz, teraz przyciśnięcie którejś ze strzałek sprawia, że gracz przesuwa się o konkretną odległość. Ruch jest wciąż animowany, element nie „skacze” po planszy. Zaawansowany game loop wciąż jest wykorzystywany, chociaż może nie jest już aż tak potrzebny 😉

Teraz kiedy wiem, gdzie dokładnie wyląduje gracz zanim jeszcze nie zacznie się jego ruch, mogę sprawdzić czy na mapie w miejsc docelowym nie znajduje się ściana lub skrzynka. Tu właśnie powstaje połączenie pomiędzy obiektami, które nie jest zbyt ładne. Obiekt gracza ma wgląd zarówno w obiekt mapy jak i obiekty skrzynek. Jeżeli na drodze znajduje się ściana, ruch nie zostaje wykonany. Jeżeli znajduje się tam skrzynka, sprawdzam czy może zostać popchnięta. Jeżeli tak, przesuwa się, jeżeli nie gracz stoi w miejscu. Ruch skrzynek blokują zarówno ściany jak i inne skrzynki.

Gdy już miałem ruch i przesuwanie skrzynek załatwione (a była to największa część programu), wystarczyło dodać możliwość ukończenia gry. Aby to zrobić, gracz musi przepchać wszystkie skrzynki na niebieskie pole w pomieszczeniu po prawej stronie planszy. Ponieważ jest to najbardziej wysunięta w tę stronę część mapy, wystarczyło, że w obiekcie stanu sprawdzam każdą ze skrzynek, jeżeli wartość x, każdej z nich jest równa lub większa wartości x strefy do której należy je przepchać, gra resetuje się.

I to wszystko, tak jak pisałem, nie jest to może najlepsza gra jaką stworzyłem, ale ja jestem zadowolony. Wiem, że dzięki temu projektowi, będę mógł wynieść znacznie więcej z dalszej nauki TYpeScriptu.

Jeżeli chcesz być na bieżąco z postami na blogu zachęcam do polubienia mojej strony na facebooku. Zawsze zamieszczam tam informacje o wszystkich nowościach. Jest to też dobre miejsce na kontakt ze mną. Na wszystkie pytania zawsze odpowiem :). Do przeczytania.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *