RGBattle - pierwsze Robocompo

RGBattle to pierwsza gra, w którą możesz "zagrać" na łamach Robocompo.

RGBattle

Zieloni vs Biali vs Niebiescy

To był dosyć pracowity tydzień. Celem było stworzenie prostej gry, ale jego realizacja już taka łatwa nie była. W każdym razie jakoś się udało i mam teraz poczucie dobrze wykonanej roboty! :) Problemów było wiele, po pierwsze wydajność zarówno ta po stronie serwera jak i po stronie użytkownika. Po drugie bezpieczeństwo i odporność na błędy. W efekcie powstała dosyć zabawna implementacja w Javie, którą niebawem udostępnię.

Bitwy są rozgrywane prawie bez przerwy. Każdy z uczestników konkursu może sprawdzić podstawowe statystyki swoich skryptów, które są generowane na koniec każdej z bitew. Dla wszystkich skryptów, które biorą udział w bitwach, generowany jest ranking, którego szczegóły są opisane na podstronie RGBattle .

Przechodząc do samej gry, została ona już opisana w poprzednim artykule . Dokonałem kilku zmian tzn. uprościłem całą otoczkę. W każdej chwili można się zarejestrować, wgrać swój skrypt i zgłosić go do compo. Trafia on następnie do kolejki i w końcu na arenę, gdzie odbywają się bitwy. Jedna rozgrywka trwa max 10 minut, jest to typowy deathmatch . Wygrywa ten kto przeżył i miał najwięcej fragów. Zrezygnowałem z przejmowania środka jako wariantu wygrania bitwy, gdyż mogło by to być zbyt trudne z punktu widzenia uczestników. Mam jednak w planach urozmaicanie rozgrywki.

Postawiłem również w 100% na interfejs WWW. W tej chwili sprawdza on poprawność składniową wgrywanych skryptów. Możesz również debugować swój skrypt przy pomocy funkcji debug() . Czym prędzej zamierzam dodać kolejny element interfejsu jakim będzie interaktywna piaskownica, w której będzie można testować "offline" swoje skrypty. Aby osiągnąć dobrą używalność tego narzędzia będę musiał mu poświęcić nieco więcej czasu, dlatego nie udostępniam go jeszcze teraz w okrojonej postaci, bo by mijało się to z celem. Jeśli kogoś to będzie interesowało to niebawem na łamach WjEBdevu ukaże się artykuł opisujący całą operację.

W tej chwili jeszcze nie ma grafiki, jest prosta wizualiacja, czyli kolorowe kółka i kropki, ale zamierzam to zmienić. Pytanie jak mają wyglądać postacie: czołgi , jaskiniowcy , komandosi czy może pluszowe misie ?

Krótki kurs JavaScript

Przed uczestnikami konkursu jest stawianych kilka zadań, musimy nauczyć naszych żołnierzy kilku podstawowych czynności:

  • Analiza pola widzenia(zmienna viewport )

    Jest to struktura danych, która zawiera kluczowe informacje. Znajdziesz w niej dane, o każdym obiekcie, który jest widoczny na mapie: rodzaj obiektu(sojusznik, wróg), dystans i kąt względem aktualnego kierunku patrzenia(+-PI). Poprawna analiza tych informacji jest podstawą jakichkolwiek działań.

  • Celowanie

    Wybieramy nasz cel ze zmiennej viewport , obracamy się w jego kierunku i oddajemy strzał. Sprawa się komplikuje jeśli cel jest w ruchu. Musimy wziąść na to poprawkę. Inny problem to sytuacja, w której coś nam przesłania widok na nasz cel. Pół biedy jeśli jest to inny przeciwnik, najważniejsze, żeby nie ranić własnych sojuszników! Co jeśli nasz przeciwnik nie daje się trafić? Dalsze strzelanie do celu, który unika naszych pocisków od dwóch minut, raczej nie ma sensu ;)

  • Poruszanie się

    Przede wszystkim powinniśmy podążać za naszym celem, bo wtedy prawdopodobieństwo trafienia rośnie. Drugą istotną kwestią są kolizje. Próba poruszania się jak spychacz w końcu doprowadzi nas do celu, ale wszelkie kolizje spowalniają nas w znacznym stopniu, dlatego warto nauczyć nasze jednostki omijać wszlkiego rodzaju przeszkody(żywy lub martwe).

  • Współpraca z drużyną

    Prawdopodobnie ta dziedzina będzie miała kluczowe znaczenie podczas samych konkursów. Tutaj można uzyskać największą przewagę nad konkurencją. Sam mam kilka szalonych pomysłów, które spróbuję wcielić życie.

    Jednak wróćmy na chwilę do naszej dwuwymiarowej rzeczywistości. Warto pamiętać o pewnych podstawowych kwestiach. Pierwszą z nich jest asystowanie się tzn. strzelanie do jednego celu aby zabić go jak najszybciej. Drugą jest nie strzelanie do siebie wzajemnie, nie zasłanianie pola widoku. Nasze jednostki najpierw powinny zacząć współpracować ze sobą na niskim poziomie, abyśmy mogli przejść do bardziej zaawansowanych taktyk.

JavaScript jest tak prostym językiem, że aż nie wypada mi tłumaczyć jego składni. Skrypty pisane na potrzeby konkursu powinny być proste . Nie trzeba tworzyć szczególnie wymyślnych konstrukcji, podstawą jest dobry pomysł , a jego implementacja to kwestia czysto mechaniczna. Być może możliwe jest stworzenie zabójczej kombinacji trzech linijek kodu, kto wie? Na wszystkie inne pytania odpowie Google :P

Powodzenia!

RGBattle to pozornie prosta gra, ale implementacja całego systemu kosztowała mnie sporo wysiłku, który mam nadzieję, że w przyszłości zaprocentuje. Z całą pewnością są błędy i niedociągnięcia, dlatego proszę o ich zgłaszanie , abym mógł poprawić to czego sam nie zauważyłem. Jest to pierwsza gra z serii Robocompo, dlatego należy jej się szczególna uwaga. Nie zależy mi w tym momencie na popularności konkursu, najbardziej chciałbym wyłapać błędy i dostosować całość do wymagań innych ludzi, na których życzliwość w zgłaszaniu uwag bardzo liczę. Dopiero wtedy będziemy myśleć o jakiejś promocji, ale już teraz Robocompo jest otwarte dla wszystkich. W oparciu o doświadczenia wypracowane na RGBattle zamierzam tworzyć kolejne gry, które będą lepsze i bardziej rozbudowane przez co sprawią nam wszystkim radość, która jest pierwszym i jedynym celem istnienia Robocompo.

Aby rozpocząć zabawę w RGBattle:

  1. Zarejestruj/zaloguj się
  2. Dołącz do konkursu
  3. Zapoznaj się z przykładowym skryptem i dokumentacją

13 lutego 2012 g.tanczyk