Tworzenie gry Mazer – Rozdział 5: Co trzeba, aby napisać własną grę?

W poprzednim wpisie przedstawiłem Ci proces wydawania gry w Google Play Store (dla urządzeń z systemem Android) oraz w platformie Steam (dla komputerów stacjonarnych) na przykładzie mojej gry Mazer. Tym razem opowiem co jest potrzebne, aby napisać własną grę.

Tworzenie gier to wspaniałe zajęcie z kilku powodów.

Po pierwsze, daje dużo satysfakcji. Patrzenie jak linie kodu zamieniają się w barwne światy, łudząco żywe postacie, i emocjonujące historie, które gracz może przeżyć, jest ekscytujące i napawa dumą. Jest wiele gier, których fabułę chciałbym zapomnieć, by jeszcze raz móc przejść je po raz pierwszy – w tym względzie wygrywa u mnie definitywnie Soma, którą bardzo polecam.

Po drugie, tworzenie gier to duże wyzwanie, a co za tym idzie – jest bardzo rozwijające. Aby napisać grę trzeba wymyślić i zaprogramować jej logikę, wymagane algorytmy muszą być wydajne (tzn. powinny działać wystarczająco szybko), bo poza czasem potrzebnym na ich wykonanie trzeba jeszcze wyświetlić na ekranie grafikę, którą także trzeba przygotować. Ponadto sporo pracy należy włożyć w zaprojektowanie interfejsu użytkownika, bo nawet najciekawsza gra nie znajdzie fanów, jeżeli jej interfejs będzie nieintuicyjny lub korzystanie z niego będzie frustrujące. Do tego dochodzi testowanie, przygotowanie poziomów do gry, oraz muzyki. W grach sieciowych trzeba jeszcze napisać logikę odpowiedzialną za wymianę informacji pomiędzy graczami, często oddalonymi od siebie o tysiące kilometrów.

Po trzecie, każdą napisaną grą można pochwalić się w CV. Jeżeli myślisz o pracy w świecie IT, to tego typu projekty, szczególnie, gdy ich kod dostępny jest w Internecie, np. na Githubie, są atutem, na który zwracają uwagę pracodawcy.

Jeżeli zastanawiasz się co trzeba umieć i zrobić, aby stworzyć własną grę, to trafiłeś(aś) w dobre miejsce.

Język programowania

Mazer napisany jest w języku Java, podobnie jak najpopularniejsza gra na świecie, czyli Minecraft. Sercem każdej gry jest jej kod źródłowy, więc w pierwszej kolejności należy nauczyć się języka programowania. Z najpopularniejszych do wyboru mamy m. in. Javę, C++, C#, Python, Kotlin, JavaScript.

Jak długo trzeba się uczyć, aby napisać pierwszą grę? To zależy od tego, jak dużo czasu możesz przeznaczyć na naukę. Twoją pierwszą grę w oknie linii poleceń np. systemu Windows, w której użytkownik będzie próbował odgadnąć wylosowaną liczbę, możesz zaimplementować po kilku lub kilkunastu dniach nauki. Lista zagadnień, z którymi trzeba będzie się zaznajomić, jest następująca:

  • kompilacja kodu programu i uruchamianie go,
  • rozumienie podstawowej struktury kodu aplikacji,
  • zmienne i typy prymitywne,
  • instrukcje warunkowe,
  • pętle.

To wystarczy na początek. Bardziej skomplikowane gry będą wymagały znajomości metod, klas, dziedziczenia, obsługi wyjątków, oraz innych zagadnień. Jednakże, gry takie jak „Kółko i krzyżyk” czy „Mastermind” można próbować pisać już na wczesnym etapie przygody z programowaniem, co bardzo polecam, bo pisanie kodu to najlepsza forma nauki.

Jeżeli interesuje Cię programowanie w Javie, to polecam moją książkę „Java od podstaw – Tom 1”, którą możesz kupić w moim oficjalnym sklepie – z kodem MAZER dostaniesz 20% zniżki:

https://przemyslawkruglej.com/product/java-od-podstaw-tom-1-ksiazka-papierowa-i-ebook-pdf

Książka jest dostępna w wersji papierowej, której dostawa jest bezpłatna, a także jako e-book. W ramach ćwiczeń w książce będziesz miał(a) do napisania m. in. grę w kółko i krzyżyk oraz zgadywanie hasła. Rozwiązania obu tych zadań dostępne są w dołączonym do książki dokumencie wraz z analizą kodu źródłowego.

Gdy dopiero zaczynasz swoją przygodę z programowaniem i/lub tworzeniem gier, to warto zacząć od bardzo prostej gry – im mniejszy projekt wybierzesz, tym większa szansa, że go ukończysz.

Środowisko developerskie i linia poleceń

