Witaj! Ostatnie parę tygodni poświęciłem na napisanie mojej pierwszej aplikacji na system Android. Projekt zmieniał swoja postać i ostatecznie został grą zręcznościową z elementami gry logicznej i w takiej formie udało mi się go wydać.
Grafika gry jest prosta, jeden View wypełniający cały ekran, na którym za pomocą Canvas wszystkie kształty są rysowane. Aktualizacją stanu obiektów i całą logiką zajmuje się osobny wątek, GameThread. Rozgrywka opiera się głównie na elastycznych kolizjach pomiędzy kulkami, wokół tego budowane są poziomy, których obecnie jest dziesięć.
Chciałbym prosić Ciebie o ocenę jakości rozgrywki oraz kodu.
Link Play Store
W szczególności interesuje mnie GameThread. Próbowałem rozwiązać problem zmiany poziomu, który pętla wykonuje i stworzyłem Task. W małej skali spełnił swoje zadanie, lecz jest on w klasie GameThread, przez to stała się ona strasznie gruba i ciężka do utrzymania. Co gorsza, będzie rosnąć z każdym poziomem. Nie potrafiłem ich skutecznie rozdzielić, gdyż Task potrzebuje prawie wszystkich referencji które ma GameThread i przekazywanie ich za każdym razem wydaje mi się być mało efektywne.
Chciałbym prosić również o inną rade. Zastanawiałem się nad takim problemem: Co jeżeli jakiś obiekt z gry będzie chciał się dowiedzieć jakie obiekty są blisko niego. Obecne referencje do obiektów gry trzyma EntityManager. Problem można było by rozwiązać dając każdemu obiektowi referencje do niego, ale wydaje mi się, że to bardzo zawikła kod. Znalazłem wzorzec projektowy, Singleton, który chyba rozwiązuje ten problem, lecz po krótkim czytaniu internetów, dowiedziałem się, że za jego użycie grozi kara śmierci czy coś. Czy to faktycznie zły pomysł i co było by lepsze?
Wszystkie inne wskazówki będą dla mnie bardzo cenne.
Link Github