
Kod jest na GitHubie. Teraz możecie mnie oceniać 😅
No dobra, stało się. Zdecydowałem się wrzucić kod mojej gry karcianej na GitHuba. I szczerze mówiąc, mam z tym trochę problem. Nie z samym GitHubem, tylko z tym, że ktoś faktycznie może ten kod zobaczyć. 😉
Jak pisałem wcześniej, jest to mój pierwszy większy projekt w Pythonie. Do tego w bardzo dużym stopniu korzystałem z pomocy AI, a konkretnie DeepSeek. Nie będę więc udawał, że wszystko napisałem samodzielnie, od pierwszej do ostatniej linijki. Momentami bardziej wyglądało to tak: „DeepSeek, mam taki problem…” niż jak klasyczne programowanie. 😅
Dlatego trochę obawiam się krytyki. Podejrzewam, że ktoś bardziej obeznany z Pythonem znalazłby w tym kodzie sporo rzeczy, które można zrobić lepiej, prościej albo bardziej „po pythonowemu”. Ale z drugiej strony właśnie po to wrzucam projekt publicznie. Może ktoś coś podpowie, może ktoś znajdzie jakiegoś potworka w kodzie, a może przy okazji sam się czegoś nauczę.
No i trudno — kod jest publiczny. Teraz możecie mnie oceniać. 😁
Gra zaczyna już wyglądać jak gra
Od poprzedniego wpisu udało się zrobić kilka kolejnych rzeczy. Przede wszystkim poprawiłem zliczanie ekonomii, a także zrobiłem podgląd przeciwników. Interfejs zaczyna więc powoli przypominać coś więcej niż tylko techniczne demo.
Na tym etapie nadal nie jest to gotowa gra, ale coraz mniej przypomina pusty prototyp, a coraz bardziej coś, w co faktycznie będzie można kiedyś zagrać. Tak wygląda obecna wersja:
Kod znajdziecie tutaj
Repozytorium projektu znajduje się tutaj: https://github.com/Lukasz-B-82/MyOpenCardGame/
Jeżeli ktoś ma ochotę zajrzeć pod maskę, coś zmienić, poeksperymentować albo po prostu zobaczyć, jak wygląda mój pierwszy większy projekt w Pythonie — zapraszam. Instrukcja na GitHubie jest przygotowana przede wszystkim pod kątem osób, które chciałyby projekt uruchomić i ewentualnie coś w nim poprogramować lub zmienić.
Jest tylko jedna rzecz, której wcześniej zabrakło w instrukcji: najpierw trzeba zainstalować Pythona. https://www.python.org/
Później postępujemy już zgodnie z instrukcją — wchodzimy do katalogu z grą, instalujemy wymagane zależności i uruchamiamy projekt.
W przyszłości chciałbym przygotować również wersję binarną, czyli po prostu .exe albo nawet normalny instalator. Dzięki temu można byłoby uruchomić grę bez instalowania Pythona, bibliotek i bawienia się w linię komend. Ale spokojnie — na pewno nie w tym tygodniu. 😂
Na razie mam ważniejsze rzeczy do zrobienia. W pierwszej kolejności chcę dokończyć całą mechanikę gry, a zostało jeszcze kilka rzeczy.
Co jest już zrobione?
Na tę chwilę mamy już ekran startowy, na którym możemy wybrać liczbę graczy oraz talię. Jest również edytor talii, chociaż tutaj trzeba zwrócić uwagę na jedną rzecz — obecnie do wczytywania talii oraz zapisywania jej pod zmienioną nazwą musimy korzystać z linii komend. Nie jest to może najbardziej przyjazne rozwiązanie, ale na tym etapie bardziej zależy mi na działającej mechanice niż na dopieszczaniu każdego elementu interfejsu.
Mamy również renderowanie kart oraz coraz większą część właściwej planszy.
Jeżeli zaczniemy od lewego dolnego rogu ekranu, znajdziemy tam stos kart do dobrania oraz rękę gracza. Karty z ręki możemy zagrywać do odpowiednich stref. Mamy również licznik inicjatywy, który określa, ile akcji możemy wykonać w czasie tury, oraz licznik naszych zasobów.
Jest także stos kart odrzuconych, chociaż samo odrzucanie kart nie jest jeszcze zaimplementowane. Po stronie aktywnego gracza znajdują się cztery główne strefy: Front, Druga linia, Zaplecze oraz Państwo. Do tego dochodzi podgląd przeciwników, tooltipy oraz możliwość podejrzenia kart prawym przyciskiem myszy.
Czyli może nie wygląda to jeszcze jak gra AAA za 300 milionów dolarów, ale przynajmniej wiadomo już, gdzie kliknąć. 😉
Co właściwie możemy robić?
Najważniejszym elementem całej mechaniki jest podział planszy na strefy. Poszczególne rodzaje kart mają swoje miejsce i nie możemy po prostu rzucać wszystkiego gdzie popadnie.
Do strefy Państwo zagrywamy przede wszystkim karty Terenów, Budynków, Miast oraz Pojazdów. W przypadku budynków będą to między innymi Fabryki, Huty i Rafinerie. Pojazdy z kolei zwiększają naszą logistykę.
Karty można również ze sobą łączyć. Do Terenów i Budynków możemy dodawać Robotników, natomiast do Żołnierzy możemy dodawać karty Broni oraz Czołgów.
To właśnie tego typu zależności mają sprawić, że nie będzie wystarczyło po prostu wyłożyć na stół kart z największymi liczbami. Trzeba będzie jeszcze zapewnić odpowiednią produkcję, żywność, paliwo, stal, logistykę i całą resztę tego gospodarczego bałaganu.
Ekonomia gry
Ekonomia jest jednym z ważniejszych elementów całej gry i obecnie opiera się na kilku podstawowych zasobach.
Inicjatywa odpowiada za wykonywanie akcji. Za jej pomocą możemy między innymi zagrywać oraz dobierać karty.
Produkcja jest potrzebna do zagrywania kart Broni, Czołgów i Pojazdów. Żywność służy natomiast do utrzymania Robotników i Żołnierzy.
Mamy również ropę, z której produkujemy paliwo. Paliwo jest później potrzebne do utrzymania Czołgów i Pojazdów. Dalej mamy rudę żelaza, z której produkujemy stal, a stal wykorzystujemy między innymi do produkcji Czołgów.
Brzmi skomplikowanie? Trochę tak. Ale właśnie o to mi chodziło. Chcę, żeby poszczególne elementy były ze sobą powiązane i żeby decyzja dotycząca jednej części gospodarki wpływała na kolejne.
Nie chcę więc zrobić kolejnej gry, w której mamy po prostu „mana”, tylko nazwaną inaczej. 😉
Co teraz?
Najbliższy cel jest już bardzo konkretny: przenoszenie Żołnierzy pomiędzy strefami. To może wydawać się małym elementem, ale w praktyce jest to kolejny klocek potrzebny do zbudowania właściwej mechaniki rozgrywki.
Później czeka mnie jeszcze kilka kolejnych rzeczy. I tutaj muszę zaznaczyć, że jeszcze sobie nie pogramy. To nadal jest etap budowania mechaniki, a nie gotowej gry. Można natomiast już uruchomić projekt, zobaczyć interfejs, karty, ekonomię, strefy i podgląd przeciwników, a przede wszystkim zajrzeć do kodu i zobaczyć, jak to wszystko jest zbudowane.
I chyba właśnie to jest dla mnie teraz najciekawsze. Jeszcze kilka tygodni temu miałem pomysł na grę i trochę kodu, a teraz powoli powstaje z tego coś, co można uruchomić i pokazać komuś innemu.
A skoro kod jest już publiczny, to pozostaje mi tylko powiedzieć:
proszę bardzo — krytyka może zaczynać się od teraz. 😅
Tylko proszę łagodnie. To mój pierwszy Python. Zwłaszcza że wiele osób podchodzi krytycznie do używania AI. Tylko bez niego to by była jakaś katorga, choćby grafika, bez której były by pewnie tylko ikonki, ale i sam kod, może i nie jest idealny, staram się go szlifować, nie tylko przeklejać. Na tą chwilę to tak trzeba by było określić.
Link do poprzedniego posta o grze: Mam dość PHP. Z pomocą AI uczę się Pythona, robiąc grę karcianą.


