Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pa:reguli-generale-ants [2013/02/10 02:43] (current)
Line 1: Line 1:
 +====== Reguli generale Ants ======
  
 +Pentru regulile concursului în limba engleză, consultaţi [[http://​aichallenge.org/​problem_description.php]] şi 
 +[[http://​aichallenge.org/​specification.php]].
 +
 +===== Descriere joc =====
 +
 +Ants e un joc multi-player ce se joacă pe o hartă care conţine teren şi apă pe post de obstacole. Harta conţine şi bucăţi de mâncare care apare în locuri aleatoare şi la momente de timp aleatoare. Fiecare jucător deţine o colonie de furnici, reprezentată prin unul sau mai multe muşuroaie. Obiectivul este ca fiecare jucător să găseasă muşuroaiele adversare şi sa le distrugă. Pentru a se înmulţi, este necesar ca fiecare jucător să colecteze mâncare. Dacă toate muşuroaiele sunt distruse, jucătorul nu va mai putea să-şi dezvolte colonia.
 +
 +Jocul se bazează pe tururi. Harta este reprezentată sub forma unui grid toroidal (dacă o furnică se deplasează în sus de pe primul rând al hărţii, ea va apărea pe ultimul rând; analog, se întâmplă pentru toate cele 4 direcţii).
 +
 +Fiecare furnică vede doar o arie din jurul ei. Deci, la început, harta nu este în întregime vizibilă (doar porţiuni din jurul muşuroaielor). La fiecare tur, se vor oferi informaţii despre toate celulele vizibile:
 +  * o listă cu toate celulele cu apă ce nu au fost văzute deja
 +  * o listă cu toate furnicile, inclusiv propriile furnici
 +  * o listă cu toate bucăţile de mâncare
 +  * o listă cu toate muşuroaiele,​ inclusiv propriile muşuroaie
 +  * o listă cu furnicile care au murit în urma atacului de la ultimul tur, inclusiv propriile furnici
 +
 +Fiecare bot poate să furnizeze cel mult o mutare pentru fiecare furnică în cadrul unei ture. Fiecare mutare specifică o furnică prin locaţia ei pe hartă şi direcţia de mişcare (Nord, Sud, Est, Vest). După ce mutarea a fost executată, furnica se va mişca în direcţia indicată o poziţie.
 +
 +Fiecare tur este alcătuit din 6 faze:
 +  * mutarea tuturor furnicilor (cele care se ciocnesc, vor muri)
 +  * atacul furnicilor adversare (dacă se găsesc în raza de atac)
 +  * distrugerea muşuroiului propriu (dacă se găseşte o furnică adversară pe el)
 +  * naşterea de noi furnici din muşuroaiele proprii care n-au fost distruse
 +  * colectarea mâncării aflată lângă furniciile proprii
 +  * aparitia de bucati noi de mancare
 +
 +La sfârşitul fiecărui tur, jucătorul va primi starea jocului şi va putea executa mutările furnicilor.
 +Dacă un bot se blochează (crash, timeout), atunci el va fi scos din joc. Însă furniciile care au rămas în viaţă vor rămâne pe ultima poziţie. Pentru ca un alt jucător să-şi mute furnica pe o poziţie ocupata de o astfel de furnică, trebuie mai întâi s-o omoare.
 +
 +Jocul se termină în una din următoarele situaţii: mai există un singur jucător activ cu furnici vii, mai există un singur jucător cu muşuroi nedistrus, se termină numărul de tururi asignate acelui joc. Jocul se poate termina şi mai repede dacă nu se înregistrează niciun progres de-a lungul mai multor tururi pentru niciun bot din joc.
 +
 +===== Tururi si faze =====
 +
 +==== Setup ====
 +Fiecarui bot ii este trimisa o serie de informatii la inceputul jocului (dimensiunea hartii, numarul maxim de tururi, timpul de gandire per tur). Dupa ce bot-ul a primit si a procesat aceste date, ar trebui sa trimita un “go”. Abia dupa ce toti botii sunt gata sa inceapa jocul (au trimis “go”), acesta va incepe.
 +
 +==== Tururi ====
 +Odata ce toti botii au indicat faptul ca au terminat etapa de setup (si sunt gata sa inceapa jocul), engine-ul va efectua urmatorii pasi in mod repetat:
 +    - Trimite starea jocului fiecarui jucator
 +    - Primeste mutarile de la jucatori
 +    - Efectueaza fazele si actualizeaza starea jocului
 +    - Verifica daca trebuie sa se termine jocul
 +
 +Exista un numar limita maxim de tururi pentru fiecare harta ce este specificat jucatorilor. Un tur este definit sub forma unor pasi definiti mai jos. Dupa ce acesti pasi (faze) s-au executat de numarul maxim de ori, jocul se incheie.
 +
 +==== Faze ====
 +Dupa ce engine-ul a primit toate mutarile de la toti jucatorii, va actualiza starea jocului pentru a avansa la urmatorul tur. Asta se intampla in 6 faze:
 +    - Executie mutari furnici
 +    - Atac şi bătălie
 +    - Distrugere musuroaie
 +    - Nastere furnici
 +    - Colectare mancare
 +    - Aparitie bucati noi de mancare
 +
 +==== Conditii de eliminare a unui jucator din joc ====
 +Oricare din urmatoarele cauze va determina scoaterea din joc a unui jucator:
 +    - Jucatorul nu mai are furnici vii pe harta.
 +    - Botul s-a blocat (crash, timeout).
 +    - Botul a depasit timpul limita de gandire, fara a trimite toate mutarile.
 +    - Botul incearca sa realizeze o operatie ce este catalogata drept o problema de securitate.
 +
 +In cazul in care un bot s-a blocat (crash, timeout), furnicile lui vor ramane pe harta pana la sfarsitul jocului. Acestea mai pot participa inca la atacuri si la coliziuni. Ele vor ramane pe ultima pozitie si nu se vor mai muta in alta parte. Celorlalti jucatori nu li se va comunica faptul ca aceste furnici nu mai participa la joc, acestia fiind nevoiti sa le omoare pentru a le ocupa pozitia. De asemenea, daca in turul in care botul s-a blocat, el a reusit sa trimita cateva mutari, aceste mutari nu se vor executa.
 +
 +==== Clasament ====
 +La sfarsitul jocului, se realizeaza clasamentul doar pe baza rezultatelor finale.
 +
 +===== Scor =====
 +Obiectivul jocului este ca fiecare jucator sa realizeze un scor cat mai mare. Punctele sunt date in functie de atacul si apararea musuroaielor. Fiecare jucator porneste cu 1 punct pentru fiecare musuroi. Daca distruge un musuroi advers, va primi 2 puncte. Daca pierde unul din musuroaiele proprii, va primi -1 punct.
 +
 +Daca un bot nu ataca si isi pierde toate musuroaiele,​ va termina cu 0 puncte.
 +
 +Daca jocul se termina cu un singur bot activ, pentru orice musuroi advers care n-a fost distrus vor fi acordate puncte acestui bot. S-a abordat aceasta metoda pentru cazurile in care un bot se blocheaza, iar punctele aferente atacului sa nu-i fie refuzate botului activ. Astfel, se acorda 2 puncte botului ramas activ pentru fiecare musuroi advers nedistrus, si -1 punct pentru fiecare musuroi advers jucatorului care detine acel musuroi (acestea se numesc puncte bonus).
 +
 +===== Reguli pentru terminarea rapida a jocului =====
 +Pentru a asigura rularea unor jocuri semnificative,​ s-au introdus cateva reguli prin care jocul se poate termina mai rapid:
 + # **Mancarea nu este colectata** \\ In cazul in care cantitatea totala de mancare reprezinta 90% din numarul total de mancare si furnici pentru 150 tururi, atunci se incheie jocul. ​   ​
 + # **Furnicile nu distrug musuroaie** \\ In cazul in care numarul total de furnici in viata ale jucatorului dominant reprezinta 90% din numarul total de mancare si furnici pentru 150 tururi, atunci se incheie jocul.
 + # **Singurul supravietuitor** \\ Daca ramane un singur jucator activ in joc, atunci jocul se incheie si se acorda puncte bonus.
 + # **Clasament stabilizat** \\ Se calculeaza scorul maxim (daca ar distruge toate musuroaiele adverse existente) si scorul minim (daca si-ar pierde toate musuroaiele existente) pe care il poate obtine fiecare jucator. Daca nu exista diferente in scor (se compara scorul maxim al fiecarui jucator cu cel putin un musuroi nedistrus cu scorurile minime ale celorlalti jucatori) care ar putea sa schimbe clasamentul,​ atunci jocul se incheie.
 + # **Atingerea numarului maxim de tururi** \\ Jocul se incheie cand s-a ajuns la numarul maxim de tururi.
 +
 +===== Colectarea mancarii =====
 +Colectarea mancarii are loc in fiecare tur, dupa ce a avut loc atacul. Daca exista furnici aflate in raza de colectare a mancarii, se pot intampla unul din urmatoarele lucruri:
 + # Daca exista mai multe furnici in raza de colectare a mancarii apartinand unor jucatori diferiti, mancarea dispare din joc si nu este colectata de nimeni.
 + # Daca exista mai multe furnici in raza de colectare a mancarii apartinand aceluiasi jucator, mancarea este colectata de respectivul jucator, fiind plasata in colonie.
 +
 +===== Nasterea de noi furnici =====
 +Pe masura ce mancarea este colectata, ea este plasata in colonie. Fiecare bucata de mancare va da nastere la o noua furnica. Furnicile vor iesi din musuroaie.
 +# Musuroiul din care va iesi furnica trebuie sa nu fie distrus. ​
 +# Musuroiul din care va iesi furnica trebuie sa nu fie ocupat de o alta furnica.
 +O singura noua furnica se poate naste la fiecare tur dintr-un musuroi.
 +Daca exista harti cu mai multe musuroaie per jucator, o furnica se va naste din fiecare musuroi la fiecare tur, in cazul in care exista suficienta mancare in colonie. Daca numarul de bucati de mancare este mai mic decat numarul de musuroaie, atunci fiecarui musuroi i se va da o prioritate. Ultimul musuroi care a avut o furnica deasupra lui va fi ales ultimul sau musuroiul care a fost atins cel mai in urma va fi ales primul. In caz de egalitate, va fi ales aleator.
 +Asta inseamna ca daca un jucator isi va muta intotdeauna furnicile din musuroi imediat ce au fost nascute, furnicile vor fi raspandite in mod egal intre musuroaie. Un jucator poate sa controleze musuroiul care va da nastere la o noua furnica prin blocarea celorlalte musuroaie cu alte furnici.
 +
 +===== Apariţia mâncării =====
 +Mâncarea apare simetric pe hartă, harta fiind simetrică (pentru fiecare bot, poţitia de start arată la fel ca pentru ceilalţi boţi).  ​
 +  *Fiecare joc începe cu câteva bucăţi de mâncare plasate în raza de vizibilitate a botului (2-5 bucăţi).
 +  *Locaţia mâncării va fi aleatoare, dar de asemenea plasarea este simetrică.
 +  *Fiecare joc are o rată ascunsă de apariţie a mâncării care va mări numărul de bucăţi de mâncare din joc. Astfel, cantitatea de mâncare ce va apărea va fi impărţită la numărul de jucători, apoi va fi distrbuită simetric.
 +  *Întreaga hartă este împărţită în seturi de pătrăţele. Un set conţine pătrăţele aflate pe hartă în locuri simetrice. Seturile sunt amestecate (shuffle) într-o ordine aleatoare. După ce mâncarea a apărut pe pătrăţelele aflate în setul curent, este ales următorul set. După ce au fost alese toate seturile, ele sunt amestecate din nou.
 +  *Fiecare set este ales cel puţin o dată până când altul să fie ales a doua oară.
 +  *În unele pătrăţele aflate la distanţă echidistanta faţă de 2 boţi, determinând setul să fie mai mic. Rata de apariţie a mâncării ţine cont de acest lucru.
 +  *Uneori harta este oglindită, determinând ca pătrăţelele dintr-un anumit set să se atingă. Aceste seturi nu vor fi luate in considerare.  ​
 +
 +===== Atacul şi soluţionarea bătăliei =====
 +<​code>​
 +// how to check if an ant dies
 +   for every ant:
 +       for each enemy in range of ant (using attackadius2):​
 +           if (enemies(of ant) in range of ant) >= (enemies(of enemy) in range of enemy) then
 +               the ant is marked dead (actual removal is done after all battles are resolved)
 +               break out of enemy loop
 +</​code>​
 +  *Furnicile aflate în raza de atac a celorlalte se vor omorî unele pe celelalte (uneori).
 +  *Dacă un jucător are mai multe furnici decât celălalt în zona de atac, acel jucător nu va muri (de cele mai multe ori).
 +  *Soluţionarea este deterministă.
 +  *Este cea mai fun parte a jocului :D.
 +
 +===== Distrugerea muşuroaielor =====
 +Obiectivul jocului este distrugerea muşuroaielor adverse şi apărarea propriilor muşuroaie. Un muşuroi este distrus în momentul în care o furnică adversă se află pe el (în locaţia muşuroiului). Un muşuroi distrus nu va mai putea da naştere la noi furnici, însă un jucător care are toate muşuroaiele distruse, dar alte furnici în viată, mai poate să mute acele furnici, să distrugă muşuroaie, să atace sau să culeagă mâncare.
pa/reguli-generale-ants.txt · Last modified: 2013/02/10 02:43 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0