Pokaż kod III – Turn The Snake

Trzecia część przeglądu kodu moich gier/aplikacji. Zapraszam.


Gra której większość napisałem w zasadzie w ciągu weekendu. Niepotrzebne były jakiekolwiek assety z Open game art czy temu podobnych stron stron (poza dźwiękami kliknięcia i czcionką). Wariacja na temat Snejka i kręcących w głowie kolorowych gierek.

Pisałem to dość dawno, stąd od razu ostrzegam przed powtarzaniem złych praktyk pisania kodu, jaki jest w tym repozytorium.

Przed dalszym czytaniem polecam ściągnąć tutaj, lub obejrzeć poniższy filmik.

Gameplay

Film mocno klatkuje, prawdopodobnie ze względu na niezmierzone pokłady mocy mobilnego celerona.

Technologie:

Przez jakiś czas wspierałem również reklamy poprzez AdMob (wykupione przez Google w 2009) i darmowe Google support library do współpracy z Androidem. Działało O.K (chociaż zwiększały wagę całej gry z 1 MB do >5MB), ale nie było powodu by z niego korzystać – na dłuższą metę reklamy przeszkadzały w grze a pieniądze z reklam…

Monetyzacja

Po ponad roku od wrzucenia TTS i półtora roku po wrzuceniu Memo Boxes, moje konto AdMob wygląda następująco:

admob

admob

admob

admob

Nie, żebym liczył na więcej, ale takie są realia. Nie ma co liczyć na randomowe pobierania osób kręcących się po Google Play, jeśli nie porozsyłasz gry ani nie dotrzesz w żaden inny sposób do odbiorcy to licznik pobrań stanie na 50. Wydaje mi się, że nawet zatrudniając grafików i tworząc zawartość postawioną na jakość, jest to bariera nie do przeskoczenia. Co stawia nas przed kolejnym problemem.

Marketing

Napisałem kiedyś osobny post o tym jak zerowym kosztem podnieść sobie licznik pobrań, tymczasowo wskoczyć na top kilkaset według pobrań danego dnia i mieć trochę szansy na wybicie się. Żeby nie powtarzać się, krótko podsumuję to, co sam próbowałem:

Udostępnianie linków do pobrania na gamedevowych grupkach na Facebooku, m.in:

Po wrzuceniu na grupki odnotowałem +200 pobrań w ciągu kilku następnych dni.

Są serwisy, które same szukają zawartości do wrzucenia i mają formularze kontaktowe, gdzie można podesłać swoją grę. Wysłałem Memo Boxes i po 3 miesiącacach dostałem w zwrocie odpowiedź:

playplayfun

Plus LibGDX jest taki, że piszesz raz i uruchamiasz w przeglądarce, Androidzie, na desktopie i przy odrobinie szczęścia na iOS. Udało mi się wyeksportować wersję .war Memo Boxes i im podesłać, przy czym coś musiałem zepsuć przy eksportowaniu ewentualnie wynikało to z niedoskonałości przenoszenia libGDX na stronę, ale MemoBoxes działało okropnie. Za to dostałem darmową reklamę i coś w rodzaju recenzji.

Do tego próbowałem podesłać TTS do Ketchappu (wydawali kiedyś właśnie takie proste, kolorowe gierki), zero odzewu po automatycznym zwrocie:

ketchapp

Do tego gdzieś w internecie znalazłem kiedyś listę maili (w tabeli Excela) do dziesiątek serwisów o telefonach które piszą o aplikacjach/grach (głównie anglojęzyczne), myślę że taka aktualna lista nadal jest gdzieś do pobrania po odpowiednim wyszukaniu.


Sekrety działania

Sposób poruszania węża

Gdyby wyłączyć obrót figury, wąż poruszałby się po funkcji liniowej równolegle do jednej ze ścian danej figury, po kliknięciu zmieniałby ścianę do której równolegle się porusza na następną. W zasadzie to robiłem to bardzo na wyczucie, renderując obrazek pięciokąta i zmieniając współczynnik funkcji tak, aby wąż nie zbliżał się, ani nie oddalał od śledzonego boku. W kodzie wyglądało to tak:

if(timerMove > 0.0000005f){
snakeX = (float) snakeX + waysX[way]*(float)(ogniwa -1f) ;
snakeY = (float) snakeY + waysY[way]*(float)(ogniwa -1f) ;

Gdzie waysX i waysY wyglądały następująco:

waysX[0] = 1;
waysX[1] = -1.5f;
waysX[2] = 1;
waysX[3] = -0.32f;
waysX[4] = 1;

waysY[0] = -1.74f;
waysY[1] = 0;
waysY[2] = 1.74f;
waysY[3] = 1;
waysY[4] = 0.725;

Jak zrealizowałem jednoczesny obrót figury i zmianę funkcji po której poruszał się wąż?
Przy każdym kliknięciu iterowałem po elementach tablicy zawierającej współczynniki kierunkowe, przechodząc do następnego, odpowiadającego kolejnemu boku.

Co do obrotu całości:

updatecamera

Wygląda to bardzo archaicznie i nie polecam pisać w ten sposób, ale działa tak:

w momencie kliknięcia ekranu, ustawiam buforCam na wartość 120, timerem steruję odpowiednią szybkość odejmowania, za każdym odliczeniem odejmując 8 od bufora i jednocześnie obracając całość o 8 stopni. To (w przypadku pięcioboku) da całkowity obrót o jeden bok. Bardzo nieczytelne i przekombinowane.

Kolory

Zdefiniowałem kilka barw skali 0/255 w które mogłem wcześniej sprawdzić np. tutaj. Następnie z każdym kliknięciem przesuwam się o jeden element po tablicy, stopniowo zmieniając aktualną barwę tła.

kolory

regulatecolors

Realizacja kolizji:

Nie korzystałem z chociażby Box2D (po co wyważać drzwi buldożerem). Zamiast tego, zdefiniowałem obiekty Rectangle dostępne w LibGDX i korzystając z gotowych funkcji liniowych przypisałem ich kilkaset wzdłuż boków. Do tego tworzę obiekt typu Rectangle na każdej z części węża, można więc przy każdej klatce zwyczajnie iterować po tablicach z Rectanglami i sprawdzać czy części wężą nie kolidują ze sobą albo z bokami.

Poniżej mocno nieczytelny przykład:

collisions

Odnośniki:

Link do pobrania gry:

Google Play

Udostępniam całość kodu za darmo tutaj, jakość pozostawia sporo do życzenia, nie polecam do nauki.

Repozytorium

Soundcloud kolegi który podsunął pomysł na TTS:

Soundcloud

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s