Inteligenta Artificiala

(Deadline: -)

Daca nu sunteti logati exercitiile nu se mai afiseaza.

Tema 2 - jocuri

Barem

Rezolvati problema urmatoare folosind algoritmii:

  • min-max
  • alpha-beta

Toate cerintele se rezolva intr-un singur fisier python.


Linkuri utile

Mod de punctare (punctajul e dat in procentaje din punctajul maxim al temei; procentajul maxim este 100%):

  1. (5%) Să se păstreze următoare lucruri deja implementate în exemplu (sau să se implementeze daca cineva decide să refacă programul de la zero):
    • La inceputul programului utilizatorul va fi intrebat ce algoritm doreste sa foloseasca (minimax sau alpha-beta)
    • Utilizatorul va fi întrebat cu ce simbol sa joace (la jocurile unde are sens aceasta intrebare)
    • Se va încerca evitarea sau tratarea situației în care utilizatorul ar putea răspunde greșit (de exemplu, nu poate selecta decât opțiunile corecte dintre care sunt selectate valorile default; sau, unde nu se poate așa ceva, jocul nu pornește până nu se primește un răspuns corect).
    • Afisarea a cui este rândul să mute.
    • Indicarea, la finalul jocului, a câstigatorului sau a remizei daca este cazul.
  2. (5%) Utilizatorul va fi întrebat care sa fie nivelul de dificultate a jocului (incepator, mediu, avansat). In functie de nivelul ales se va seta adancimea arborelui de mutari (cu cat nivelul ales e mai mare, cu atat adancimea trebuie sa fie mai mare ca sa fie mai precisa predictia jocului). Posibilitatea utilizatorului de a face eventuale alte setări cerute de enunț. Se va verifica dacă utilizatorul a oferit un input corect, iar dacă nu se va trata acest caz (i se poate reafișa ecranul cu setările afișând și un mesaj de atenționare cu privire la inputul greșit).
  3. (5%) Generarea starii initiale
  4. (10%) Desenarea tablei de joc (interfața grafică) si afișarea în consolă a tablei (pentru debug; în ce format vreți voi). Titlul ferestrei de joc va fi numele vostru + numele jocului.
  5. (15%) Functia de generare a mutarilor (succesorilor) + eventuala functie de testare a validitatii unei mutari (care poate fi folosita si pentru a verifica mutarea utilizatorului)
  6. (5%) Realizarea mutarii utilizatorului. Utilizatorul va realiza un eveniment în interfață pentru a muta (de exemplu, click). Va trebui verificata corectitudinea mutarilor utilizatorului: nu a facut o mutare invalida.
  7. (10%) Functia de testare a starii finale, stabilirea castigatorului și, dacă e cazul conform cerinței, calcularea scorului. Se va marca în interfața grafică configurația câștigătoare (sau simbolurile câștigătoare, în funcție de regulile jocului). Marcarea se poate face colorând, de exemplu, simbolurile sau culoare de fundal a eventualelor căsuțe în care se află.
  8. (20%=10+10) Doua moduri diferite de estimare a scorului (pentru stari care nu sunt inca finale)
  9. (15% impărtit după cum urmează) Afisari (în consolă).
    1. (5%) Afisarea timpului de gandire, dupa fiecare mutare, atat pentru calculator (deja implementat în exemplu) cat si pentru utilizator. Pentru timpul de găndire al calculatorului: afișarea la final a timpului minim, maxim, mediu și a medianei.
    2. (2%) Afișarea scorurilor (dacă jocul e cu scor), atat pentru jucator cat si pentru calculator și a estimărilor date de minimax și alpha-beta (estimarea pentru rădacina arborelui; deci cât de favorabilă e configurația pentru calculator, în urma mutării sale - nu se va afișa estimarea și când mută utilizatorul).
    3. (5%) Afișarea numărului de noduri generate (în arborele minimax, respectiv alpha-beta) la fiecare mutare. La final se va afișa numărul minim, maxim, mediu și mediana pentru numarul de noduri generat pentru fiecare mutare.
    4. (3%) Afisarea timpului final de joc (cat a rulat programul) si a numarului total de mutari atat pentru jucator cat si pentru calculator (la unele jocuri se mai poate sari peste un rand și atunci să difere numărul de mutări).
  10. (5%) La fiecare mutare utilizatorul sa poata si sa opreasca jocul daca vrea, caz in care se vor afisa toate informațiile cerute pentru finalul jocului ( scorul lui si al calculatorului,numărul minim, maxim, mediu și mediana pentru numarul de noduri generat pentru fiecare mutare, timpul final de joc și a numarului total de mutari atat pentru jucator cat si pentru calculator) Punctajul pentru calcularea efectivă a acestor date e cel de mai sus; aici se punctează strict afișarea lor în cazul cerut.
  11. (5%) Comentarii. Explicarea algoritmului de generare a mutarilor, explicarea estimarii scorului si dovedirea faptului ca ordoneaza starile cu adevarat in functie de cat de prielnice ii sunt lui MAX (nu trebuie demonstratie matematica, doar explicat clar). Explicarea pe scurt a fiecarei functii si a parametrilor.
  12. Bonus (5%) Dacă faceți mai multe estimări ale scorului dar diferite ca idee (cu alt mod de abordare a jocului).
  13. Bonus (5%). Ordonarea succesorilor înainte de expandare (bazat pe estimare) astfel încât alpha-beta să taie cât mai mult din arbore.
  14. Bonus (10%). Opțiuni în meniu (cu butoane adăugate) cu:
    • Jucator vs jucător
    • Jucător vs calculator (selectată default)
    • Calculator (cu prima funcție de estimare) vs calculator (cu a doua funcție de estimare)
  15. Bonus (5%) - propus de Andrei Cerbulescu. Cand vine randul jucatorului sa mute, sa se marcheze pe interfata grafica pozitiile valide in care poate plasa un simbol.
  16. Bonus (15%) Pentru adancimi mai mari de 3 sa se salveze arborele alphabeta si sa se plece de la ce este calculat deja pentru aflarea urmatoarei mutari a calculatorului (ca sa nu fie recalculate mutarile la urmatoarea iteratie). Practic memoram subarborele mutarii alese din arborele alpha-beta generat anterior. Apoi jucatorul face mutarea M. Cautam in subarborele salvat mutarea jucatorului si pornim de la subarborele generat deja pentru ea si il continuam pentru a afla noua mutare a calculatorului.
  17. Bonus (5%). Implementati optiunea de undo. La apasarea tastei u, se da undo ultimei mutari facute a utilizatorului. De la al doilea "undo" incolo se anuleaza mutarea calculatorului + mutarea jucatorului (practic se anuleaza mutarea jucatorului si raspunsul calculatorului).
  18. Bonus (5%). Implementati optiunea de restartare joc. La apasarea tastei r, se genereaza din nou tabla initiala, se reseteaza scorurile si alte valori ce tineau de jocul anterior.
  19. Bonus (5%) La apasarea tastei n la inceputul turn-ului jucatorului (cand jucatorul inca nu a facut vreo mutare) calculatorul isi va schimba (inlocui) mutarea cu urmatoarea cea mai buna dintre mutarile posibile. Apasari succesive ale lui n, ar afisa pe tabla pe rand de la cea mai buna mutare la cea mai slaba. Daca se apasa n si dupa cea mai slaba se reafiseaza cea mai buna (lista e luata de la inceput).
  20. Bonus (10%) Optiunile de inrerupere, salvare si continuare joc. La apasarea tastei s, starea jocului se va salva intr-un fisier text (numele fisierului va fi cerut utilizatorului - acesta poate introduce numele fie in interfata grafica fie in consola). Fisierul va fi salvat intr-un folder numit "salvari" al jocului. La intrarea in joc, utulizatorul va primi ca prima intrebare din partea programului daca vrea sa incarce un joc si i se va afisa continutul fiserului de salvari, fiecare fisier avand un numar de ordine. Utilizatorul va raspunde cu numarul de ordine si va putea continua jocul din stadiul in care l-a lasat (tabla si alti parametri se vor incarca din fisier).
  21. Bonus (1-10%) Diverse implementari deosebite, optimizari speciale.

