This is an old revision of the document!
Proiect: 2D Arena Micro-Battle
Proiectul la MPS pe direcția A va fi dezvoltat în echipe de 7-8 persoane, valorând un total de 6 puncte, fiind evaluat în două etape. Prima este de-a lungul laboratorului în cadrul semestrului, valorând un total de 4 puncte. A doua o reprezintă o prezentare în cadrul sesiunii de tip “Demo-Day” care valorează 2 puncte.
Idee de bază
Proiectul constă în dezvoltarea unui joc de tip 2D shooter “top-down” micro-battle cu agenți bazați pe inteligență artificială (AI). Jocul se va desfășura de-a lungul a diverse runde scurte, jucate pe o hartă prestabilită, care urmăresc îndeplinirea unui obiectiv principal, bazat pe un mod de joc selectat, unde o echipă de agenți încearcă să câștige împotriva unei alte echipe de agenți. Agenții vor urmări îndeplinirea acestui obiectiv pe baza unor strategii definite intern, pentru fiecare, cât și a unor moduri de comunicare între aceștia. Scopul final fiind reprezentat de colectarea de diverse statistici pe baza jocurilor desfășurate între agenți.
Obiective
Proiectul are în vedere cinci mari obiective:
Implementarea unei interfețe cu utilizatorul (UI) pentru vizualizarea jocului și definirea modului în care agenții vor acționa
Implementarea a diverse moduri de joc, simple, și mecanici aferente pentru acestea
Implementarea a diverse tipuri de agenți și strategii pentru aceștia
Implementarea a diverse moduri de comunicare între agenți
Colectarea de statistici aferente jocurilor desfășurate între agenți.
Mecanici Joc
Jocul se va desfășura în cadrul unei hărți 2D. Pentru simplitate agenții vor fi reprezentați sub formă de cercuri, armele sub formă de bețe dreptunghiulare, iar gloanțele/proiectilele sub formă de cercuri mai mici. Harta va avea și un set de obstacole (ziduri) care pot fi distruse, sau nu, în spatele cărora agenții se pot ascunde. Fiecare agent va avea în fața lui un con ce reprezintă linia lui de vedere (LoS), un agent putând să împuște doar agenți inamici aflați în interiorul LoS.
LoS poate fi cerc în fața agentului pentru simplitate, în fază inițială. Astfel, coliziunile care trebuiesc verificate sunt de natură simplă doar cerc-cerc sau cerc-dreptunghi.
Fiecare agent va avea anumite atribute și un rol, fie prestabilite, fie alese aleator, fie alese de către un agent la începutul unui joc. Aceste atribute se referă la număr de puncte de viață, viteza de mers, daune pe care le poate cauza, număr gloanțe, distanță LoS, viteză reîncărcare, etc. Acestea pot fi influențate fie direct pe baza unor puncte oferite la începutul jocului, fie indirect, calculate pe baza unor atribute mai simple, precum putere, dexteritate etc.
Se propune implementarea a patru moduri de joc, fiecare cu propriul său obiectiv principal:
Survival - câștigă echipa care reușește să ucidă toți agenții inamici, sau echipa care are cei mai mulți agenți rămași în viață după un anumit timp limită
King of the Hill (KOTH)- câștigă echipa care acumulează cele mai multe puncte prin controlul unei anumite zone cheie din cadrul hărții; punctele se acumulează dacă nu există niciun agent inamic în cadrul zonei, o rundă putând fi încheiată fie după un anumit timp, fie pe baza unui număr maxim de puncte
Capture the Flag (CTF)- câștigă echipa care adună cele mai multe puncte prin livrarea unui steag capturat de la baza echipei adverse și livrat în propria bază, cu aceleași idei de finalizare de rundă ca și în cadrul KotH
Transport - o echipă încearcă să transporte un obiect către baza adversă, câștiga echipa care după un anumit timp fie reușește să livreze obiectul, fie previne livrarea obiectului
Agenți
Agenții vor încerca să îndeplinească obiectivul unui mod de joc pe baza unor limitări în comunicare, sau a diverse moduri de comunicare, și anume:
lipsă de comunicare - agenții iau decizii individuale pentru a îndeplini obiectivul principal al jocului
comunicare limitată - agenții pot comunica între ei pe baza unor restricții clare
topologică, unul sau mai multe din următoarele exemple:
cei mai apropriați vecini
stil inel (agentul A1 poate transmite doar către A2, A2 către A3, etc. urmând ca An să poată transmită înapoi către A1)
stil stea (similar cu cel de mai sus dar un agent poate transmite către alți doi agenți)
stil hub/lider (un agent central primește mesajele de la toți ceilalți agenți, agentul central poate transmite înapoi către toți ceilalți)
aleator - agenții cu care poate comunica sunt aleși aleator la începutul fiecărei runde/joc
bazată pe dimensiunea mesajului - mesajele sunt limitate în funcție de numărul de biți
bazată pe distanță - mesajele peste o anumită distanță între agenți în cadrul hărții nu pot fi transmise
bazată pe timp - un agent nu poate transmite mai mult de un mesaj în cadrul unui interval de timp (ex: 1s/2s etc.)
comunicare nelimitată - agenții pot să transmită orice tip de mesaj
Se recomandă următoarea schemă comună pentru transmiterea de mesaje, definite în format YAML, dar orice alt mod de implementare este binevenit:
TIMESTAMP: {x} #timpul la care a fost transmis mesajul
TARGETS: {A1, …, Ak} #ID-urile agenților țintă pentru mesaj
MOVE: {x, y} #poziția spre care agentul intenționează să se deplaseze către
ASSIST: {x, y} #cerere către alți agenți să se deplaseze spre o anumită poziție
FOCUS: {Ax, x, y} #ID-ul unui agent din echipa adversă care ar trebui țintit simultan și poziția curentă a acestuia
STATUS: {hp, ammo, etc.} #detalii despre status-ul curent al agentului
ROLE: {x} #ce rol îndeplinește agentul în momentul de față
Pot fi adăugate alte tipuri de mesaje în funcție de necesitate/complexitatea dorită.
Fiecare agent va avea o altă strategie de joc, reprezentat de un alt AI, în funcție de rolul pe care îl ocupă în cadrul echipei. Se propun următoarele 4 roluri: lider, înaintare, tanc,
Hartă
Harta poate fi predefinită, generată pseudo-aleator, sau editată pe baza unui editor. Nu este nevoie de dimensiuni enorme ci suficient de mari pentru a se asigura o durată rezonabilă medie pentru runde (30-120s). Nu trebuiesc implementate toate trei modurile, fiecare echipă poate alege unul singur care îl consideră mai potrivit.
În cazul în care se merge pe ideea de hartă generată pseudo-aleator se va folosi mereu același seed pentru generare în evaluarea statisticilor măsurate mai jos pentru a avea rezultate reproductibile.
Statistici Măsurabile
Pe lângă dezvoltarea jocului se află în vedere și măsurarea a diverse statistici legate de agenți, modurile de joc, și modurile de comunicare dintre aceștia. Vor fi măsurate un set de metrici comune, cât și un set de metrici specifice unui mod de joc.
Se propune măsurarea următoarelor metrici comune:
Daune pe Secundă (DPS)
Daune Încasate pe Secundă (DTPS)
Overkill - daune peste numărul de puncte de viață rămase ale unui agent
rată kill/death/assist (KDA)
puncte viață ramase mediu
timp mediu de supraviețuire agent
timp mediu rundă
rată foc țintă - 2 sau mai mulți agenți țintesc același inamic
gloanțe medii
distanță parcursă medie
Următoarele metrici pot fi măsurate individual pentru un anumit mod de joc:
Survival
KOTH
rată control zonă
DPS în/în afara zonei
CTF
Transport
rată avans
timp mediu livrare
Livrabile
Pentru ca proiectul să fie considerat complet, fiecare echipă va trebuie să prezinte următorul set de livrabile detaliat mai jos.
Se urmărește ca soluția software să fie dezvoltată în mod continuu în cadrul materiei, fiind țintit un progres constant, cu modificări majore o dată la cel mult două săptămâni. Soluțiile implementate pe ultima sută de metri vor fi depunctate în mod substanțial.
Software
Pe partea de software se doresc următoarele:
Interfață cu utilizatorul pentru urmărirea agenților în tip top-down
Sistem simplu fizică
Sistem replay pentru runde/jocuri
Vizualizator pentru statistici echipe (KDA/runde câștigate etc.)
Inspector pentru un agent - vizualizare detalii precum puncte viață, număr gloanțe etc.
Sistem de logare pentru mesaje transmise - protocol comunicare, tip mesaj, timestamp, agenți țintă, conținut mesaj etc.
Cel puțin 3 moduri de joc la alegere
Editor/Generator hărți, sau cel puțin 4 hărți predefinite (1 pentru fiecare mod de joc, la dimensiuni rezonabile)
Statistici măsurate pe mod de joc/mod de comunicare
Teste de validare agenți
UI, sistemul de fizică nu trebuie implementat individual se poate folosi un motor grafic existent separat (Unity, Unreal). Soluțiile pot fi dezvoltate în orice limbaj de programare și orice mediu dorit
Documentație
Pe partea de documentație se doresc următoarele componente:
Repository pe Git cu README care conține membrii echipei, limbajul de programare utilizat, soluții externe, metodologie de dezvoltare aleasă
Document Design Software (SDD)
Planificare echipă/sarcini (ex: Diagramă Gantt, Kanban, Scrum Board, timeline etc.)
Plan comunicare - minute întâlniri (decizii, acțiuni, responsabili, termene)
Rapoarte testare
Se punctează respectarea rolurilor în echipă, a sarcinilor planificate, și a timpilor estimați pentru