scrobble.life
Polish HIVE

Gra Karciana #5 - Wprowadzenie + Instrukcja

Skoro już w grę można zagrać, to wypadało by napisać o niej przynajmniej parę słów.

Wstęp

Klimat gry, zależy mi na tym by gra była w klimacie, SteamPunk, CyberPunk, Goth, Fallout, taka mieszanka styli - może takie wspólne określenie PostApo.

Ogólnie bardzo lubię gry karciane, zawsze chciałem coś takiego stworzyć. A teraz mam sporo czasu, więc postanowiłem spróbować swoich sił. Dodatkowo chciałem się nauczyć nowego języka programowania. Padło na Pythona, rozważany był jeszcze C# i ciągle się zastanawiam czy dobrze wybrałem. Oczywiście Python okazał się świetnym wyborem, bo idzie bardzo szybko. Ale jakoś boli mnie ta obiektowość, myślę że w C# jest to trochę lepiej rozwiązane. Mam jako takie doświadczenie z programowaniem, głownie PHP, ale coś w czystym JavaScript i dawno dawno temu coś w Javie. Ale w Pythonie to mój pierwszy projekt, więc prośba o wyrozumiałość, bardzo wspierałem się AI DeepSeek.

Instalacja i uruchomienie

Kod gry udostępniłem publicznie na GitHub: https://github.com/Lukasz-B-82/MyOpenCardGame

Jest tam zamieszczona instrukcja instalacji. Ale można grę pobrać jako zwykłe archiwum ZIP:

Dalej będzie wymagana instalacja Pythona: https://www.python.org/downloads/

oraz instalacja zależności, po wejściu w rozpakowany katalog, w lini komend:

pip install pygame pillow lupa pyyaml resvg-py

grę uruchamiamy poleceniem:

python main.py

Instrukcja

Ekran głównego menu

Poczynając od lewej

  • ✅Wybieramy ilość graczy
  • Nazwa Gracza
  • Wybór Człowiek/AI
  • Tryb Obserwatora (aby testować, zachowanie AI)
  • Wybór talii, polecam zacząć od tej !start

Z Menu głównego, możemy przejść również do Edytora talii, którego opiszę później. Aby rozpocząć grę klikamy START.

Gra

Po rozpoczęciu gry zobaczymy taki ekran:

Strefa aktywnego gracza

Od po kolei, od lewej góry:

  • Strefy: Front (FRONT), Druga linia (SECOND), Zaplecze (BACK), Państwo (STATE). Do stref zakrywamy karty z ręki.

  • Stos kart do dobrania, aby dobrać kartę klikamy na nią lewym

  • Ręka aktywnego gracza

  • Zasoby Pasek inicjatywy (3/50), inicjatywę używamy do wykonywania akcji w grze, zagranie kart na stół, dobranie kart, przenoszenie kart... Żywność, potrzebna do zagrywania kart Robotników, Żołnierzy oraz Miast. Pozyskujemy ją z kart Terenów (Doliny, Wzgórza) + Robotników Produkcja, potrzebna do zagrywania kart Ekwipunku dla kart Żołnierzy. Pozyskujemy ją z kart Budynków (Fabryki) + Robotników Logistyka, potrzebna by przenieść karty Żołnierzy do strefy Front i Druga linia. Pozyskujemy ją zakrywając karty Pojazdów. Ropa, potrzebna do produkcji paliwa. Pozyskujemy ją z kart Terenów (Pustynie) + Robotników. Paliwo, potrzebne do zagrania kart Pojazdów i kart Ekwipunku (Czołgi, Samoloty). Produkujemy je z Ropy, dzięki kartom Budynków Rafinerii + Robotników. Ruda, potrzebna to produkcji Stali. Pozyskujemy ją z kart terenów (Wzgórza, Góry) + Robotników. Stal, potrzebna do zagrania kart Pojazdów i kart Ekwipunku (Czołgi, Samoloty, Artyleria).

  • Stos kart odrzuconych.

Strefy przeciwników

Tak jak Ty, przeciwnik posiada swoje strefy:

Prawym przyciskiem myszy możemy wyświetlić pogląd każdej karty w grze i kart do niej dołączonych.

Stan gry, procentowe przewagi graczy, Zwycięstwo od tury 20. Oznacza to że jeśli przeciwnik po 20 turze osiągnie próg zwycięstwa (80%) wygrywa. Gra toczy się maksymalnie 60 tur. Opcje można oczywiście zmienić w pliku: defines/game.lua, to odpowiednio opcje: local victory = { advantage_threshold = 0.80, } local min_turns = 20 local max_turns = 60

