Tworzenie gry Mazer – Rozdział 3: Development Mazera

Tydzień temu przedstawiłem Ci moją grę Mazer. Dzisiaj opowiem Ci o procesie jej tworzenia.

Pracę nad Mazerem rozpocząłem w sierpniu 2020. Tak wygląda pierwszy commit w repozytorium Gita (Git to narzędzie do zapisywania historii zmian w plikach znajdujących się w pewnym katalogu – repozytorium, natomiast commit to „utrwalenie” aktualnego stanu tych plików) z moim projektem:

commit 3ac6cf24a1e39d4c0a32993ece9ba0510e593d86
Author: Przemyslaw Kruglej 
Date:   Mon Aug 31 17:17:59 2020 +0200

    Mazer - wstępny commit

Jest marzec 2025 roku, gdy wydaję moją grę i piszę ten artykuł. Czy Mazer to gra, na której implementację potrzeba było prawie pięciu lat?

Gdy przygotowywałem się do napisania tego artykułu, przeanalizowałem commity w repozytorium. Oszacowałem, że stworzenie gry zajęło mi pół roku pracy „na etat”, tzn. po 8 godzin dziennie w dni robocze. Dlaczego więc od rozpoczęcia do zakończenia minęło cztery i pół roku?

Powodem jest to, że trzykrotnie przerywałem pracę nad Mazerem. Paradoksalnie, im więcej było gotowe i im bliżej do zakończenia pisania gry, tym było mi trudniej. Wszystko sprowadziło się do mojej „pięty Achillesowej”, czyli tworzenia GUI – Graficznego Interfejsu Użytkownika (z angielskiego Graphical User Interface).

Początek prac: 31-08-2020 – 06-12-2020

Na początku praca szła mi bardzo dobrze – pisałem dużo kodu, szybko było widać jego efekty, i byłem zadowolony z programowania tej części Mazera. Robiłem to, w czym czuję się najlepiej i co sprawia mi, jako programiście, najwięcej frajdy – wymyślałem rozwiązania nietrywialnych problemów, implementowałem je, oraz testowałem.

Niestety, logika gry i algorytmy za nią odpowiedzialne w końcu zostają wymyślone, napisane, przetestowane i po prostu zaczynają działać – wtedy nie ma już nic do zrobienia w tym departamencie. Trzeba się wreszcie wziąć za część wizualną, za interfejs użytkownika, tekstury (grafiki używane w grze), za tutorial do gry (wyjaśnienie o co chodzi w grze i jak w nią grać), a także zaprojektować zagadki, które gracz będzie rozwiązywał.

Wspomnę jeszcze, że nie tworzyłem Mazera sam – miałem pomocnika. Pomagał mi dzień po dniu w projektowaniu i implementacji najważniejszych algorytmów, dzięki którym działa Mazer. To nieocenione wsparcie zapewnił mi Sierżant:

Mój kot Sierżant (2004 – 2022) – najlepszy pomocnik do pair-programmingu
Sierżant (2004 – 2022) – najlepszy pomocnik do pair-programmingu

Sierżant był najlepszym kotem na świecie i pierwszy etap tworzenia Mazera wspominam szczególnie miło, bo codziennie siedział obok mnie na swoim fotelu i w przerwach od mocnego snu nadzorował moją pracę.

Pierwszy kryzys: 12-2020 – 09-2023

Pierwszy kryzys przyszedł w grudniu 2020 roku, gdy serce gry (czyli wszystkie najciekawsze algorytmy, które sprawiają, że Mazer działa) już biło i od pewnego czasu zajmowałem się tworzeniem ekranów menu gry. Tworzeniu grafik i interfejsu użytkownika poświęciłem dwa osobne rozdziały w tym artykule, w których dokładniej opowiem o procesie ich powstawania. Tutaj wspomnę, że przychodziło mi to z wielkim trudem. Nie czułem satysfakcji z programowania tej części gry i moja frustracja była już tak duża, że postanowiłem odpocząć od dalszej pracy. Tak wygląda ostatni commit Mazera z grudnia 2020:

