Robocompo - konkurs sztucznej inteligencji
Sztuczna inteligencja to nieodłączny element gier, Robocompo to platforma, dzięki której sprawdzisz swoje umiejętności w tym temacie.
Robocompo a 3h compo
Dawno temu jeszcze na starym Warsztacie MirekCz zaproponował zorganizowanie szybkiego konkursu na napisanie gry. Zasady były bardzo proste, mając 3 godziny należało przygotować jakąś pracę na zadany temat. Temtatem pierwszego konkursu była grafika wektorowa. Uczestnicy konkursu jednocześnie należeli do jury i głosowali na prace inne niż swoja. Brałem w tym udział, niestety zostałem zdyskwalifikowany, gdyż w kodzie wykorzystałem funkcję API rysującą elipsy! Nie mniej jednak pomysł wypalił i w pierwszych miesiącach konkurs cieszył się dużą popularnością. Jak się można domyślić z czasem zaczeła ona maleć. Przyczyn jest wiele, nie ma sensu się nad nimi rozwodzić, najważniejsze to pamiętać ten rozdział historii Warsztatu od jego najlepszej strony.
Bezpośrednia rywalizacja
Konkurs o nazwie Robocompo , który niniejszym udostępniam w jego pierwszej wersji na łamach Warsztatu, będzie znacząco różnił się od swojego pierwowzoru. Zadaniem uczestników będzie zaimplementowanie sztucznej inteligencji pod konkretną gotową grę, np. wyścigi. Wyniki konkursu nie będą rozstrzygane na podstawie wrażeń artystycznych. Podstawowym kryterium będzie ostateczny wynik rozgrywki czyli np. miejsce w wyścigu.
Pierwsza gra - Bitwa
Docelowo co pewien czas będzie dodawana nowa gra, dla której będzie można napisać własny skrypt sztucznej inteligencji. Pierwszą grą jest "Bitwa", strategia czasu rzeczywistego, którą można opisać w kilku punktach:
- Biorą w niej udział 3 frakcje
- Wygrywa frakcja, która przejmie środek mapy i/lub wybije wszystkich przeciwników
- Aby przejąć środek należy oczyścić go z przeciwników i przetrwać w nim przez jedną minutę.
- Frakcja składa się z drużyn, po sześciu żołnierzy każda
- Żołnierz może się poruszać po dwuwymiarowej mapie i strzelać do przeciwników.
- Oprócz żołnierzy na mapie są też przeszkody, za którymi można się chować
- "Friendly fire", czyli można ranić swoich sojuszników.
- Uczestnik Robocompo dostaje do swojej dyspozycji drużynę, a jej członkowie są wyposażani w skrypt AI nadesłany przez uczestnika.
- Każda jednostka ma własną "pamięć" i dostęp do pamięci drużyny, która pozwala na komunikowanie się pomiędzy członkami zespołu
Nie ma ograniczenia jeśli chodzi o ilość jednostek biorących udział w bitwie, im więcej tym lepiej. Mam już przygotowany na tą okazję osobny serwer, który będziecie mogli z czystym sumieniem zajechać swoimi skryptami.
Kto wygrywa Robocompo? Ta drużyna, której frakcja wygrała bitwę i która zabiła najwięcej przeciwników. Drużyny są rozlosowywane po frakcjach, ale aby zapewnić balans rozgrywce, jest ona podzielona na dwa etapy. Pierwszy z nich to rozgrzewka, kiedy rozkład drużyn jest kompletnie losowy. Drugi etap to właściwa bitwa, przed którą rozkład drużyn jest balansowany na podstawie wyników rozgrzewki.
Skrypt SI ma do swojej dyspozycji określony zasób informacji:
- Stan żołnierza: aktualna czynność, "życie"(hit points), pamięć(struktura danych)
- Pole widzenia: obiekty(żołnierz, przeszkoda, środek mapy, pocisk) oraz ich położenie względem obserwatora
- Pamięć drużyny, struktura danych służąca do wymiany informacji pomiędzy swoimi żołnierzami
na podstawie, których może podejmować decyzje takie jak:
- Idź na przód/zatrzymaj się
- Obróć się
- Strzel(w aktualnym kierunku)
Podstawowym zadaniem dla uczestnika będzie stworzenie komunikacji pomiędzy swoimi żołnierzami. Raczej powinni oni poruszać się razem, ale to tylko moja sugestia. Kolejnym zadaniem będzie właściwa interpretacja pola widzenia. Skrypty nie dostają informacji o aktualnym położeniu na mapie. Jedyną informacją jest położenie względem obserwatora. Przydatne będą w tutaj podstawy trygonometrii. Kolejną podstawową kwestią będzie celowanie i strzelanie, jak to zrobić, aby nie pozabijać swoich sojuszników.
Dalsze etapy to już właściwa rozgrywka, czyli strategia walki, reakcje na różne sytuacje na polu walki, współpraca z innymi drużynami.
Zrobiłem małą prezentację tego co już udało mi się zrobić w postaci krótkiego filmiku na YT :
W chwili obecnej wizualizacja jest bardzo prosta, kółka to żołnierze, kropki to pociski. Jednak należy się spodziewać, że w pewnym momencie zostanie to zastąpione grafiką z prawdziwego zdarzenia. Film przedstawia przykładową(bardzo prostą) implementację SI, jednostki potrafią prowadzić różne tryby ognia. Niebieskie prowadzą ostrzał "dywanowy", część białych strzela do jednego celu, druga część atakuje różne cele, podczas gdy zielonym coś zupełnie nie wyszło. Ponad to jednostki uważają na "friendly fire" tzn. aby nie strzelać do swoich sojuszników.
Nawet dla tak prostej gry można stworzyć znacznie lepsze AI i właśnie to jest tematem konkursu.
Szczegóły techniczne
Językiem programowania jest JavaScript. Całość jest dostępna poprzez interfejs WWW, gdzie można się zarejestrować i wgrać swoją implementację SI do danej gry i od razu sprawdzić jej działanie. Wybór JS wynika z wielu względów. Przede wszystkim dzięki niemu łatwo było mi zintegrować wszystko w jedną całość, która jest w 100% dostępna przez WWW. Kluczowa jest tutaj kwestia bezpieczeństwa i wydajności, nad którą czuwa silnik Rhino znany z FireFoxa. Nie jest to język trudny w użyciu, a jednocześnie ma spore możliwości, które powinny wystarczyć.
Źródła gry(Java) są otwarte, można je pobrać i skompilować, aby móc testować swoje skrypty lokalnie. Jest to wskazane do prowadzenia eksperymentów, gdyż interfejs WWW ze swojej natury nie jest tak szybki jak lokalne środowisko programistyczne. Interfejs WWW zwraca informacje o błędach, a także oferuje możliwość prostego debugowania. Mimo wszystko zachęcam do tworzenia w lokalnym IDE tzn. Eclipse .
Robocompo zamiast dobranocki!
Niedziela będzie tym dniem, kiedy będzie rozgrywany właściwy konkurs. Co tydzień o godzinie 19:00 wszyscy uczestnicy spotkają się na stronie www.gamedev.pl/robocompo/ , aby tam na żywo obejrzeć zmagania wirtualnych robotów w oficjalnym konkursie i komentować je na chacie. Poza tym dniem będzie można codzienne testować swoje skrypty wspólnie z innymi.
Jak się łatwo domyśleć Robocompo jest jeszcze powijakach(słowo dev w domenie serwisu zobowiązuje!!), ale już teraz zachęcam do zapoznania się z podstroną Robocompo na której znajdziesz więcej informacji.
Informacja o pierwszym oficjalnym konkursie Robocompo zostanie umieszczona w kanale RSS: http://www.gamedev.pl/feed
Przykładowy skrypt
Po dołączeniu zarejestrowaniu się i dołączeniu do konkursu zobaczysz przykładowy skrypt. Wykorzystane są w nim wszystkie możliwości API, ale sam w sobie nie stanowi on wielkiej wartości jeśli chodzi o rozgrywkę. Na jego podstawie należy stworzyć własny kod.
Jednak zanim zaczniesz analizować kod i pisać swój, przyjrzyj się samej rozgrywce, zastanów się jaka taktyka walki będzie skuteczna i dopiero wtedy przelej to na kod. JavaScript to bardzo prosty język, podobnie jak udostępnione API, dlatego nie wachaj się pisać całego kodu od początku.
Powodzenia życzę sobie i Wam!
RGBattle to dopiero pierwsza gra z serii Robocompo i właśnie dlatego zamierzam poświęcić jej szczególną uwagę. Są i będą błędy , proszę o zgłaszanie ich do mnie, postaram się poprawić jak najszybciej.
7 lutego 2012
Warsztat