Walka

Jeśli możemy zaatakować na strefach z Żołnierzami pojawią się przyciski, a po kliknięciu w przycisk na czerwono podświetlą strefy które możemy zaatakować z tym zasięgiem:

Różne jednostki (Ekwipunki), mają różny zasięg:

  • Czołgi, Karabiny = 1
  • Artyleria = 2
  • Samoloty = 3

Zasięg, oznacza jak daleko może atakować. Czyli jednostka z zasięgiem = 1, może zaatakować tylko najbliższa strefę. Najbliższa strefa, to ta w której jest jakiś żołnierz, licząc w kolejności: Front, Druga linia, Zaplecze, jeśli nie ma żadnych żołnierzy. możemy atakować strefę Państwo, gdzie możemy albo przejąć teren, albo zniszczyć budynek.

Karta Ekwipunku określa typ (Cel) jednostki. Aktualnie są trzy typy. SOFT (Karabiny, Artyleria), HARD (Czołgi), AIR (Samoloty).

Karta Ekwipunku, określa również atak jednostki, to te same typy które określając Typ Ekwipunku. Przykładowo atakując jednostkę w Czołgu, używamy, ataku HARD, atakując Samolot używamy ataku AIR, Żołnierzy z Karabinami, Pistoletami, Artylerią używamy ataku SOFT.

Podglądu ataku

Jeśli już wybierzemy strefę, pojawi się ekran Podglądu ataku.

Wybieramy w nim kartę Żołnierza którego chcemy zaatakować. W tym wypadku jest to żołnierz z kartą karabinu cel = SOFT. Atakujemy kartami z Czołgiem oraz dwiema Artyleriami. Widzimy również symulację ataku. Czołg posiada atak SOFT d8[0,1,2,3,4,5,6,7], czyli jeden rzut kością d8 ze ściankami od 0 do 7, średnia 3,5. Artylerię posiadają atak SOFT d6[0,1,2,3,4,5] kostka z sześcioma ściankami od 0 do 5, średnia 2,5. Średnia całkowita to 3,5 + 2,5 + 2,5 = 8,5. Obrona atakowanej jednostki to karabin z obroną 2 * d8[1,2,3,4,5,6,7,8]. Oznacza to dwa rzuty kostką z ośmioma ściankami od 1 do 8.

Kontratak

Wszystkie jednostki biorące udział w ataku, będą mogły być kontratakowane, chyba że tak jak Artyleria są to ataki dystansowe. Samoloty można kontratakować, mają większy zasięg, ale to oznacza że mogą dalej podlecieć, ale nie blokują kontrataku jak Artyleria. Ważne jednostka, kontratakuje cel używając ataku o typie kontratakowanego celu. Czyli kontratakując Czołg typu HARD, używamy ataku HARD.

Jeśli wszystko się zgadza, klikamy Potwierdź.

Rozpatrzenie Ataku

Tutaj widzimy jak to wyszło w praktyce, są wszystkie rzuty kostkami. Oraz wynik walki. Suma kości ataków, obrony, oraz rozpatrzenie kontrataków.

Gra się toczy do komunikatu:


Jeszcze raz, to mój pierwszy projekt w Python, ogólnie tylko trzy tygodnie pracy przy bardzo, bardzo dużym wsparciu AI - DeepSeek. Grafiki też generowane przez AI (oczywiście na GitHub jest spis które grafiki jaki model generował ). I też nie siedziałem nad tym projektem codziennie, jak już siadłem to było to parę dobrych godzin. Czekam na wyrozumiałą konstruktywną krytykę. Zwłaszcza jeśli chodzi o programowanie, choć jeszcze projekt nie jest skończony. Bo chcę jeszcze przejść do stworzenia prawdziwego AI, na sieci neuronowej, to teraz to jakiś najprostszy algorytm heurystyczny, na stałych wagach. Dlatego nawet jak widzę jakieś błędy, a jest ich sporo, to nawet nie biorę się za ich poprawienie, tylko idę dalej. Bo samo stworzenie gry, to był tylko jakiś etap, teraz zostało największe wyzwanie, czyli implementacja AI. A jedyne co miałem z nim do czynienia, to czasy studiów, czyli już bardzo stara historia, ale to obecnie przyszłość.

Comments

No comments yet — be the first.