Diferență între revizuiri ale paginii „POO Tema 2”
Linia 23: | Linia 23: | ||
Se dă [ftp://hermes.arh.pub.ro/public/course/poo/tema2.zip 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. | Se dă [ftp://hermes.arh.pub.ro/public/course/poo/tema2.zip 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. | ||
Puteți implementa oricâte alte clase, dar obligatoriu trebuie să aveți clasa <code style="color: green">TicTacToeEngineImpl</code> și nu aveți voie să modificați nici una din clasele deja existente în proiect. | Puteți implementa oricâte alte clase, dar obligatoriu trebuie să aveți clasa <code style="color: green">TicTacToeEngineImpl</code> și nu aveți voie să modificați nici una din clasele deja existente în proiect. |
Versiunea de la data 25 noiembrie 2015 08:53
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 tipseriaf.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.
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:
- Dacă există o mutare prin care calculatorul (AI) câștigă, se face acea mutare.
- Dacă există o mutare prin care jucătorul va câștiga, se face acea mutare, pentru ca AI-ul să prevină pierderea jocului.
- Se va juca mutarea disponibilă care acoperă cele mai multe opțuni de pe tablă:
- centru,
- oricare din colțuri,
- 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ă.