Opis zadania — bitewne AI dla VCMI

From VCMI Project Wiki
Revision as of 18:08, 10 December 2011 by Tow (talk | contribs) (Format pliku JSON)
Jump to: navigation, search

Odpalarka

Parametry odpalarki

Aby uruchomić bitwę trzeba skorzystać z odpalarki. Przyjmuje ona argumenty określające:

  • plik JSON z parametrami bitwy. Domyślnie wykorzystywany jest plik b1.json z folderu z VCMI.
  • nazwy AI (lub pełne ścieżki do nich) uczestniczących w bitwie. Domyślnie dostępne jest StupidAI będące równoważne udostępnionej przykładowej implementacji AI.
  • folder, w którym maja być umieszczone logi
  • plik, do którego ma być dopisany rezultat bitwy

Składnia argumentów:

-h [ --help ]                         Display help and exit
-l [ --aiLeft ] arg (=StupidAI)       Left AI path
-r [ --aiRight ] arg (=StupidAI)      Right AI path
-b [ --battle ] arg (=b1.json)        Duel file path
-o [ --resultsOut ] arg (=./results.txt)
                                       Output file when results will be 
                                       appended
-d [ --logsDir ] arg (=.)             Directory where log files will be 
                                       created
-v [ --visualization ]                Runs a client to display a 
                                       visualization of battle

Przykładowa komenda (wydana w folderze VCMI):

odpalarka.exe -l"C:\Documents and Settings\Administrator\Pulpit\Programming challenge\YourAI\YourAI_Standalone.dll" -d../logs -o../logs/results_list.txt

Uruchomi bitwę, gdzie lewe AI będzie wczytane z podanej ścieżki, zaś logi trafią do fodleru nadrzędnego „logs”.


Plik JSON z bitwą

Plik opisujący bitwę zapisany jest w tekstowym formacie JSON (strona oficjalna). Ogólnie format JSON obsługuje:

  • obiekty — są to pary "nazwa" : wartość wewnątrz klamer {}.
  • tablice (wektory) — są to ciągi wartości w klamrach []
  • literały — liczby i stringi w cudzysłowach ""

Plik zawiera jeden obiekt o następujących polach:

  • "terType" — liczba, identyfikator terenu, na którym odbywa się bitwa. Jednostki znajdujące się na swoim ojczystym terenie otrzymują niewielkie premie.
  • "bfieldType" — liczba, typ pola bitwy. Nie ma znaczenia mechanicznego, określa grafikę w tle.
  • "obstacles" — wektor zawierający liczby lub dwuelementowe wektory liczb. Opisuje rozmieszczenie przeszkód. Pojedyncza liczba oznacza umieszczenie na danym polu pniaka (będzie on zablokowany). Pary mają postać [id_przeszkody, nr_pola] — przeszkoda danego typu zostanie umieszczona na wskazanej pozycji. Spis identyfikatorów przeszkód jest dostępny np. tu.
  • "sides" — dwuelementowy wektor zawierający struktury z opisem stron uczestniczących w bitwie.
  • "creatures" — wektor struktur pozwalających zmienić parametry danej jednostki na czas bitwy.

Struktura opisująca stronę walki zawiera następujące pola:

  • "side" — liczba, określa, która to jest strona (0 — lewa, 1 — prawa)
  • "army" — wektor par liczb postaci [id_stwora, liczebność]. Każda para opisuje jeden oddział. Liczba oddziałów musi być w przedziale [1—7].
  • "heroid" — liczba, identyfikator bohatera. Jeśli brak tego parametru, strona nie będzie miała bohatera.
  • "heroPrimSkills" — czteroelementowy wektor liczb, określających wartości kolejnych umiejętności pierwszorzędnych boahtera (atak, obrona, siła czarów, wiedza).
  • "spells" — wektor zawierający identyfikatory czarów znanych przez bohatera.

Struktura opisująca zmianę parametrów jednostki:

  • "id" — liczba określająca identyfikator jednostki, która otrzyma nowe parametry
  • "attack" — liczba, wartość punktów ataku stwora. Analogicznie: "defense" (obrona), "HP" (punkty wytrzymałości), "dmg" (zadawane obrażenia), "shoots" (strzały), "speed" (szybkość).