commit 2a26669d9fed12743ad1c3734d3f94358f8a8349
Author: Przemyslaw Kruglej 
Date:   Sun Dec 6 21:55:40 2020 +0100

    Mazer: poprawa wyznaczania rozmiaru tekstu About, dodanie 'back' przy przycisku

I tak, odpocząłem sobie… ponad dwa lata. Przez ten czas często myślałem o mojej grze, o ilości pracy i zaangażowania, jakie w nią włożyłem. Czułem się winny, że porzuciłem projekt i chciałem do niego wrócić. Ale czas mijał. Czasem uruchamiałem moje środowisko developerskie, by popatrzeć na listę rzeczy w TODO (to lista rzeczy do zrobienia, którą sobie często przygotowuję). Była długa i zawierała wiele skomplikowanych funkcjonalności do zaimplementowania, z czego większość dotyczyła interfejsu użytkownika. Przytłaczało mnie to za każdym razem i przez ten okres nie napisałem ani jednej linii kodu. W końcu jednak postanowiłem wrócić do developmentu. Niestety, jak się miało okazać, tylko na jeden dzień.

Jeden dzień developmentu: 16-09-2023

Gdy 16 września 2023 uruchomiłem IntelliJ IDEA (środowisko developerskie, z którego korzystam), zacząłem ponownie przeglądać listę rzeczy, które muszę jeszcze zrobić, aby uznać grę za zakończoną i gotową do wydania. Chociaż ponownie straciłem chęć do pracy jeszcze tego samego dnia, to podjąłem wtedy kluczową decyzję, która okazała się tym, czego ja i moja gra potrzebowaliśmy – zmiany priorytetów.

Przeszedłem wtedy przez całą listę rzeczy „do zrobienia” i każdą funkcjonalność przyporządkowałem do jednej z dwóch grup:

  • MUST HAVE – ang. musi mieć,
  • NICE TO HAVE – ang. dobrze, gdyby było.

Te określenia są często stosowane na komercyjnych projektach do opisu funkcjonalności, które są koniecznie wymagane, aby program komputerowy mógł być uznany za ukończony i działający (MUST HAVE), oraz takich, które byłyby przydatne, ale mogą zostać pominięte i nie muszą być w końcowym produkcie (NICE TO HAVE).

Tak wygląda commit z tamtego dnia:

commit dbc707ebcb304e5445888b7e92bc8b4bc22db22d
Author: Przemyslaw Kruglej 
Date:   Sat Sep 16 16:13:05 2023 +0200

    Mazer - podział TODO na MUST HAVE i NICE TO HAVE

Moja lista TODO (lista rzeczy do zrobienia) była bardzo długa. Z drugiej strony chciałem dokończyć Mazera i wydać go. Dlatego wiele funkcjonalności, na których mi zależało, umieściłem na liście NICE TO HAVE, chociaż do tego momentu uważałem je za koniecznie potrzebne. Im dłużej przeglądałem listę TODO, tym dłuższa stawała się lista NICE TO HAVE, a tym samym lista MUST HAVE bardzo się skracała.

Oto kilka z funkcjonalności, które nie weszły do aktualnego wydania Mazera, czyli trafiły na listę NICE TO HAVE 16 września 2023 roku:

  • ikony-przyciski z elementami, które są w danej zagadce, po których naciśnięciu gracz zobaczyłby podpowiedź dotyczącą reguły danego elementu,
  • podgląd zagadki przy jej wyborze w menu i ikony elementów, które w tej zagadce występują,
  • obsługa kupowania zagadek na urządzeniach mobilnych – więcej o tym zagadnieniu opowiem Ci w rozdziale „Wydanie gry”,
  • podpowiedzi dotyczące rozwiązania zagadki – ta funkcjonalność była już w zasadzie gotowa, ale ponownie interfejs użytkownika pokrzyżował mi szyki – postanowiłem pominąć ją w pierwszym wydaniu gry. Jednakże czas, jaki przeznaczyłem na implementację tej funkcjonalności, nie poszedł na marne – część kodu wykorzystałem w tutorialu do gry, któremu poświęciłem osobny rozdział w tym artykule.