Tema nu se puncteaza fara prezentare. Se va da o nota pe prezentare de la 1 la 10 in functie de cat de bine a stiut studentul sa explice ce a facut. Punctajul temei se va inmulti cu nota_prezentare/10. Astfel, daca cineva stie sa explice doar jumatate din ce a facut, primeste jumatate din punctaj; daca nu stie nimic primeste 0.

Temele copiate duc la anularea notei atat pentru cel care a dat tema cat si pentru cel care a copiat, iar numele studentilor cu aceasta problema vor fi comunicate profesorului titular de curs.




Omu' cu bombe

Descrierea jocului

Se va implementa un joc asemanator cu Atomic Bomberman dar mult simplificat.

Se porneste de la o hartă asemănătoare cu cea de mai jos (puteti pe langa aceasta harta sa va faceti propriile voastre harti):

tabla initiala

Harta se va citi dintr-un fișier care ar putea arăta astfel:

######################
#1    #       #      #             
# #   ###   #### #####              
# #                  #             
#    p #  p  #  ### ##             
##########           #             
# #     #   ####    ##             
#             p      #             
# #######   #######  #             
#    #  #   #p       #             
# ####  #   ### ###  #             
#    #    #         2#            
######################

Simbolurile de pe harta

Jucatorii sunt notati cu 1 si 2. Jucatorul este intrebat daca doreste sa joace cu 1 sau cu 2.

Fiecare jucator se poate deplasa doar in spatiile libere marcate cu spatiu sau intr-un loc in care se afla o "protectie", locul fiind marcat cu "p". Astfel, obstacolele (locatii in care jucatorul nu poate intra) sunt zidurile, marcate cu "#" si bombele, marcate cu "b".

Desfasurarea jocului

Jocul este turn based. Fiecare jucator la randul sau este obligat sa faca o deplasare si optional o plasare de bomba.

Fiecare jucator se poate deplasa doar in directiile sus, jos, stanga,dreapta si numai daca nu exista un obstacol (zid sau bomba) in sensul deplasarii. Protectiile sunt luate automat de jucatori cand acestia ajung intr-o locatie cu protectie. Protecția ajută jucătorul să reziste la o explozie de bomba. Jucatorul poate aduna mai multe protectii de pe harta (deci poate avea un numar np>1 de protectii, prin urmare ar putea rezista la n explozii).

In momentul deplasarii un jucator poate plasa si o bomba care va ramane in urma lui (adica in pozitia in care era inainte de deplasare). Bomba este inactiva pana o activeaza jucatorul.

Jucatorul nu poate avea în același timp mai multe bombe inactive. Dacă plasează o nouă bombă și avea deja o bombă inactivă, aceea se activează automat.

La fiecare K mutari in care nu a pus bomba (K se va citi din fișier sau utilizatorul va fi întrebat despre această valoare la început când face setările jocului), jucatorul sa fie obligat sa puna o bomba (pur si simplu lasa bomba in urma lui, fără să mai opteze el să o lase). Contorul de mutari se resetează la fiecare plasare de bombă, astfel poate pune el o bomba înainte de ajunge la K mutari fără bombă pentru a reseta contorul.

Jucatorul pierde jocul daca moare

Detaliile unei mutari

Cand vine randul unui jucător, acesta va trebui să aleagă între următoarele mutări posibile:

  1. O deplasare cu o poziție, alegând directia in care vrea sa se mute (sus/jos/stanga/dreapta). Poate alege fie prin eveniment de tastatură (incercati sa ii cereti un singur caracter, de exemplu: w,a,s,d), fie prin click pe căsuța în care vrea să se deplaseze.
  2. Fiecare mutare vine cu două acțiuni posibile (numai atunci cand e cazul): o activare bomba(daca exista), plasare bombă. Exemplu de implementare a acțiunilor:
    • pentru a activa o bombă de-a jucătorului, se face click pe ea înainte de mutare. Jucătorul nu poate activa mai mult de o bombă
    • pentru a plasa o bombă în locul în care era jucătorul, în loc să facă click stânga (mutare simplă) face click dreapta.

O bomba activă se declanseaza cand un jucator pășește în dreptul ei (pe linie sau pe coloana fara sa existe obstacole intre ea si jucator). Explozia se intinde pe toata linia si coloana pe care se afla bomba. Explozia unei bombe va declanșa și alte bombe atinse de explozia inițială. Bomba nu se declanșează dacă e activată de un jucător când el sau celălat jucător e în dreptul ei, ci doar dacă un jucător la o deplasare următoare pășește în dreptul ei (după ce a fost activată la o mutare anterioară).

O protectie inseamna ca il protejeaza pe jucator de o explozie.

Mai jos aveți un exemplu de succesiune de mutări. Mutările de mai jos sunt alese pentru a exemplifica un set cât mai mare de situații enunțate în reguli și nu ca să arate o strategie de joc (nu sunt făcute în scopul de a câștiga).

Mută primul jucătorul 1 și lasă în urma lui o bombă inactivă:

mutare 1

Din acest moment, jucătorul 1 poate activa bomba, sau dacă jucătorul 1 mai plasează o bombă, prima se va activa automat.

Mai urmează niște simple deplasări ale jucătorilor:

mutare 2
mutare 3
mutare 4

Mai jos, jucătorul 1 alege să activeze bomba (observați că a apărut o flăcăruță). Din acest moment dacă se duce în dreptul ei (de exemplu se mută la rândul următor u o căsuță în sus, moare, fiindcă nu are nicio protecție adunată).

mutare 5

La următoarea mutare, presupunând că K=3, deoarece jucătorul albastru nu a plasat nicio bombă, se plasează una automat în urma lui.

mutare 6



Hare and hounds

Se va implementa jocul hare and hounds (trad: iepure si catelusi). Conform wikipedia (linkul anterior), regulile jocului sunt urmatoarele:

  • Jocul este intre doi jucatori. Unul din ei reprezinta iepurele, celălalt reprezintă cățelușii.
  • Catelusii pornesc din partea stanga asa cum se vede in imagine, iepurele porneste din partea dreapta:
    tabla initiala
  • Catelusii muta primii.
  • Un jucator poate muta cand ii vine randul, o singura piesa facand un singur pas (peste una din liniile care leaga cele 11 locatii)
  • Catelusii se pot muta pe verticala (in sus sau in jos), pe orizontala (doar inainte), pe diagonala (doar de la stanga la dreapta). Iepurasul se poate deplasa in orice directie. Deci catelusii doar avanseaza insa iepurasul se poate muta si inapoi
  • Daca iepurasul este incoltit de catelusi atunci el pierde jocul (incoltit inseamna ca nu mai are unde sa se mute) si castiga jucatorul care juca cu catelusii.
  • Iepurasul castiga daca reuseste sa evadeze adica sa ajunga in stanga tuturor catelusilor (acestia nemaiavand cum sa il incolteasca), sau daca pe parcursul a 10 randuri de joc catelusii se muta doar pe verticala (in sus sau in jos, deci astfel nemaiavansand)

