Historia Pewnej Gry Językowej #8 – Obserwator czeka i pracuje

Historia Pewnej Gry Językowej

#8

Obserwator czeka i pracuje

Ostatnio zrobiłem wyświetlanie naszego postępu. Punktów, doświadczenia oraz poziomu jakie udało nam się zdobyć. Jednak uświadomiłem sobie, że nie jest on aktualizowany. Ciągle wyświetla się to samo. I tutaj wpadłem na pomysł, aby wykorzystać wzorzec projektowy, a mianowicie wzorzec obserwatora. Idealnie się nada do zmieniania punktów po każdym kliknięciu oraz później ułatwi mi dodanie różnych zachowań do wyglądu.

Ale niestety tutaj pojawił się problem. Dowiedziałem się, że java pozwala dziedziczyć tylko jedną klasę. To jest straszne i to pierwsza rzecz, która nie spodobała mi się w tym języku. Wydaje mi się to takim sztucznym ograniczeniem programisty. Pewnie narzuca to jakiś rodzaj pracy czy coś (jak ktoś coś wie proszę pisać), ale z pewnością nie ułatwia mi pracy nad tą grą.

Tak więc, dodanie wzorca obserwatora wymaga ode mnie zmian w kodzie. Moja klasa LevelBar nie może już dziedziczyć po klasie z libGdx Table. Zrobiłem zmienną table, która to zastąpi. Tak samo musiałem zrobić w klasie GameView. Skoro ten mały krok udało nam się wykonać, to czas przejść do implementacji wzorca.

Potrzebuję podmiotu i obserwatora, który będzie na niego patrzył. Klasa Subject, czyli podmiot będzie zawierać listę swoich obserwatorów i stan. Stan przyda się później jak będziemy próbować robić coraz bardziej skomplikowane rzeczy. Przynajmniej mam taką nadzieję 🙂 Posiada też proste funkcje, jedna, która dodaje nowego obserwatora do listy i funkcję, która wywołuje u wszystkich metodę update. Klasa Observer  jest jeszcze prostsza, gdyż zawiera jedynie podmiot, który obserwuje oraz metodę wirtualną update, która jest wywoływana kiedy zmieni się stan podmiotu.

Pozostało tylko to wszystko połączyć i napisać metody do aktualizowania naszego postępu. Rozdzieliłem to na dwie funkcje. Jedna sprawdza nasze doświadczenie i jeśli trzeba zwiększa nam poziom i ustawia doświadczenie na zero. Za to druga dba o to, aby zawsze były wyświetlone aktualne dane. Te aktualizacje wywołują się w nadpisanej funkcji z klasy Observer. Dzięki temu jeśli coś się w grze zmienia to następuje update w klasie LevelBar.

To chyba tyle na teraz. Dodaliśmy bardzo ważny element i rozwiązaliśmy problem z nim związany za pomocą wzorca projektowego. Jest to duży postęp w pisaniu kodu. Dodatkowo nauczyłem się, że w javie może być problem z dziedziczeniem i trzeba szukać innych rozwiązań. Na szczęście tutaj było, dosyć łatwo go rozwiązać i cieszę się, że nastąpił na tym etapie, a nie gdzieś później. Możliwe, że oszczędziło mi to na przyszłość wiele problemów.

Please follow and like us:
0

Dodaj komentarz

1 Komentarz do "Historia Pewnej Gry Językowej #8 – Obserwator czeka i pracuje"

Powiadom o
avatar
Sortuj wg:   najnowszy | najstarszy | oceniany
b00sti
Gość

Poczytaj sobie o interfejsach 🙂