POO Tema 2

De la WikiLabs
Jump to navigationJump to search

Realizați un AI pentru o implementare a jocului "X și 0" care să nu piardă.

Cerințe

Implementați o clasă, numită seriaf.poo.tema2.engine.TicTacToeEngineImpl (atenție la numele pachetului), ce trebuie să implementeze interfața TicTacToeEngine, pentru a completa funcționalitatea jocului, astfel:

  • Constructorul clasei TicTacTieEngineImpl trebuie să nu aibă argumente;
  • Metoda makeMove aruncă java.lang.IllegalArgumentException dacă valoarea primită ca argument este în afara intervalului 0-8 sau dacă pe poziția respectivă există deja un X sau 0;
  • Metoda makeMove întoarce un obiect de tip seriaf.poo.tema1.engine.GameStatus care conține informații legate de starea jocului de după efectuarea mutării:
    • mutarea calculatorului;
    • fanion care semnalează un joc câștigat de către jucător;
    • fanion care semnalează un joc pierdut de către jucător;
    • fanion care semnalează o remiză;

Tabla de joc este numerotată în felul următor:

-------------
| 0 | 1 | 2 |
-------------
| 3 | 4 | 5 |
-------------
| 6 | 7 | 8 |
-------------

Se dă următorul proiect Netbeans pentru dezvoltare. Acesta conține clase care pot fi utilizate pentru testarea voastră, inclusiv conține toate testele care se rulează și pe Web-CAT. Pentru a le rula, selectați Run->Test Project.

Update: Proiectul a fost actualizat pe 25 noiembrie, ora 10:53. Daca aveti o versiune mai veche, este recomandat să-l descărcați din nou.

Update: Proiectul a fost actualizat pe 25 noiembrie, ora 11:08. Daca aveti o versiune mai veche, este recomandat să-l descărcați din nou.

Puteți implementa oricâte alte clase, dar obligatoriu trebuie să aveți clasa TicTacToeEngineImpl și nu aveți voie să modificați nici una din clasele deja existente în proiect.

Link pentru upload Web-Cat, aici.

Jucatorul (X) mută întotdeauna primul.

Algoritm

O eventuală variantă de algoritm, pe care voi o puteți îmbunătăți, este următoarea:

  1. Dacă există o mutare prin care calculatorul (AI) câștigă, se face acea mutare.
  2. Dacă există o mutare prin care jucătorul va câștiga, se face acea mutare, pentru ca AI-ul să prevină pierderea jocului.
  3. Se va juca mutarea disponibilă care acoperă cele mai multe opțuni de pe tablă:
    1. centru,
    2. oricare din colțuri,
    3. oricare din variantele rămase.

Acest algoritm nu este perfect, există jocuri prin care AI-ul pierde, dar acest algoritm va trece toate testele pentru notă.