Table of Contents

Tema 3 – Liga Boților (C++)

🤖 Liga Boților - Resource Rush ⚔️

Construiește un motor de simulare pentru un joc de colectare resurse pe o hartă rectangulară (N × M) cu obstacole și power-ups. Formatul este 100% comandă-per-linie, astfel sunt posibile dueluri intre 2 jucatori.

📅 Publicare: 8.12.2025
Deadline: 22.12.2025, ora 23:59
🎯 Punctaj Total: 10p (9p teste + 1p README + până la 5p bonus clasament)
🧪 Teste: 20 scenarii automate (folder `teste/`)
🏆 Clasament Live: rezultate.eu
📝 Accept Assignment: Classroom Link

Autor: Trifu Marius-Constantin

Informații Generale

Tehnologii:

Cerințe:

1. Descriere

Jocul este un joc de colectare resurse pe hartă rectangulară 2D (N × M). Ești un jucător pe o hartă rectangulară definită printr-o matrice și te poți deplasa pentru a colecta resurse cu valori diferite. Simularea rulează pe runde (ticks), iar intrarea este o succesiune de comenzi trimise de arbitru. După fiecare comandă procesată trebuie să emiți propria ta decizie.

🎯 Obiectiv: Ajungi la punctul final înainte ca numărul de runde să se termine, colectând cât mai multe resurse pe drum. Maximizează TOTAL_SCORE = suma valorilor resurselor colectate (cu multiplicatori).

⚠️ Condiție de trecere test: Dacă numărul de runde se termină și nu ești la punctul final, testul pică (0 puncte). Dacă ajungi la punctul final înainte de terminarea rundelor și ai scorul minim necesar, testul trece.

Mecanica Jocului

Ticks și Acțiuni:

Hartă:

Mișcare:

Superputere Jump (J):

Power-ups Double (D) și Triple (T):

Colectare Resurse:

Fire (F):

Punct Final:

Scor:

Fluxul unei simulari

1. Citești configurarea hărții (dimensiuni, matricea hărții, poziție inițială, punct final).
2. Primești comenzi de la arbitru una câte una (mișcări ale adversarului).
3. După fiecare linie citită **trebuie** să răspunzi cu exact 1 linie care descrie acțiunea ta pentru acel tick.
4. Jocul se termină când ajungi la punctul final sau se termină numărul de runde.
5. Scriptul de verificare calculează automat scorul și verifică dacă testul a trecut sau a picat.

2. Formate Fișiere

📝 Respectă exact formatele! Fișierele de test vor fi în `teste/input/test1.txt … test20.txt`. Output-urile așteptate sunt în `teste/output/`.

2.1 Fișier de intrare (arena.txt)

arena.txt
ARENA N M ROUNDS
INITIAL_X INITIAL_Y
PLAYER2_X PLAYER2_Y
FINAL_X FINAL_Y
MAP
char11 char12 ... char1M
char21 char22 ... char2M
...
charN1 charN2 ... charNM
END_MAP
STREAM
TICK <t> <action>
TICK <t> <action>
...

Explicații:

Notă: Cuvântul TICK este folosit în gaming pentru a desemna o unitate de timp/rundă într-o simulare. Este standard în jocuri turn-based și simulări.

Direcții disponibile: `N` (sus), `S` (jos), `E` (dreapta), `W` (stânga). NU sunt permise diagonalele.

Exemplu:

ARENA 5 5 20
0 0
3 2
4 4
MAP
0 5 W 0 10
E 3 0 W 7
0 0 J 0 0
W 2 D 4 W
0 0 F 0 15
END_MAP
STREAM
TICK 1 WAIT
TICK 2 MOVE 3 3
TICK 3 MOVE 4 3
...

2.2 Format comenzi de intrare

Comandă Semnificație
TICK t WAIT Tick-ul `t` - adversarul stă pe loc (nu se mișcă).
TICK t MOVE x y Tick-ul `t` - adversarul s-a deplasat la coordonatele (x, y), unde x=linie, y=coloană (0-index).

Observații:

2.3 Output obligatoriu (stdout)

Programul trebuie să scrie la stdout exact o linie după fiecare comandă `TICK` primită.

💡 Debug: Poți scrie mesaje de debug la stderr (ex.: `std::cerr « “msg” « std::endl;`). Scripturile de verificare nu citesc stderr, deci nu afectează verificarea testelor. Acest lucru este util pentru debugging local.