Tego dnia wykonałem jeszcze kilka poprawek myśląc, że teraz uda mi się dokończyć grę – w końcu bardzo ograniczyłem liczbę funkcjonalności, które trzeba jeszcze dostarczyć. Niestety, ani następnego dnia, ani kolejnego, ani jeszcze następnego „nie usiadłem” do Mazera – przyszedł drugi kryzys.

Drugi kryzys: 08-2023 – 01-2024

Pomimo tego, że dzięki podziałowi funkcjonalności na MUST HAVE i NICE TO HAVE do dokończenia gry było już relatywnie niewiele potrzebne, to wizja kontynuacji tworzenia interfejsu użytkownika i projektowanie setek zagadek ponownie mnie przytłoczyła. Był jeszcze inny problem – po ponad dwóch latach przerwy od pisania gry nie pamiętałem, o co chodzi w moim kodzie źródłowym. Zapomniałem jak działają niektóre algorytmy, która klasa jest odpowiedzialna za co, co było już dokończone, a co potrzebowało jeszcze trochę pracy.

Kolejne kilka miesięcy bez prac nad grą psuły mi humor i ponownie byłem z siebie niezadowolony. Byłem wtedy bardzo zaangażowany w pisanie mojej trzeciej książki – Java od podstaw – Tom 1 – i brak prac nad grą usprawiedliwiałem tym, że chciałem się skupić na książce. W końcu jednak także praca nad książką zaczęła mi ciążyć – zamiast zbliżać się do jej wydania, miałem wrażenie, że liczba zadań do wykonania tylko się powiększa.

Zawsze pomagało mi tworzenie list rzeczy do zrobienia. Spisywałem je sobie czasem na kartkach, a czasem w pliku tekstowym. Dobrze sprecyzowana lista zadań była drogą do osiągnięcia tego, co sobie założyłem. Taka przykładowa lista z Mazera, gdy implementowałem w menu ekran do wyboru zagadek, wygląda następująco:

Menu – wybieranie zagadek:

  • [+] projekt, jak ma to wyglądać -> może być bez preview - po prostu lista numerów zagadek z informacją, czy już udało się rozwiązać
  • [+] utworzenie kilku przykładowych setów z zagadkami i usunięcie istniejących zagadek z Configurator
  • [+] dodanie wyświetlania przycisku, aby przejść do kolejnej zagadki, gdy aktualna zostanie rozwiązana
  • [+] wyświetlanie list zagadek w MenuScreen i możliwość nawigacji pomiędzy nimi
  • [+] obsługa wybrania zagadki
  • [+] zmiana zagadki na "rozwiązaną", gdy zostanie znalezione poprawne rozwiązanie
  • [+] zapisywanie, odczytywanie, i pokazywanie informacji, czy zagadka została rozwiązana

Zawsze, gdy wykonam jakieś zadanie z listy, dodaję na jego początku plus w nawiasach [+]. To daje mi dodatkową satysfakcję i chęć do dalszej pracy. Jednakże, z jakiegoś powodu w tamtym okresie listy zadań mi nie pomagały – czułem, że potrzebuję spisu zadań, który będzie do mnie lepiej „przemawiał”. Stwierdziłem, że kupię sobie tablicę suchościeralną i będę na niej zapisywał rzeczy do zrobienia następnego dnia – oto i ona:

Moja lista TODO z dnia, gdy piszę ten rozdział, spisana na tablicy wiszącej na szafce w mojej kuchni. Trudna do mycia, jak widać.
Moja lista TODO z dnia, gdy piszę ten rozdział, spisana na tablicy wiszącej na szafce w mojej kuchni. Trudna do mycia, jak widać.