Mai jos este o succesiune de mutări:

mutare 1
mutare 2
mutare 3
mutare 4
mutare 5

Exemplu de afisare partiala a jocului (puteti alege un alt mod de afisare atat timp cat se poate intelege usor configuratia tablei din afisare):

Unde vrei sa faci mutarea (alege un nr)?
  1-4-7  
 /|\|/|\
0-2-5-8-10
 \|/|\|/
  3-6-9

Starea curenta:
  c-*-*  
 /|\|/|\
c-*-*-*-i
 \|/|\|/
  c-*-*  
Pozitie catel de mutat:

Idee pentru cazul în care nu reușiți să implementați mutarea în interfața grafică (dar punctajul va fi mai mic), utilizatorul ar raspunde cu un numar de la 1 la 10. La fiecare mutare se reafiseaza tabla de joc. De fiecare data cand e întrebat utiliatorul unde o sa mute se reafișează configurația cu numerele ca sa nu fie nevoit sa se uite mereu la inceput.

Observatie: puteti nota nodurile 0 si 10 cu -1 si 11, pentru a gasi o formula mai simpla pentru deplasarea cainilor.




Vulpea și câini

Descrierea jocului

Se va implementa o variantă a jocului (vulpea și câinii) conform regulilor de mai jos.

  • Jocul este intre doi jucatori. Unul din ei reprezinta vulpea și celălalt reprezintă câinii.
  • Jocul este turn based. Fiecare jucător mută câte o singură piesă când îi vine rândul.

  • Tabla inițială are dispunerea pieselor de mai jos (vulpea e reprezentată de piesa roșie și câinii de piesele negre):
    tabla initiala
  • Vulpea mută prima.
  • Ambele tipuri de piese se mută doar pe diagonală cu câte o poziție. Vulpea poate să se mute în oricare dintre cele 4 direcții în diagonală. Câinii se pot muta doar pe diagonală în jos.
  • Scopul vulpii este să ajungă pe linia 0 a tablei de joc (într-una dintre pozițiile inițiale ale câinilor). Scopul câinilor este să blocheze vulpea (vulpea să nu mai aibă mutări disponibile).

Mai jos aveți ca exemplu o secvență de mutări:

Vulpea poate muta și înapoi, așa cum se vede mai jos:

mutare 11

Un exemplu de tablă finală în care a câștigat vulpea:

tablă finala în care a câștigat vulpea

Un exemplu de tablă finală în care au câștigat câinii:

tablă finala în care au câștigat câinii



Jocul Ming Mang

Descrierea jocului

Se va implementa jocul Ming Mang.

Utilizatorului i se vor oferi la alegere 3 variante de tablă: 7x7, 8x8, 9X9.

Jocul este pentru doi jucători și este turn based. Un jucător va folosi piese albe, celălalt negre. Jucătorul cu piese negre este cel care mută primul.

Se folosesc piese rotunde. Piesele albe se pun pe prima coloană și ultima linie (mai puțin ultimul element din ultima linie). Piesele negre se pun pe prima linie (mai puțin primul element din prima linie) și ultima coloană. Tabla inițială arată precum ce de mai jos:

tabla initiala

Regulile și desfășurarea jocului

Fiecare jucător mută câte o singură piesă când îi vine rândul.

Nu există o regulă referitoare la cine mută primul, așadar utilizatorul va fi întrebat, după ce a ales tipul de piese cu care dorește să joace, și dacă dorește să fie primul care mută.

