În continuare este descris conţinutul arhivei de linux. Arhiva de windows are conţinut similar.
- boţii pe baza cărora puteţi începe să codaţi
*'maps - toate hărţile care vor fi utilizate în campionat
*'mapgen - generator de hărţi
*'playgame.py - scriptul principal de rulare a meciurilor
*'play_one_game.sh - exemplu de rulare cu vizualizare non realtime
*'play_one_game_live.sh - exemplu de rulare cu vizualizare realtime
*'test_bot.sh - se ruleaza test_bot.sh ./MyBot
. Dacă ieşirea scriptului de test nu conţine erori, verificarea iniţială a botului este trecută cu succes. Directorul submission_test
conţine fişiere necesare pentru testare.
*'visualizer, visualizer.jar - fişiere pentru vizualizarea meciurilor în mod grafic
*'sample_bots - boţii oferiţi exemplu in Java şi python.
*'etapa1 - adversarul pentru etapa 1
*'etapa2 - adversarul pentru etapa 2
*'etapa3 - adversarul pentru etapa 3
===== Rularea meciurilor =====
Pentru rularea meciurilor se foloseşte scriptul playgame.py
==== Prerequisites ====
Pentru folosirea corespunzătoare a instrumentelor este nevoie de Python 2.7.2.
Linux: sudo apt-get install python
Windows: http://python.org/download/releases/2.7.2/
Pentru vizualizarea meciurilor în mod grafic este nevoie de JRE:
Linux: sudo apt-get install openjdk-6-jre
Windows: http://www.java.com/en/download/index.jsp
Pentru compilarea surselor java este nevoie de JDK:
Linux: sudo apt-get install openjdk-6-jdk
Windows: http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html
În Windows executabilele python
, java
şi javac
trebuie adaugate la PATH
.
De exemplu, se adauga la PATH
: C:\PROGRAM FILES\JAVA\JDK1.7.0_02\BIN;C:\PYTHON27\;
Pentru rularea executabilelor puse la dispozitie pentru etapele 1, 2 si 3 pe Windows trebuie instalat Microsoft Visual C++ 2010 Redistributable Package:
x86 (32b): http://www.microsoft.com/download/en/details.aspx?id=5555
x64 (64b): http://www.microsoft.com/download/en/details.aspx?id=14632
==== Moduri de folosire ====
În următoarele rânduri este prezentat modul de folosire a scriptului playgame.py în Linux. Pentru Windows, diferenţele sunt prezentate la final.
# Basic
<code>./playgame.py –map_file maps/maze/maze_02p_01.map ”./MyBot” ”./MyBot”</code> Harta şi comenzile de rulare ale boţilor trebuie întotdeauna specificate.
În acest mod nu vedem nimic, chiar daca boţii se luptă în spate. Deoarece implicit sunt 1000 de tururi, poate dura o vreme până ce lupta se termină.
# Basic Verbose
<code>./playgame.py –verbose –map_file maps/maze/maze_02p_01.map ”./MyBot” ”./MyBot”</code> Acum vedem statistici legate de jocul aflat în desfăşurare. Totuşi, nu e prea frumos.
# Non Real Time Grafic
<code>./playgame.py –log_dir game_logs –map_file maps/maze/maze_02p_01.map ”./MyBot” ”./MyBot”</code> În directorul “game_logs” se vor stoca fişierele:
- 0.replay: rezultatul meciului
- replay.0.html: pagina web pentru vizualizarea meciului
La sfârşitul meciului se va lansa browserul default pentru vizualizarea paginii web de replay.
# Real Time Grafic
<code>./playgame.py -So –log_dir game_logs –map_file maps/maze/maze_02p_01.map ”./MyBot” ”./MyBot” | java -jar visualizer.jar </code> În timpul rulării meciului acesta poate fi vizualizat. Vizualizatorul nu se închide la terminarea meciului.
Atenţie, binarele folosite trebuie să fie în acelaşi director cu playgame.py!
==== Vizualizatorul ====
Acesta se deschide în modurile 3 şi 4 de rulare.
Timelineul din partea de sus poate fi folosit pentru navigarea între tururi; pentru acelaşi scop se pot folosi şi tastele direcţionale. Alte informaţii utile oferite de vizualizator:
# Fog of war: în partea stângă se poate selecta afişarea celulelor vizibile de un anumit jucător.
# Bot In:** în partea dreapta jos butonul “Bot IN” generează inputul pentru un jucător. Apoi jucătorul poate fi rulat astfel:
./MyBot <input.in (În modul 4 acest buton se poate să nu funcţioneze)
==== Parametrii de joc ====
Numărul sau numerele din dreapta parametrului reprezintă valoarea implicită.
Acolo unde sunt menţionate două valori implicite, engine-ul va genera o valoare aleatoare între acele două valori (prima valoare reprezintă minimul şi a doua maximul).
*Parametrii pentru playgame.py care în mod normal nu ar trebui modificaţi.
*
--attack focus : Tipul de atac (closest, focus, support, damage)
*
--kill_points 2 : Numarul de puncte acordat pentru doborârea unui muşuroi advers.
*
--food symmetric : Tipul de generare a mancarii (none, random, sections, symmetric)
*
--viewradius2 77 : Raza de vizibilitate la pătrat.
*
--spawnradius2 1 : Raza de consum a mâncării la pătrat (numele are raţiuni istorice).
*
--attackradius2 5 : Raza de atac la pătrat.
*
--food_rate 5 11 : Numărătorul raţiei de măncare (raţia de mâncare = cantitatea de mâncare per tur per jucător).
*
--food_turn 19 37 : Numitorul raţiei de măncare.
*
--food_start 75 175 : Se garantează că 1/food_start din casuţele iniţiale vor conţine mâncare.
*
--food_visible 3 5 : Câtă mâncare se garantează că va fi vizibilă fiecărui jucător la începutul meciului.
*Parametrii pentru playgame.py care pot fi modificaţi pentru testare şi rulare.
*
--turns 1000 : Numărul maxim de tururi dintr-un meci.
*
--turntime 1000 : Timpul maxim de gândire per jucător per tur în milisecunde.
*
--loadtime 3000 : Timpul maxim de pornire al unui bot.
*
--rounds 1 : Numărul de meciuri.
*
--player_seed : Seed-ul oferit jucătorilor pentru generarea de numere aleatoare.
*
--engine_seed : Seed-ul pe care se bazează engine-ul pentru generarea de numere aleatoare. Acesta este folosit la generarea aleatorie a mâncării şi la generarea aleatorie a parametrilor
food_turn,
food_start,
food_visible,
food_rate.
*
--strict false : Modul strict nu permite mutari invalide ale botilor.
*
--end_wait 0 : Numarul de secunde oferit boţilor la sfârşit pentru închidere.
*
--nolaunch false : Nu lansa vizualizatorul la sfârşitul meciului.
*
--game_id 0 : Id-ul meciului cu care sa se înceapă numerotarea în loguri.
*
--log_input false : Generează inputurile pentru boţi în directorul de loguri.
==== Windows ====
Un exemplu de rulare directă din linia de comandă este:
<code>python “playgame.py” –verbose –map_file “maps\maze\maze_p02_01.map” “python ”“sample_bots\python\GreedyBot.py””” “java -cp sample_bots\java RandomBot”</code>
Diferenţa faţă de Linux constă în adăugarea ghilimelelor peste tot.
Pentru rularea din cadrul unui script trebuie adăugat
“%~dp0” înaintea fiecărei căi. Un exemplu poate fi găsit în
play_one_game.cmd
==== Paşi necesari pentru rularea în linia de comandă ====
Presupunând că sunt în directorul
tools-win\win'', se pot urma paşii de mai jos pentru a vedea în timp real un joc între doi boţi scrişi în Java:
<code>
1. cd sample_bots\java
2. compile
3. cd ..\..
4. playgame.py -So –log_dir game_logs –map_file “maps\maze\maze_02p_01.map” “java -cp sample_bots\java RandomBot” “java -cp sample_bots\java RandomBot” | java -jar visualizer.jar
</code>