Aby zacząć tworzyć gry będziesz potrzebować jeszcze środowiska developerskiego, takiego jak IntelliJ IDEA, w którym pisze się kod źródłowy programów. IDEA jest bardzo wygodnym narzędziem i posiada darmową wersję do niekomercyjnego użytku. Na początku interfejs IDEI może przytłaczać – dlatego przygotowałem kurs „IntelliJ IDEA w akcji”, który jest dostępny za darmo na mojej stronie:

https://kursjava.com/intellij-idea-w-akcji

Nie obejdziesz się także bez znajomości linii poleceń (zwanej też terminalem w systemach Linux i macOS). W związku z tym, że przygotowuję materiały od podstaw dla osób rozpoczynających swoją przygodę z programowaniem, na mojej stronie znajdziesz kurs „Podstawy linii poleceń”:

https://kursjava.com/podstawy-linii-polecen

Programy działające w oknie linii poleceń są dobre na początek – kolejnym krokiem jest tworzenie aplikacji w dedykowanych oknach i wyświetlających różne grafiki.

Biblioteka graficzna

Aby wyświetlać na ekranie tekstury (czyli obrazki) reprezentujące postać, którą steruje gracz, a także świat, w którym „żyje”, można skorzystać z dedykowanej biblioteki wspierającej twórców gier. Ja do napisania Mazera skorzystałem z LibGDX i Tobie także polecam tę bibliotekę.

Poza rysowaniem świata gry, LibGDX oferuje także:

  • obsługę myszki i klawiatury,
  • odtwarzanie dźwięków,
  • wykrywanie kolizji obiektów,
  • generowanie „szkieletu” aplikacji, którą można potem przygotować do wydania m. in. na urządzenia z system Android, Windows, Linux,
  • i wiele innych.

LibGDX może służyć zarówno do prostych projektów, jak i tych bardziej skomplikowanych. Próg wejścia do wykorzystywania tej biblioteki nie jest wysoki, więc z podstawowymi informacjami będziesz mógł/mogła zacząć pisać proste gry.

Przygotowałem kurs tworzenia gier od podstaw w języku Java z użyciem biblioteki LibGDX, który jest za darmo dostępny na mojej stronie. W trakcie kursu napiszemy razem krok po kroku dwie gry! Znajdziesz go pod następującym adresem:

https://kursjava.com/tworzenie-gier

Git

Każdy projekt, nad którym pracujesz, warto przechowywać w repozytorium Gita. Git pozwala na zapisywanie wersji plików we wskazanym katalogu (zwanym repozytorium). Dzięki temu możemy śledzić zmiany w kodzie i cofać się do wcześniejszych wersji, jeśli coś pójdzie nie tak. Ponadto repozytorium można dodać do konta w serwisie Github i oznaczyć jako prywatne (będzie dostępne tylko dla jego twórcy). Jest to forma backupu kodu. Git Jest powszechnie stosowanym narzędziem i warto przeznaczyć czas na jego naukę. Na oficjalnej stronie Gita znajdziesz darmowy kurs:

https://git-scm.com/book/pl/v2

Tworzenie grafik

Większość gier potrzebuje grafik, które będą wyświetlane na ekranie. W Internecie można znaleźć wiele darmowych zbiorów tekstur (obrazków), które można używać w grach. Niekiedy jednak trzeba je w jakiś sposób dostosować do naszych potrzeb – wtedy wymagane będzie skorzystanie z edytora graficznego. W zależności od skomplikowania zmian może Ci wystarczyć narzędzie tak proste, jak Microsoft Paint, lub bardziej zaawansowane, jak paint.net czy Gimp. Przydadzą się one także, jeżeli potrafisz samemu tworzyć grafiki.

Inne opcje

Poza napisaniem gry od podstaw np. w Javie, możesz spróbować jednego z istniejących narzędzi wspomagających tworzenie gier, takich jak Game Maker czy Godot, które posiadają wiele funkcji i graficznych edytorów.

Jak wygląda proces tworzenia gry?

Tworzenie gry najlepiej zacząć od spisania założeń. Często, gdy wpadniemy na pomysł pewnego programu, chcemy umieścić w nim wiele funkcjonalności. Łatwo się o nich myśli, ale zazwyczaj dużo trudniej implementuje. Dobrze zdefiniowane założenia pomogą nam określić jak dużo pracy będzie (mniej więcej) wymagane, aby doprowadzić projekt do końca, i co będzie nam potrzebne.

