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
    • număr mediu agenți rămași în viață
  • KOTH
    • rată control zonă
    • DPS în/în afara zonei
  • CTF
    • timp mediu livrare
    • timp în viață cu steagul
    • număr steaguri livrate în medie
  • Transport
    • rată avans
    • timp mediu livrare

Livrabile

Pentru ca proiectul să fie considerat complet, fiecare echipă va trebui 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 de tip top-down
  • Sistem simplu de 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 fiecare sarcină.

mps/proiect.1759774689.txt.gz · Last modified: 2025/10/06 21:18 by iulia.stanica
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