Taka tablica była tym, czego potrzebowałem – posiadanie listy zadań „na widoku” pomogło mi nie tylko kontynuować pracę nad książką, ale także wrócić do Mazera.

Cisza przed burzą: 13-01-2024 – 19-11-2024

W końcu udało mi się zmotywować i wrócić do tworzenia gry. Miałem trzy zadania do wykonania:

  • zaprojektować zagadki,
  • dokończyć menu,
  • przygotować tutorial przedstawiający zasady gry.

Tworzenie zagadek okazało się nie lada wyzwaniem, ale sprawiało mi dużo satysfakcji – o tym procesie opowiem Ci dokładnie w jednym z kolejnych rozdziałów tego artykułu.

Poprawa menu była żmudna, ale nieszczególnie trudna. W końcu i to miałem za sobą.

Pozostało mi do zrobienia już tylko jedno – przygotowanie tutorialu dla użytkownika, który tłumaczyłby zasady gry i pokazywał jak grać w Mazera. Był to idealny czas… na kolejny kryzys.

Trzeci kryzys: 11-2024 – 01-2025

Tutorial dla użytkownika był najgorszą częścią tworzenia Mazera. Dał mi się we znaki do tego stopnia, że prawie porzuciłem projekt, który był skończony w 99%. Ten jeden ostatni procent, jaki przypisywałem tutorialowi, okazał się dla mnie tak trudny, że raczej sprawiał wrażenie 99% procent wymaganego wysiłku. Na pewien czas postanowiłem zawiesić prace nad grą.

Ostatnia prosta: 13-01-2025 – 28-02-2025

Wiedząc, że Mazer jest prawie gotowy, wróciłem do pracy stwierdzając, że skoro udało mi się już tak daleko zajść, to żaden tutorial nie przeszkodzi mi w dokończeniu gry, w którą włożyłem tyle serca. Tworzenie tutorialu było dla mnie wyjątkowo trudne – poświęciłem temu tematowi jeden z ostatnich rozdziałów tego artykułu.

Za każdym razem, gdy się denerwowałem i miałem dosyć, oglądałem się za siebie i patrzyłem na plakat kota-astronauty wiszący na ścianie mojego mieszkania:

Kot-astronauta. Taki sam plakat można znaleźć grając w Subnauticę, którą bardzo polecam.
Kot-astronauta. Taki sam plakat można znaleźć grając w Subnauticę, którą bardzo polecam.

I tym sposobem dotarłem do końca – Mazer był gotowy. Poczułem ogromną ulgę i satysfakcję – za każdym razem, gdy przerywałem pracę nad grą, myślałem, że nie uda mi się jej dokończyć. Po prawie pięciu latach od pierwszego commita pozostało mi już tylko jedno – udostępnić moją grę w Google Play Store i dodać ją na platformę Steam.

Mazer w liczbach

Na koniec tego rozdziału jeszcze trochę liczbowych ciekawostek o Mazerze.

Mazer w liczbach

Na końcu wpisu sprzed tygodnia zaprezentowałem dwie zagadki – oto ich rozwiązania:

Przykładowa zagadka #1
Przykładowa zagadka #1
Rozwiązanie zagadki #1
Rozwiązanie zagadki #1
Przykładowa zagadka #2
Przykładowa zagadka #2
Rozwiązanie zagadki #2
Rozwiązanie zagadki #2

Za tydzień opowiem Ci o procesie wydawania gry w Google Play Store oraz Steam. Zapraszam za tydzień!

Jeden komentarz do “Tworzenie gry Mazer – Rozdział 3: Development Mazera”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Nie musisz podawać swojego imienia, e-mailu, ani strony www, aby opublikować komentarz. Komentarze muszą zostać zatwierdzone, aby były widoczne na stronie.