Z doświadczenia wiem, że lepiej dostarczyć produkt z mniejszą liczbą funkcjonalności, niż w ogóle go nie ukończyć. Tak też było z Mazerem, gdy podzieliłem to, co zostało jeszcze do zrobienia, na listę „musi być” i „dobrze, gdyby było”, o czym opowiadałem Ci we wpisie Development Mazera. Gdyby nie ta decyzja, pewnie nie czytałbyś(-abyś) tego artykułu, ponieważ bym go nie napisał, bo nie dokończyłbym Mazera. Chociaż porzucenie pewnych funkcjonalności odbyło się w późnej fazie tworzenia gry, to jednak miałem te założenia spisane i wiedziałem, co jest jeszcze do zrobienia. Warto co jakiś czas popatrzeć gdzie dotarliśmy w implementacji i zweryfikować listę założeń oraz potencjalnie ją zaktualizować.

Gdy mamy już zarys tego, co chcemy stworzyć, możemy przejść do implementacji. Krok po kroku piszemy kod odpowiedzialny za kolejne funkcjonalności. Często przyjdzie nam zaprojektować i wdrożyć algorytmy na potrzeby naszej gry – dla mnie jest to najciekawszy element projektu. W Mazerze musiałem przygotować kilka takich algorytmów – opowiem Ci o nich więcej w dedykowanym wpisie.

Poza kodem źródłowym będziemy musieli przygotować grafiki i dźwięki oraz muzykę do gry. Często te zasoby można znaleźć w Internecie, a ich użycie jest bezpłatne. Jeżeli potrafisz tworzyć grafikę, to świetnie – bez dobrej oprawy wizualnej nawet najciekawsza gra nie znajdzie fanów. Jedna z moich ulubionych gier, Soma, ma tak klimatyczną i mroczną grafikę, że po obejrzeniu krótkiego filmu zapowiadającego wiedziałem, że chcę w nią zagrać. Możesz też połączyć siły i znaleźć grafika i muzyka, którzy chcą razem z Toba stworzyć grę. Ja szczególną uwagę zwracam na muzykę w grach – gdy piszę te słowa, z mojego głośnika marki Philips leci ścieżka dźwiękowa z gry FTL (np. utwór Space Cruise). Mam na tej liście także utwory m. in. ze Starcrafta, który został wydany w… 1998 roku, z Dyson Sphere Program, oraz z Subnautici, a album z muzyką z gry Command & Conquer: Red Alert był najczęściej słuchanym przeze mnie albumem w 2025 roku:

Soundtrack z gry Command & Conquery: Red Alert, czyli najczęściej słuchany przeze mnie album w 2025 roku
Podsumowanie roku 2025 na Spotify - najczęściej odtwarzany przeze mnie album

Ważnym aspektem każdej aplikacji jest interfejs użytkownika, czyli GUI (Graphical User Interface). Powinien być intuicyjny i wygodny, bo inaczej korzystanie z naszego programu będzie frustrujące i szybko zrazi do siebie potencjalnych użytkowników. Projektowanie GUI nie jest prostym zadaniem, ale ze względu na to jak istotny jest to element aplikacji, trzeba na niego przeznaczyć sporo czasu.

Dwoma innymi, często bardzo czasochłonnymi zadaniami programisty gier, są przygotowanie „poziomów” do gry oraz tutorialu, czyli wytłumaczenia jaki jest cel, zasady, oraz sterowanie w grze. Oba te zagadnienia dały mi się tak we znaki, że postanowiłem Ci o nich opowiedzieć w osobnych rozdziałach.

Tworzenie ciekawych „poziomów” do gier (w przypadku Mazera są to labirynty-zagadki) jest trudne, bo zależy od tego jak długo gra będzie „grywalna” dla gracza i kiedy trafi na półkę, by ustąpić miejsca kolejnej. Z kolei tutorial do gry musi jak najlepiej i jak najszybciej wytłumaczyć graczowi najważniejsze cechy gry oraz wszystko co potrzebne, aby można było po prostu zacząć w nią grać.

Jeżeli chcesz wydać grę, to musisz przygotować ją w odpowiednim formacie i pakiecie instalacyjnym dla danego systemu operacyjnego i urządzeń, na których będzie uruchamiana. Wydanie gry np. w Google Play Store czy na Steamie wymaga sporo czasu. Do tego warto byłoby zareklamować grę, rozwijać ją, odpowiadać fanom itd.

Wszystkie wymienione elementy gry są bardzo istotne – trudno je uszeregować i dlatego pisanie gier jest tak dużym wyzwaniem. Jak jednak wspomniałem, daje ono dużo satysfakcji i pozwala rozwinąć swoje umiejętności programistyczne. Oczywiście możesz również znaleźć osoby, które będą chciały napisać grę razem z Tobą – wtedy zadania do wykonania rozłożą się na większą liczbę osób, co zwiększy prawdopodobieństwo, że uda się Wam ją ukończyć.

Mazer od strony technicznej

Na koniec tego wpisu opowiem Ci jakich technologii i narzędzi użyłem do napisania Mazera.

Mazer napisany jest w całości w Javie. Jest ona moim ulubionym językiem programowania i chociaż istnieją „wygodniejsze” alternatywy, to jest to nadal mój pierwszy wybór.