Format:

Reguli:

Exemplu output:

MOVE 0 1
MOVE 1 1
WAIT
MOVE 2 1

3. Reguli de Validare

🗺️ Mișcare

💎 Colectare Resurse

🚀 Superputere Jump

⚡ Power-ups Double și Triple

🔥 Fire (F)

🏁 Punct Final

⏱️ Sincronizare

🪙 Scoring logic

4. Punctaj

⚠️ IMPORTANT - Anti-copiere: Dacă se detectează teme copiate sau cod plagiat, se acordă 0 puncte pentru întreaga temă, indiferent de rezultatele testelor/bonusuri.

⚠️ IMPORTANT - Notare: Dacă tema nu compilează sau nu trece niciun test, tema este notată direct cu 0 puncte, nu se primeste nici bonus.

4.1 Teste automate (9p)

4.2 README (1p)

4.3 Bonus Clasament

5. Depunctări

Depunctări dacă:

Foarte important: după accept, redenumește repository-ul în formatul:

Cum redenumești pe GitHub:

1. Intră în repository
2. Click pe Settings
3. Secțiunea General → Repository name
4. Schimbă în `tema3-32XAB-Nume-Prenume`
5. Click Rename

6. Încărcare și Testare

Comenzi Make:

make              # compilează și rulează toate testele din teste/input
make build        # doar compilare
make test5        # rulează doar testul 5
make test-all     # rulează toate testele (test1-test20)

7. Exemplu Simplificat

Scenariu: Hartă 5×5, tu (Jucător 1) ești la (0,0), adversarul (Jucător 2) la (3,2), punctul final la (4,4). Hartă cu resurse, pereți și power-ups. Trebuie să ajungi la (4,4) înainte de 10 de runde.

Input
ARENA 5 5 10
0 0
3 2
4 4
MAP
0 5 W 0 10
E 3 0 W 7
0 0 J 0 0
W 2 0 4 W
0 0 F 0 0
END_MAP
STREAM
TICK 1 WAIT
TICK 2 MOVE 3 3
TICK 3 MOVE 2 3
TICK 4 MOVE 2 4
TICK 5 MOVE 1 4
TICK 6 MOVE 0 4
TICK 7 WAIT
TICK 8 WAIT
TICK 9 WAIT
TICK 10 WAIT
Output
MOVE 0 1
MOVE 0 2
MOVE 1 2
MOVE 2 2
MOVE 3 2
MOVE 3 3
MOVE 4 3
MOVE 4 4

Explicație:

8. Reguli Dueluri

8.1 Format și hartă

duel.txt
ARENA 12 21 200
0 9
0 11
11 10
MAP
0 0 0 0 W 15 0 0 E 0 E 0 E W 0 0 0 0 0 21 22
J 21 0 W 12 21 17 13 E 0 0 0 E 12 12 19 J 0 12 13 12
W 0 0 12 18 0 J 0 F E 0 E 15 17 W 0 13 0 D 14 W
18 0 F 12 21 0 J 12 W 19 22 0 0 W 12 W 0 17 W 15 0
15 21 13 0 0 J 13 17 13 16 17 J 15 0 0 0 15 W 12 18 W
0 F 0 W 14 0 18 W 0 18 0 13 0 W 16 13 0 17 16 18 17
14 0 14 15 0 13 0 14 12 13 0 19 15 15 21 12 0 12 0 13 16
0 20 22 12 22 0 W W 0 0 0 18 0 0 21 J 17 21 19 F 0
15 0 0 0 20 16 0 12 18 F F F 0 16 W J 12 19 J 21 0
13 0 16 16 0 17 W F 0 0 13 0 J 20 21 0 15 15 19 12 20
J 19 19 0 0 T 22 0 13 F E F 18 19 0 0 14 0 0 0 0
W 0 14 0 0 0 20 15 22 F 0 F 12 W 0 0 16 12 0 21 0
END_MAP
STREAM
ARENA 12 21 200
0 9        # start P1
0 11       # start P2
11 10      # FINAL_X FINAL_Y
ARENA 12 21 200
0 11       # start P1 (era P2)
0 9        # start P2 (era P1)
11 10

8.2 Ordinea mutărilor și simultaneitate

8.3 Finalul pentru un jucător

8.4 Scor și afișare

9. Tips & Checklist