Gra typu Bomberman - tester "sztucznej inteligencji" przeciwnika

2

Jakiś czas temu napisałem dla kolegi (kolega - ujawnij się) program, dzięki któremu mógłby popróbować różne algorytmy dla potworków w grze typu Bomberman; Ale nie tylko - w sumie stanowi także implementację ruchu postaci gracza, która to wyrównywana jest do kafli planszy;

A że ostatnio przy okazji dyskusji na forum przypomniałem sobie o nim, pasuje podzielić się kodem - może kiedyś się komuś przyda; Programu nie zamierzam rozwijać, dlatego też nie wrzucam źródeł na GitHub czy inne, bo po co;

Zrzut ekranu z działającej aplikacji:

bman.png

Program działa w zwykłym trybie okienkowym, wszystko malowane jest bezpośrednio na kanwie formularza (brak komponentów); Aplikacja działa w oparciu o zwykły timer z interwałem 30ms, co daje średnio 33FPS; Kod "gry" zapisany jest w module BombermanGame.pp - w nim też znajduje się klasa TGame, która zajmuje się obsługą wszystkiego (z niej korzysta klasa formularza);

Sterowanie jest banalne - postać gracza (zielona) cały czas podąża za kursorem, więc aby nim sterować, należy po prostu przesuwać kursor po formularzu; Potworek natomiast chodzi automatycznie; Do dyspozycji jest pięć różnych algorytmów ruchu potworka - od najgłupszego (klawisz F1) do najbardziej cwanego (klawisz F5); Opisy tych algorytmów znajdują się w komentarzach w kodzie (moduł BombermanGame.pp, od linii 974); Jeśli nastąpi kolizja gracza z potworkiem, program na chwilę się zatrzymuje, następnie przywraca domyślne pozycje gracza oraz CPU i znów rusza;

Podsumowując:

klawisz/urządzenie funkcja
mysz sterowanie graczem
F1 - F5 zmiana algorytmu potworka (CPU)
Esc wyjście
Dodatkowo, informacje na temat bieżącej sytuacji, czyli aktualnego kierunku ruchu (gracza i CPU) oraz użytego algorytmu AI (CPU), widoczne są w lewym dolnym rogu (nazwy kierunków ruchu migają);

To w sumie tyle - nie ma co więcej opisywać, bo to nie jest gra; Kod pisałem ponad pół roku temu, więc nie jest najgorszy; Ale i też nieco się spieszyłem, więc część można poprawić (DRY, gdzieniegdzie hardkodowane liczby itp.);

Grafikę ukradłem (i nieco przerobiłem) z prawdziwej gry Chase, napisanej przez Shiru w ramach tutoriala na temat pisania gier na platformę NES w języku C (link do tutoriala); Oryginalną grę można pobrać i odpalić w dowolnym emulatorze - bardzo dobra robota; Są też źródła, więc można się zorientować, jak ciężko pisało się takie gry;

W załączniku daję pełne źródła programu, razem z plikiem bmanai.exe do uruchomienia; Obok pliku wykonywalnego musi się znajdować katalog graphics, bo w nim znajdują się wszystkie grafiki używane przez tester; Wersja FPC obojętna - program pisany pod wersją 2.6.4, ale na nowszych także się kompiluje;

Kto chce niech korzysta - udostępniam bez licencji, można wykorzystać w dowolnym celu.

0

trzeba było krzyczeć to bym ci grafikę jakąś strzelił po znajomości (wtedy to byłby hit na miarę Crysis)

0

Tak przy okazji, bo warto wspomnieć - gdzieś w kodzie algorytmu ruchu CPU (AI 2) jest bug i potworek potrafi z pozycji startowej pójść w bok, pomimo tego, że po obu stronach są murki i możliwy jest ruch w górę lub w dół;

Pewnie coś gdzieś nie jest inicjowane po kolizji i przywróceniu domyślnych pozycji, kiedy AI 2 jest bieżącym algorytmem; Uścisk ręki prezesa temu, kto znajdzie i ujawni ten bug :]

Edit: Sam znalazłem błąd - brak resetowania bieżącego kierunku po kolizji z graczem; Wystarczy w metodzie ResetPlayerAndEnemyPositions także zresetować ich bieżące kierunki (ustawić FMoveDirection na mdDown); Choć to niedobrze, że potworek sam nie potrafi bez tego poprawnie ocenić gdzie może iść :D

0

szkoda, że niedokończona\zmodyfikowana, fajne są takie retro gierki

1

Nie kuś, bo coś przygotuję... :]

W sumie to dla oderwania się od swojego głównego projektu mógłbym napisać coś podobnego; W trybie okienkowym, bo na pewno nie znajdę na tyle czasu, aby uczyć się jakiegoś API graficznego (np. ZenGL); W sumie to mógłbym delikatnie popracować nad taką prostą gierką, która by wyglądała jak w tym testerze, ale dość krórka, jak oryginalna Chase; Tak dla zabawy - pixelart, nieduży ekran, może nawet paleta kolorów jak w starym GameBoy (czyli cztery kolory, np. skala szarości);

Mam nawet kilka pomysłów na graficzne bajery dla pixelartu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1