Gdy zacząłem pracę nad Mazerem, byłem po długiej przerwie od pisania gier. Szukałem Javowej biblioteki (czyli zbioru klas, które można użyć do określonych celów) dla programistów gier i znalazłem wtedy LibGDX – bibliotekę, która okazała się tym, czego potrzebowałem. Od razu mi się spodobała, bo nie wymagała dużo nauki, dzięki czemu mogłem skupić się na implementowaniu tego, co lubię najbardziej, czyli logiki gry.

LibGDX ułatwia wczytywanie i wyświetlanie tekstur (czyli obrazków) na ekranie, obsługę myszki i klawiatury itp. To znacznie przyspiesza proces tworzenia gry. Dodatkowo, LibGDX został tak zaprojektowany, że ta sama gra bez większych zmian może zostać przygotowana do wydania zarówno na urządzenia mobilne z systemem Android, jak i na komputery, na których zainstalowany jest Windows – dzięki temu z łatwością wydałem Mazera na obie te platformy.

Projekty używające LibGDX korzystają z Gradle’a, czyli narzędzia do m. in. budowania aplikacji i zarządzania jej zależnościami. LibGDX dostarcza generator „szkieletu” projektów, w których Gradle jest już skonfigurowany, więc można z niego od razu korzystać po utworzeniu projektu.

Żaden programista nie obejdzie się bez środowiska developerskiego, czyli programu, w którym pisze się kod źródłowy. Ja od wielu lat korzystam z bardzo wygodnego środowiska developerskiego o nazwie IntelliJ IDEA. Ponadto, używałem Android Studio, które także jest środowiskiem developerskim, przeznaczonym dla osób tworzących aplikacje na urządzenia mobilne z systemem Android. To narzędzie pozwala na uruchamianie na komputerze „wirtualnych” telefonów i testowaniu na nich tworzonych aplikacji. Było mi też potrzebne do „podpisania” gry specjalnym certyfikatem, który dowodził autentyczności i integralności pakietu z grą.

Kod źródłowy Mazera, a także wszystkie pozostałe pliki, które wchodzą w skład projektu, takie jak obrazki i pliki konfiguracyjne, przechowywane są w repozytorium Gita. Git to wspaniałe narzędzie powszechnie używane przez programistów. Jego zadaniem jest śledzenie zmian w plikach w określonym katalogu na dysku komputera (taki katalog nazywamy właśnie repozytorium). Programista może za pomocą specjalnych komend Gita „utrwalać” aktualny stan repozytorium – taki zapis stanu nazywamy commitem. Historia zmian w repozytorium to lista commitów następujących jeden po drugim. Dzięki Gitowi byłem m. in. w stanie określić ile czasu zajęła mi praca nad Mazerem – Git przechowuje dla mnie całą historię zmian w projekcie wraz z datami ich wprowadzenia i komunikatami opisującymi daną zmianę.

Grafiki do gry tworzyłem w dwóch programach – Microsoft Paint oraz paint.net. Użycie tego pierwszego programu może być zaskakujące, ale do moich potrzeb był idealny. Grafika w Mazerze jest z założenia bardzo prosta – wszystko, co tylko mogłem, robiłem w domyślnym programie graficznym Windowsa, czyli w Microsoft Paint. Bardziej wymagające zadania zlecałem aplikacji paint.net, którą odkryłem kilka lat temu i używam do dzisiaj. Oba te narzędzia są proste w obsłudze (w szczególności Microsoft Paint – chyba trudno o prostszy program) i wystarczyły mi do stworzenia wszystkich grafik, które są używane w Mazerze.

Dodatkowo korzystam na co dzień z dwóch edytorów tekstu: Notepad++ oraz Microsoft Word. W Wordzie przygotowałem projekt ekranów tutorialu do gry, o którym opowiem Ci w jednym z ostatnich rozdziałów tego artykułu, i zaprezentuję ten dokument. W Notepad++ bardzo często przygotowuję listę rzeczy do zrobienia na aktualny dzień, zapisuję dodatkowe informacje i ogólnie korzystam z niego zawsze, gdy nie potrzebuję IntelliJ IDEA – ten ulepszony „notatnik” towarzyszy mi już ponad 15 lat.

Jak widzisz lista narzędzi i technologii, z których korzystałem, nie jest długa. Wszystko zależy od tego, jaką grę tworzysz – im prostsza i mniejsza gra, tym mniej narzędzi będzie Ci potrzebne. Na początku Twojej przygody z tworzeniem gier proponuję proste projekty, które pozwolą Ci skupić się na tworzeniu logiki gry, a w mniejszym stopniu na tworzeniu grafik i innych zasobów.


W kolejnym wpisie z cyklu „Tworzenie gry Mazer” opowiem Ci o algorytmach, dzięki którym Mazer działa.

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.