Piesele se pot muta doar pe linie sau pe coloană (nu și pe diagonală) oricâte poziții (cu condiția ca în niciuna dintre celulele din grid peste care au trecut să nu fi fost o altă piesă. Cu alte cuvinte, o piesă nu poate sări peste alte piese.

Jucătorul nu poate face o mutare care duce jocul la o configurație anterioară (de exemplu nu poate muta o piesă cu o poziție în stânga și când îi vine rândul să mute înapoi cu o poziție în dreapta)

Scopul jocului e de a captura piesele adversarului. Un jucător poate captura una sau mai multe piese ale adversarului dacă:

  • șirul de piese ale adversarului sunt vecine pe linie sau coloană (fără spații între ele), toate aflate pe aceeași linie sau coloană
  • piesa plasată e la capătul șirului de piese adversare
  • în capătul celălalt al șirului de piese adversare se află o altă piesă a jucatorului care vrea să captureze

Cu alte cuvinte, în urma mutării, șirul de piese adversare trebuie sa fie între doua piese ale jucătorului și să nu existe niciun spațiu între toate aceste piese.

În urma capturării, piesele adversare sunt înlocuite cu piese ale jucătorului care le-a capturat (putem considera că piesele "schimbă tabăra").

Jocul se termină când vine rândul unui jucător și acesta nu mai are mutări disponibile, fie pentru că a rămas fără piese, fie pentru că sunt toate blocate. Jucătorul care nu poate să mute pierde, iar celălalt automat câștigă.

Mai jos aveți ca exemplu o secvență de mutări:

mutare 1

De exemplu, dacă am vrea să mutăm în acest moment piesa de pe (linia 2, coloana 0), nu am putea să o mutăm decât pe (linia 2, coloana 1), toate celelalte poziții fiind blocate de piesa neagră de pe (linia 2, coloana 2).

Alegem să mutăm piesa de pe (linia 7, coloana 3) pe (linia 2, coloana 3).

mutare 2

Jucătorul cu piese negre, mută de la (linia 0, coloana 4) la (linia 2, coloana 4), astfel piesa albă de la (linia 2, coloana 3) este între două piese negre și, deci, capturată (culoarea ei se va schimba în negru).

mutare 3

Jucătorul cu piese albe mută de la (linia 1, coloana 0) la (linia 1, coloana 2).

mutare 4

Jucătorul cu piese negre acum mută de la (linia 2, coloana 3) la (linia 7, coloana 3), cucerind astfel cele 3 piese albe de jos (marcate în imagine).

mutare 5

Se pot captura și 2 sau 3 seturi de piese dintr-o singură mutare, de exemplu pentru tabla de mai jos, dacă jucătorul cu piese negre mută de la (linia 2, coloana 3) la (linia 4, coloana 3) va captura piese albe în 3 direcții.

inainte captura

Iată rezultatul după mutare:

dupa captura



Alquerque

Descrierea jocului

Se va implementa jocul (alquerque) conform regulilor de mai jos (regulile inițiale ale jocului combinate cu o parte dintre cele propuse de R. C. Bell. Mai puteți găsi explicații și aici.

  • Jocul este intre doi jucatori. Unul din ei folosește piese albe și celălalt piese negre.
  • Tabla inițială are dispunerea pieselor de mai jos:
    tabla initiala
  • Nu există o regulă referitoare la cine mută primul, așadar utilizatorul va fi întrebat, după ce a ales tipul de piese cu care dorește să joace, și dacă dorește să fie primul care mută
  • Piesele se pot deplasa către o poziție conectată, imediat vecină (nu se trece printr-o altă poziție pentru a ajunge la ea), în orice direcție (pe verticală, orizontală sau diagonală). O poziție e conectată cu altă poziție dacă pe tabla de joc există o linie între ele.
  • Un jucător poate captura piesele celuilalt jucător sărind peste ele. Pentru a putea sări peste o piesă adversară, aceasta trebuie să fie pe o poziție conectată vecină cu piesa jucătorului care dorește să captureze. De asemenea, în aceeași direcție (în linie dreaptă, trasată pe tabla de joc, după piesa adversară) să se găsească o poziție liberă (în care va sări piesa jucătorului care capturează). După săritura, piesa peste care s-a sărit va fi luată de pe tabla de joc. Capturările se pot face și în lanț, dacă după capturarea unei piese există o altă piesă relativă la noua poziție a piesei care a sărit, îndeplinind condițiile de capturare.
  • Capturarea este obligatorie (jucătorul nu poate refuza să captureze o piesă adversară atunci când e disponibilă) și trebuie să le captureze în lanț până nu mai are piese disponibile de capturat în lanțul respectiv. În felul asta se pot dezvolta strategii de a aduce o piesă intr-un alt loc dorit de jucătorul adversar, forțând-o să se miște prin oferirea unei piese spre capturare
  • Dacă jucătorul care ar fi putut captura nu face asta, piesa cu care ar fi putut captura este luată de pe tablă ca penalizare (în principiu se va implementa asta pentru jucătorul utilizator, calculatorul respectând mereu regulile)
  • Când un jucător are mai multe posibilități de a realiza o capturare trebuie să aleagă doar una (nu e penalizat atâta timp căt realizeaza o capturare și la finalul ei piesa cu care a făcut capturarea nu mai are piese disponibile pentru a sări peste ele. Dacă are astfel de piese, trebuie să termine lanțul de capturări
  • Fiecare jucător mută o singură piesă când îi vine rândul
  • Un jucător câștigă în următoarele situații:
    • fie adversarul a rămas fără piese
    • fie adversarul nu are mutări disponibile când îi vine rândul

Mai jos aveți un exemplu de succesiune de mutări. Mutările de mai jos sunt alese pentru a exemplifica un set cât mai mare de situații enunțate în reguli și nu ca să arate o strategie de joc (nu sunt făcute în scopul de a câștiga). Salturile sunt ilustrate prin săgeți, iar pozițiile anterioare ale saltului, cât și piesele capturate sunt marcate cu piese transparente:

În acest moment jucătorul cu piese albe poate face un salt dublu:

mutare 9



Dame

Se va implementa jocul dame. Conform wikipedia (linkul anterior), regulile jocului sunt urmatoarele:

  • Jocul este intre doi jucatori. Unul din ei joaca cu alb, celalalt cu negru.
  • Tabla de joc este un grid de dimensiune 8X8. Consideram liniile numerotate de la 0 la 7 si coloanele de la a la h. Piesele sunt pozitionate ca in imagine:

    tabla initiala

    Observație: tabla initiala nu trebuie citita din fisier, deoarece are mereu aceeasi forma; se poate genera prin program.

  • Piesele se deplaseaza pe diagonala (doar pe patratelele intunecate de pe grid)
  • Un jucator poate pune o singura piesa (de culoarea cu care a ales sa joace) cand ii vine randul, intr-o locatie libera pe tabla.
  • Jucatorul cu piese negre muta primul.
  • Un jucator J poate pozitiona o piesa P fie cu o pozitie mai departe pe diagonala (in jos pentru alb si in sus pentru negru) fie capturand o piesa a celuilalt jucator (ca sa captureze o piesa, trebuie ca aceasta sa fie vecina pe diagonala cu piesa P si sa aiba o casuta libera pe diagonala, dupa ea. Se pot realiza oricate capturari succesive (insa trebuie facute toate capturarile posibile din acea secventa, cu alte cuvinte să nu rămână nicio piesă care mai poate fi capturată de piesa mutată, după ce a făcut ultimul salt).Atenție! atunci când există posibilitatea de capturare a unei piese, aceasta e obligatorie (în felul acesta se pot dezvolta strategii care, prin obligarea celuilalt jucător de a captura o piesă, acesta să ajungă într-o situație nefavorabilă; de exemplu să piardă protecția asupra unor piese proprii.
  • Daca o piesa ajunge in randul din capatul opus, devine "rege". Un jucător poate avea oricâți regi (în limita pieselor disponibile). Regii se supun acelorasi reguli, dar se pot deplasa si pe diagonala in spate (atat in pasii simpli cat si in capturare), nu doar inainte ca piesele simple. Încoronarea unei piese ca rege termină o mutare (nu se mai poate deplasa imediat după încoronare indiferent dacă a fost în urma unei mutări obișnuite sau al unui salt).
  • Daca un jucator nu poate plasa nicio piesa, sau si-a pierdut toate piesele, pierde jocul, adversarul devenind castigatorul.

Exemplu de afisare a tablei inițiale în consolă (puteti alege un alt mod de afisare atat timp cat se poate intelege usor configuratia tablei din afisare). Simbolul # este folosit pentru locatii libere, a si n pentru piesele albe si negre. Regii pot fi notati cu A pentru piesele albe si cu N pentru piesele negre.

   a b c d e f g h
   ---------------
0 |# a # a # a # a
1 |a # a # a # a #
2 |# a # a # a # a
3 |a # a # a # a #
4 |# # # # # # # #
5 |n # n # n # n #
6 |# n # n # n # n
7 |n # n # n # n #

În cazul în care nu reușiți să implementați mutarea în interfața grafică, utilizatorul ar putea răspunde în consolă cu un numar de la 0 la 7 si o litera de la a la h (linia si coloana) pentru fiecare mutare (dar punctajul alocat pe temă va fi mai mic).

Ma jos aveți un exemplu de succesiune de mutări. Mutările de mai jos sunt alese pentru a exemplifica un set cât mai mare de situații enunțate în reguli și nu ca să arate o strategie de joc (nu sunt făcute în scopul de a câștiga).

mutare 1
mutare 2

Observăm că mutarea de mai sus l-a obligat pe jucătorul cu piese negre să captureze piesa albă, chiar dacă asta îl duce în final la a-și pierde propria piesă în următoarea mutare.

mutare 3

acum jucătorul cu piese albe e de asemenea obligat să captureze piesa neagră, dar are mai multe variante de a muta.

mutare 4

Afișăm alte câteva mutări în continuare:

mutare 5
mutare 6
mutare 7
mutare 8
mutare 9

După ultima mutare, piesa albă din stânga-sus nu trebuie să captureze piesa neagră fiindcă nu e în sensul ei de deplasare.

Mai afișăm o succesiune de mutări până când o piesă albă devine rege:

mutare 10
mutare 11
mutare 12

Mai sus, piesa albă a ajuns în capăt și a devenit rege. Acum se poate deplasa în orice direcție pe diagonală, nu doar în sus. Încă nu e obligată să cucerească piesa neagră de lânga ea fiindcă încoronarea piesei termină mutarea anterioară. Abia când îi vine din nou rândul, dacă piesa neagră din dreapta-jos mai e disponibilă o va putea cuceri.

Încă o mutare a jucătorului cu piese negre:

mutare 13

Acum piesa albă care e rege este obligată să cucerească ambele piese de pe diagonală dinspre dreapta-jos (trebuie ca la finalul lanțului de capturări să nu mai aiba nicio piesă pe care o poate captura în continuarea lanțului). Jucătorul cu piese albe va cuceri piesele chiar dacă asta îl duce apoi la pierderea piesei-rege

mutare 14

Acum piesa neagră e obligata prin reguli să cucerească piesa albă care e rege:

mutare 15



Jocul Go

Descrierea jocului

Se va implementa jocul Go.

Tabla inițială arată precum ce de mai jos:

mutare 1

Utilizatorului i se vor oferi la alegere 3 variante de tablă: 7x7, 9X9, 10X10.

Jocul este turn based. Se folosesc piese rotunde care se pun la intersecțiile liniilor care formează gridul (doar intersecțiile din interior, nu și cele de pe margine). Un jucător va folosi piese albe, celălalt negre. Jucătorul cu piese negre este cel care mută primul.

Regulile și desfășurarea jocului

După amplasarea unei piese, în cazul în care unul dintre jucători are o zonă de piese complet înconjurate de piesele celuilalt jucător (fără spații goale) atunci jucătorul cu piesele înconjurate va pierde acele piese (celălalt le capturează). Un set de piese de aceeași culoare este înconjurat dacă piesele sunt dispuse astfel încât orice piesă să fie vecină pe linie sau coloană cu minim o altă piesă din set, și în plus, la granița setului de piese să nu existe nicio piesă care să aibă un loc liber pe linie sau coloană.

Mai jos aveți ca exemplu o secvență de mutări:

mutare 1
mutare 2
mutare 3
mutare 4
mutare 5
mutare 6
mutare 7
mutare 8

Jucătorul cu piesele negre mai plasează o piesă cu ajutorul căreia a înconjurat acum o piesă albă (care apare în imaginea de jos ca fiind transparentă) deci poate fi capturată:

mutare 9

Atenție însă la pozițiile libere. De exemplu, setul de piese albe de mai jos nu poate fi considerat capturat încă de piesele negre, deoarece există locul liber din stânga-jos:

[piese care nu pot fi capturate inca]

Atenție, în Go este interzisă "sinuciderea", adică plasarea unei piese care ar duce la capturarea pieselor jucătorului care a mutat. În exemplul din imaginea de mai sus, jucătorul cu piesele albe nu are voie să mute în locul liber fiindcă va pierde piesele.

Când un set de piese se află pe margine pot în continuare să fie capturate (marginea matricii nu se consideră spațiu liber). De exemplu, piesele negre de mai jos:

[piese capturate pe margine]

Uneori putem avea un "conflict" în capturare. De exemplu plasând o piesă un jucător ar închide atât piesele proprii cât și ale adversarului. În acel moment vor fi capturate de fapt piesele adversarului. De exemplu, în imaginea de mai jos dacă plasăm o piesă neagră în locul liber, marcat cu piesa transparentă, nu va fi "sinucidere, ci se va captura grupul de 2 piese albe, înconjurat:

[piese în captură ambiguă]

Mutările nu sunt obligatorii. Un jucător poate refuza mutarea. Puteți implementa asta fie cu ajutorul unui buton în interfață grafică, fie se poate refuza mutarea prin apăsarea unei taste.

În plus, în implementarea noastră vom mai considera că jocul se termină după K mutări, unde K e ales de utilizator (puteți să oferiți mai multe butoane pentru K, de exemplu, valorile 50, 100, 200). Evident dacă ambii jucători refuză să mute înainte de s-au făcut cele K mutări, jocul tot se termină.

Scorul

Pentru calcularea scorului vom folosi o variantă simplificată (nu cea oficială). Vom număra zonele libere care sun complet înconjurate de un jucător (observație: într-un joc real de Go, astfel de zone pot fi încă ambigue și adversarul mai poate ocupa din teritoriu). O zonă de spații libere este considerată înconjurată dacă granița ei e formată doar din piese de o singură culoare sau de marginea tablei. În cazul în care zona liberă atinge marginea tablei, mărginirea trebuie să fie făcută de o singura latură a tablei. Dacă mărginirea e făcută inclusiv de un colț de tablă, se consideră zona închisă doar dacă acel colț are ca vecin minim un spațiu liber. De exemplu, în imaginea de mai jos, niciuna din zonele continue de spații libere nu s-ar aduna la scorul jucătorului cu piese albe. Colțul din triunghiul mic are doi vecini liberi deci nu mărginește zona:

[scor]

Totuși dacă am avea o piesă in plus în triunghiul mic, zona mică mărginită de alb s-ar aduna la scorul albului:

[scor]

La spațiile libere înconjurate de fiecare jucător se vor aduna și piesele fiecărui jucător aflate încă pe tablă, obținându-se scorul final (de exemplu, mai sus negru ar avea scorul 0 și alb scorul 6).

Observație: modul de calculare a scorului impus de temă nu este cel oficial!




Jocul Dots & boxes

Se va implementa jocul https://en.wikipedia.org/wiki/Dots_and_Boxes. Conform wikipedia, regulile jocului sunt urmatoarele:

  • Sunt doi jucatori (x si 0). Jocul foloseste un grid de puncte, de n randuri si m coloane. Numarul de randuri si coloane va fi dat in constructorul jocului (puteti sa le hardcodati sau sa le cititi dintr-un fisier de setari). Jocul este bazat pe ture. Gridul initial arata asa (pentru un exemplu de 5 linii si 6 coloane).
    tabla initiala dots
  • Atunci cand e momentul sa actioneze unui jucator, jucatorul uneste doua puncte adiacente cu un segment, orientat pe rand sau pe coloana. Daca segmentul desenat, formeaza impreuna cu alte 3 segmente un patratel (patratelul poate fi doar de latura 1, deci sa nu contina niciun punct pe parcursul laturii, ci sa cuprinda doar punctele din capetele fiecarei laturi). Pe fiecare patratel astfel format se va trece simbolul jucatorului care a adaugat ultimul segment din patratel. De exemplu, in imaginile de mai jos am considerat mutarile lui x marcate cu rosu si mutarile lui 0 marcate cu albastru (mutarea e marcat doar in momentul imediat realizarii ei, deoarece, pentru o linie aflata pe grid nu mai influenteaza mai tarziu cu nimic cine a pus-o.
    mutare dots
    mutare dots
    mutare dots
    mutare dots
    mutare dots
    mutare dots
  • Dintr-o linie se pot cuceri doua patratele in acelasi timp. Asa cum se vede mai jos, jucatorul 0 reuseste sa ia doua patratele dintr-o mutare (pentru ca jucatorul x a binevoit sa faca mutari aiurea de dragul exemplului si chiar jura cu naduf ca nu joaca asa de prost de obicei). Apoi 0 ar mai avea voie sa faca o mutare fiindca a cucerit patratele
    mutare dots
    mutare dots
    mutare dots
    mutare dots
    mutare dots
  • Jocul se termina cand nu se mai pot face mutari. Castiga jucatorul cu mai multe patratele cucerite.



    Jocul Adugo (cainii si jaguarul)

    Se va implementa jocul https://en.wikipedia.org/wiki/Adugo. Conform wikipedia, regulile jocului sunt urmatoarele:

    • Sunt doi jucatori (unul controleaza cainii si celalalt jaguarul). Jocul foloseste o tabla de joc de forma celei din imaginea de mai jos. Jocul este bazat pe ture. Jaguarul are o singura piesa si cainii 14:
      tabla initiala adugo
    • Jaguarul muta primul
    • Cainii si jaguarul se pot deplasa doar pe liniile marcate pe tabla, cate un singur pas (adica se muta dintr-o intersectie de linii in alta intersectie de linii, fara a trece printr-o a treia intersectie de linii). Intersectiile de linii sunt singurele locuri valide pe care se poate gasi o piesa. Iata mai jos un exemplu de mutari succesive:
    • Jaguarul are o mutare in plus: poate captura caini. Pentru asta trebuie sa aiba un caine in imediata vecinatate a lui. Jaguarul poate sari peste caine, capturandu-l, dar asta numai daca:
      • cainele e pe o pozitie vecina cu pozitia jaguarului
      • pe directia cainelui, imediat dupa caine exista un loc valid liber, in care jaguarul va ajunge sarind peste caine
      Mai jos vedeti un exemplu de captura posibila. E marcat prin piesa neagra transparenta locul in care ar putea sari jaguarul.
      captura adugo
    • Se pot captura mai multi caini, in lant, daca conditiile de capturare sunt indeplinite dupa fiecare salt anterior din lant. Un lant de capturi reprezinta o singura mutare din partea jaguarului. Exemplu:
      captura multipla adugo
    • Cainii castiga daca au inconjurat jaguarul (acesta nu mai are mutari posibile). Iata 2 exemple de incoltire mai jos:
      jaguar incoltit
      jaguar incoltit
    • Jaguarul castiga dupa ce a capturat cel putin 5 caini (deoarece, din acel moment cainii nu mai au cum sa inconjoare jaguarul si sa castige).



    Jocul Hex

    Se va implementa jocul https://en.wikipedia.org/wiki/Hex_(board_game). Conform wikipedia, regulile jocului sunt urmatoarele:

    • Sunt doi jucatori (in imagini notati cu rosu si albastru). Jocul foloseste o grila de hexagoane, in forma de romb, cu numar egal de randuri si elemente pe un rand (de obicei e de 11 randuri fiecare de lungime 11). Numarul de randuri si de elemente pe rand va fi dat in constructorul jocului (puteti sa le hardcodati sau sa le cititi dintr-un fisier de setari). Jocul este bazat pe ture. Gridul initial arata asa:
      tabla initiala hex
    • Unul din jucatori va avea alocata directia stanga-dreapta, si celalalt directia sus-jos.
    • Atunci cand e momentul sa actioneze unui jucator, jucatorul plaseaza o piesa pe un spatiu gol de pe tabla de joc (vom ilustra acest lucru in desen, colorand spatiul respectiv cu culoarea jucatorului). In imaginile de mai jos presupunem ca albastru are directia stanga-dreapta si rosu directia sus-jos.
    • Jocul se termina cand unul dintre jucatori a realizat o punte de piese de culoarea lui unind capetele tablei de joc pe directia alocata lui. Exemplu de configuratie castigatoare (sirul castigator de piese e marcat cu contur ingrosat):
      tabla finala hex
    • Toate cele 4 colturi apartin ambilor jucatori (adica oricare jucator isi poate termina puntea in oricare dintre colturi.

    Observatie: se poate implementa si cu urmatoarea variatie: jucatorii pornesc dintr-un capat al directiei alocate, si nu pot plasa decat piese conectate intre ele (nu se poate pozitiona o piesa pe o anumita pozitie daca nu exista o piesa de aceeasi culoare pe o pozitie vecina).

    Dacă aveți dificultăți cu desenarea tablei cu celule hexagonale, puteți opta să faceți celulele pătratice. De exemplu, tablele de mai jos ar fi echivalente:

    tabla finala hex
    tabla finala hex



    Jocul Hap! (Chomp!)

    Pentru cei iubitori de ciocolata...

    Se va implementa jocul http://www.papg.com/show?3AEA cu regulile scrise mai jos. Observatie: Vom discuta o varianta generalizata. Pot fi mai multe patratele otravite. In plus, patratelele "otravite" pot fi oriunde pe grid si jucatorii pot lua o bucata dreptunghiulara orientata oricum (pe linie sau coloana), astfel incat sa nu lase patratele in aer (care sa nu mai fie conectate de bucata initiala, in urma ruperii dreptunghiului).

    Conform site-ului oferit, regulile jocului sunt urmatoarele:

    • Sunt doi jucatori (in imagini notati cu rosu si albastru). Jocul foloseste o grila dreptunghiulara de n randuri si m coloane. Grila reprezinta o bucata de ciocolata (impartita in patratele din care cateva sunt otravite) din care doi jucatori flamanzi rup bucati dreptunghiulare. Numarul de randuri si de coloane va fi dat in constructorul jocului (puteti sa le hardcodati sau sa le cititi dintr-un fisier de setari). Jocul este bazat pe ture. Gridul initial arata asa (in cazul de fata avem doua patratele otravite marcate cu X). :
      tabla initiala chomp
    • La fiecare pas un jucator rupe o bucata dreptunghiulara astfel incat sa nu lase nicio patratica in aer (neconectata), dar nici sa nu ia vreo bucatica otravita. De exemplu, mutarea de mai jos e invalida deoarece raman patratele albe neconectate intre ele (partile din stanga si dreapta bandei rosii):
      mutare ilegala chomp
    • Pierde jucatorul care nu mai poate decupa o bucata dreptunghiulara fara sa desparta placa de ciocolata in doua, ori sa ia o bucatica otravita
    • Aveti mai jos o succesiune de mutari. In final rosu castiga fiind ultimul care a mutat, iar albastru nemaiavand mutari valide fara a lua patratica otravita:



    Jocul Quoridor

    Se va implementa jocul https://en.wikipedia.org/wiki/Quoridor cu regulile scrise mai jos:

    • Vom implementa cazul cu doi jucatori (in imagini notati cu rosu si albastru). Jocul foloseste o grila patratica de dimensiune 9x9. Jocul este bazat pe ture. In cazul a doi jucatori, jucatorii sunt plasati pe laturi opuse ale grilei, avand cate un pion in mijlocul primului rand dinspre latura jucatorului. Gridul initial arata asa:
      tabla initiala quoridor
    • Jucatorii pot realiza o actiune la alegere dintre urmatoarele doua (nu se pot face ambele tipuri de actiuni, la o singura tura):
      • Mutarea unui pion. Pionii pot fi mutati pe rand sau pe coloana, insa nu si pe diagonala, si doar in casute vecine (mutarea va fie doar de un pas). In plus un pion nu poate fi mutat intr-o casuta vecina, daca un perete il separa de acea casuta. Un pion in caz ca e blocat de alt pion, il poate sari (tot doar pe rand si coloana) ajungand in casuta imediat urmatoare de dupa pionul adversar, pe directia de deplasare. Totusi saritura nu paote avea loc daca in calea respectiva exista un perete. De asemenea (pe cazul cu mai multi jucatori), nu se poate sari peste mai mult de un pion. In cazul in care saltul in linie dreapta este blocat, saltul se poate face pe orice alta casuta adicenta pionului peste care dorim sa sarim, asa cum se vede in imaginile de mai jos:
        Saritura peste pionul adversar in linie dreapta se poate face in orice situatie.
        saritura quoridor
        Saritura peste pionul adversar in casutele vecine pionului, in afara de cea in linie dreapta se fac doar in cazul unui obstacol.
        saritura quoridor cu obstacol
      • Plasarea unui perete (peretii sunt marcati cu verde in desene). Peretii sunt de lungime 2 (unde unitatea de masura este egala cu latura unui patratel din grila). Peretii se plaseaza intre celule de asa natura incat sa se intinda exact intre doua perechi de celule (astfel incat zidul sa inceapa si sa se termine la un capat de latura de celula, nu pe parcursul laturii ei). De asemenea, un perete nu poate fi plasat daca taie orice clae ramasa a celuilalt jucator de a ajunge in latura opusa laturii de unde a pornit (deci nu e voie sa fie blocat jucatorul, scopul e sa i se lungeasca drumul cat mai mult). Peretii odata ce sunt plasati, nu mai pot fi mutati.
      • Numarul de pereti este limitat. Pentru 2 jucatori, numarul de pereti disbonibili fiecarui jucator este egal cu 10
    • Castiga jucatorul care a ajuns primul pe latura opusa celei de pe care a pornit.

    Aveti si un exemplu de implementare online




    Jocul amazoanelor

    Descrierea jocului

    Se va implementa jocul amazoanelor (Game of the amazons).

    Jocul este turn based. Un jucător va folosi piese albe, celălalt negre. Jucătorul cu piese negre este cel care mută primul.

    Jocul se joacă pe tabla de joc stil tablă de șah dar de dimensiune 10X10, și piesele sunt inițial puse ca în imaginea de mai jos:

    tabla initiala

    Regulile și desfășurarea jocului

    Jucătorul cu piese albe mută primul.

    O mutare are două acțiuni:

    1. mutarea unei piese pe tablă oricâte poziții în linie dreaptă, pe rând, coloană sau diagonală (în stilul reginei de la sah), dar numai cu condiția să nu fie alte piese pe acel traseu (piesa nu poate sări alte piese).
    2. Lansarea unei "săgeți" care de asemenea poate merge în linie dreaptă pe rând, coloană sau diagonală însă fără a trece printr-o celulă cu o altă piesă în ea. În locul în care a ajuns săgeata se plasează o piesă specială (în imagine e marcat cu un x).

    Vom considera liniile și coloanele numerotate de la 0 până la 9 inclusiv.

    De exemplu, în imaginea de mai jos, a mutat jucătorul cu piese albe, piesa de la (linia 9, coloana 6) la (linia 4, coloana 6) (deci s-a mutat pe coloană). Săgeata a fost trasă la (linia 4, coloana 9) (deci a fost trasă pe linie).

    mutare 1

    Mai departe mută jucătorul cu piese negre de pe (linia 3, coloana 9) pe (linia 3, coloana 6). Săgeata este trasă pe diagonală la (linia 5, coloana 8). De exemplu, jucătorul cu piese negre nu ar fi putut să tragă săgeata pe coloană în jos, fiindcă era o piesă albă acolo.

    mutare 2

    Jucătorul cu piese albe a mutat de la (linia 9, coloana 3) la (linia 1, coloana 3) și a tras săgeata la (linia 3, coloana 5).

    mutare 3

    Mai jos e o succesiune de mutări:

    mutare 4
    mutare 5
    mutare 6
    mutare 7
    mutare 8
    mutare 9
    mutare 10

    Observăm că în urma ultimei mutări de sus, piesa albă de la (linia 5, coloana 9) este blocată (nu se mai poate deplasa). Jocul nu e pierdut pentru alb fiindcă mai are piese disponibile.

    Terminarea jocului

    Jocul se termină când unul dintre jucători nu mai are mutări, caz în care jucătorul respectiv pierde, iar adversarul său câștigă. De exemplu, în tabla de mai jos, ar fi rândul jucătorului cu piese albe, dar nicio piesă nu mai are un loc liber în care să se mute. Prin urmare, a câștigat jucătorul cu piese negre.

    Exemplu de stare finală:

    tabla finală

    Țintar (moară; eng: nine men's morris)

    Descrierea jocului

    Se va implementa jocul țintar (moară).

    Tabla inițială arată precum ce de mai jos:

    tabla initiala

    Regulile și desfășurarea jocului

    sunt 2 jucători. Jocul este turn based

    Fiecare jucător are 9 piese.

    Mutările jocului sunt de 3 feluri:

    1. La începutul jocului (când jucătorii nu și-au plasat încă toate piesele), când vine rândul unui jucător acesta plasează o piesă oriunde pe tablă.
    2. Dacă unul dintre jucători a reușit să formeze o "moară" (fie prin punerea unei piese noi; fie prin mutarea uneia deja existente), adică să aibă 3 piese în linie dreaptă pe poziții adiacente (astfel de linii drepte pot fi orientate și pe orizontală și pe verticală), atunci are dreptul de a elimina o piesă de pe tablă a celuilalt jucător. Totuși, nu se pot elimina piese care se află într-o configurație de moară decât dacă nu mai există alte piese pe tablă (piesele din moară sunt protejate și se elimină ultimele). O piesă eliminată nu se mai poate întoarce pe tablă.
    3. După ce au fost puse pe tablă toate piesele (atenție asta nu înseamnă că fiecare jucător are la acest moment 9 piese pe tablă, fiindcă, poate, unele au fost eliminate), jucătorii pot muta, când le vine rândul, câte o singură piesă într-un nod adiacent poziției piesei.
    4. După ce un jucător rămâne doar cu 3 piese pe tablă, le poate muta nerestricționat de legături (în orice poziție liberă de pe tablă).

    Putem observa mai jos o secvență de mutări:

    mutare 1
    mutare 2
    mutare 3
    mutare 4
    mutare 5
    mutare 6
    mutare 7

    Observăm că jucătorul cu piese albe a format o moară, așadar poate acum să ia de pe tablă o piesă a celuilalt jucător. De exemplu, ia piesa (care e marcată ca transparentă în imaginea de mai jos) din colțul pătrățelului mic din centru.

    mutare 7b

    Terminarea jocului

    Un jucător pierde dacă rămâne doar cu două piese pe tablă sau nu mai are mutări posibile. Prin urmare, în această situație, celălalt câștigă.


    Twelve men's morris

    Descrierea jocului

    Se va implementa o variație a jocului twelve men's morris.

    Tabla inițială arată precum ce de mai jos:

    tabla initiala

    Regulile și desfășurarea jocului

    Sunt 2 jucători. Jocul este turn based

    Fiecare jucător are 12 piese.

    Mutările jocului sunt de 3 feluri:

    1. Când vine rândul unui jucător acesta are două variante: ori plasează o piesă oriunde pe tablă (dacă nu a plasat deja 12 piese) ori mută o piesă dintre cele existente (nu e nevoie sa termine de plasat toate cele 12 piese înainte, așa cum e regula în alte variante; poate muta oricând piese).
    2. Dacă unul dintre jucători a reușit să formeze o "moară" (fie prin punerea unei piese noi; fie prin mutarea uneia deja existente), adică să aibă 3 piese în linie dreaptă pe poziții adiacente (astfel de linii drepte pot fi orientate și pe orizontală, pe verticală, pe diagonală), atunci are dreptul de a elimina o piesă de pe tablă a celuilalt jucător. Totuși, nu se pot elimina piese care se află într-o configurație de moară decât dacă nu mai există alte piese pe tablă (piesele din moară sunt protejate și se elimină ultimele). O piesă eliminată nu se mai poate întoarce pe tablă.
    3. Atunci când un jucător mută o piesă există o restricție: dacă în mutarea sa imediat anterioară a mutat exact aceeași piesă, nu o poate muta în locul vechi. Totuși, poate muta piesa în acel loc începând cu rândul său următor (restricția e pentru a evita refacerea unei mori în continuu pe aceeași poziție, dând un avantaj prea mare jucătorului cu o astfel de configurație).

    Putem observa mai jos o secvență de mutări:

    mutare 1
    mutare 2
    mutare 3
    mutare 4
    mutare 5
    mutare 6
    mutare 7
    mutare 8

    Obervați că au fost și amplasări de piese, dar și mutări ale celor existente. Conform regulilor, piesele pot fi mutate chiar și înainte de punerea celor 12 piese, așa cum s-a întâmplat cu piesa albă care s-a deplasat în colțul din stânga-sus al pătratului mic:

    mutare 9

    Observăm că jucătorul cu piese albe a format o moară, așadar poate acum să ia de pe tablă o piesă a celuilalt jucător. De exemplu, ia piesa (care e marcată ca transparentă în imaginea de mai jos).

    mutare 9b

    Mutarea de mai jos e invalidă deoarece ar aduce aceeași piesă în locul imediat anterior:

    mutare invalida

    Touși aceasta mutare s-ar putea face mai târziu dupa ce se amplasează minim o piesă sau se mută altă piesă.

    Terminarea jocului

    Un jucător pierde dacă rămâne doar cu două piese pe tablă sau nu mai are mutări posibile. Prin urmare, în această situație, celălalt câștigă.





    Vulpi și oi

    Descrierea jocului

    Se va implementa o variantă a jocului (vulpi și oi) conform regulilor de mai jos. Varianta aceasta mai poartă numele de Halatafl.

    • Jocul este intre doi jucatori. Unul din ei reprezinta vulpile și celălalt reprezintă oile.
    • Tabla inițială are dispunerea pieselor de mai jos (vulpile sunt reprezentate de piese roșii si oile de piese albe):
      tabla-initiala
    • Scopul oilor este să ajungă să umple pătrățelul de sus (de 3x3=9 locații). Dacă jucătorul cu oile reușește acest lucru, atunci câștigă.
    • Nu există o regulă referitoare la cine mută primul, așadar utilizatorul va fi întrebat, după ce a ales tipul de piese cu care dorește să joace, și dacă dorește să fie primul care mută
    • Oile se pot muta doar în sus (pe coloană și diagonală) și în lateral (stânga sau dreapta) numai către o poziție conectată, imediat vecină (nu se trece printr-o altă poziție pentru a ajunge la ea). O poziție e conectată cu altă poziție dacă pe tabla de joc există o linie între ele.
    • Vulpile se pot deplasa către o poziție conectată, imediat vecină, în orice direcție. Vulpile pot captura oi sărind peste ele. Pentru a putea sări peste o oaie, aceasta trebuie să fie pe o poziție conectată vecină cu o vulpe, și în aceeași direcție (în linie dreaptă, trasată pe tabla de joc, după ea) să se găsească o poziție liberă (în care va sări vulpea). După săritura, piesa corespunzătoare oii va fi luată de pe tabla de joc. Capturările se pot face și în lanț, dacă după capturarea unei piese există o altă piesă relativă la noua poziție a vulpii, îndeplinind condițiile de capturare. Capturarea este obligatorie (vulpea nu poate refuza să captureze oile) și trebuie să le captureze în lanț până nu mai are oi disponibile în lanțul respectiv. în felul asta se pot dezvolta strategii de a înlătura vulpea dintr-un loc dorit de oi (de exemplu, să scoată vulpea din pătrățelul de sus.
    • Fiecare jucător mută o singură piesă când îi vine rândul.
    • Jocul se termină în următoarele situații:
      • oile umplu pătrățelul de sus, caz în care câștigă oile
      • vulpile capturează oi până când acestea ajung să fie mai puține de 9.

    Mai jos aveți un exemplu de succesiune de mutări. Mutările de mai jos sunt alese pentru a exemplifica un set cât mai mare de situații enunțate în reguli și nu ca să arate o strategie de joc (nu sunt făcute în scopul de a câștiga). Am presupus că s-a decis să mute întâi jucătorul cu oile.

    În acest moment jucătorul cu vulpile e obligat să captureze piese (fiindcă sunt disponibile). Are de ales între a captura ori piesa din dreapta ori cea din stânga, care i-ar mai da opțiunea de a captura o piesă în lanț. Alege piesa din stânga (ceea ce îl obligă să cucerească și a doua piesă din lanț). Pozițiile succesive ale vulpii și piesele capturate sunt marcate cu piese transparente:

    mutare 8

    Tabla după capturarea pieselor și următoarea mutare a jucătorului cu oile:

    mutare 9

    Exemplu de stare finală în care au câștigat oile:

    stare finala; oi căstigătoare

    Exemplu de stare finală în care au câștigat vulpile (au rămas doar 8 oi):

    stare finala; vulpi căstigătoare




    Vulpi și gâște

    Descrierea jocului

    Se va implementa o variantă a jocului (vulpi și gâște) conform regulilor de mai jos. Mai puteți găsi explicații și aici.

    • Jocul este intre doi jucatori. Unul din ei reprezinta vulpile și celălalt reprezintă gâștele.
    • Tabla inițială are dispunerea pieselor de mai jos (vulpile sunt reprezentate de piese roșii si gâștele de piese albe):
      tabla initiala
    • Gâștele mută primele
    • Atât gâștele cât și vulpea se pot deplasa către o poziție conectată, imediat vecină (nu se trece printr-o altă poziție pentru a ajunge la ea), în orice direcție (pe verticală, orizontală sau diagonală). O poziție e conectată cu altă poziție dacă pe tabla de joc există o linie între ele.
    • Vulpea poate captura gâște sărind peste ele. Pentru a putea sări peste o gâscă, aceasta trebuie să fie pe o poziție conectată vecină cu o vulpe, și în aceeași direcție (în linie dreaptă, trasată pe tabla de joc, după ea) să se găsească o poziție liberă (în care va sări vulpea). După săritura, piesa corespunzătoare gâștei va fi luată de pe tabla de joc. Capturările se pot face și în lanț, dacă după capturarea unei piese există o altă piesă relativă la noua poziție a vulpii, îndeplinind condițiile de capturare. Mutarea pentru a captura este opțională (spre deosebire de alte variante); vulpea poate opta să nu mute pentru a captura o piesă și doar să se deplaseze obișnuit într-o locație vecină liberă.
    • Fiecare jucător mută o singură piesă când îi vine rândul (jucătorul cu gâștele nu poate muta decât o singură gâscă, cu un singur pas când îi vine rândul).
    • Gâștele nu pot captura piese.
    • Jocul se termină în următoarele situații:
      • gâștele au înconjurat vulpea astfel încât să nu mai poată muta (dacă vine rândul vulpii să mute și nu poate, atunci jucătorul cu vulpea a pierdut)
      • vulpea a capturat suficiente gâște cât să nu mai poată fi înconjurată (gâștele să fie mai puține de 4).

    Mai jos aveți un exemplu de succesiune de mutări. Mutările de mai jos sunt alese pentru a exemplifica un set cât mai mare de situații enunțate în reguli și nu ca să arate o strategie de joc (nu sunt făcute în scopul de a câștiga).

    În acest moment jucătorul cu vulpea poate să captureze piese în lanț. Pozițiile succesive ale vulpii și piesele capturate sunt marcate cu piese transparente:

    mutare 6

    Tabla după capturarea pieselor și următoarea mutare a jucătorului cu gâștele:

    mutare 7

    Exemplu de stare finală în care au câștigat gâștele (vulpea nu mai are unde să mute):

    stare finala; gâște căstigătoare

    Exemplu de stare finală în care a câștigat vulpea (au rămas doar 3 gâște):

    stare finala; vulpe căstigătoare