X şi O este un joc pentru doi jucători, “X” respectiv “0”, care marchează pe rând câte o căsuţă dintr-un tabel cu 3 linii şi 3 coloane. Jucătorul care reuşeşte primul să marcheze 3 căsute adiacente pe orizontală, verticală sau diagonală caştigă jocul.
Schema bloc:
Initial, jucatorul selecteaza modul de joc dintre cele 3 posibile de la ultimele 3 butoane astfel:
Butonul din stanga-jos initiaza modul Jucator vs Jucator
Butonul din mijloc-jos initiaza modul Jucator vs Calculator Easy
Butonul din dreapta-jos initiaza modul Jucator vs Calculator Hard
Cei 2 jucatori sunt reprezentati sub forma ledurilor care au fie intensitate mare, fie scazuta. In cazul in care jocul ia sfarsit, se poate apasa pe butonul din mijloc pentru resetare. In cazul in care avem un castigator, toata matricea se va umple cu ledurile de tipul celor castigatoare pentru a semnala victoria.
Pentru realizarea proiectului am avut nevoie de
= 9 led-uri ( am ales de 3mm, culoare galbena )
= 9 butoane
= 3 rezistente de 100 ohmi
= 15 pini si conectori
= fire
= un display
Schema placutei:
Pentru multiplexarea ledurilor, am urmat schema:
Care a condus la …
Pentru implementarea software, m-am folosit de portul D pentru leduri, si de porturile A si B pentru butoane - care au fost initializate corespunzator. Tin 2 vectori pentru afisarea ledurilor celor 2 jucatori si o matrice cu valorile jucate.
Initial, astept apasarea unui buton din partea jucatorului pentru a-si alege modul de joc. In cazul jucator vs jucator, fiecare apasa pe butonul corespunzator ledului pe care-l doreste. Afisez matricea de leduri ( pe cele ale jucatorului cu leduri cu intensitate mare le aprind pentru un timp mai indelungat decat cele ale adversarului sau, astfel creand iluzia de intensitati diferite), o sterg si verific daca exista vreun castigator - caz in care umplu matricea cu leduri de tipul castigatorului.
Jucatorul calculator easy doar alege aleator una dintre pozitiile ramase goale, iar cel hard ruleaza un minimax pentru stabilirea celei mai bune decizii la fiecare pas.
Din pacate, nu am putut duce la bun sfarsit ceea ce mi-am propus datorita unei intamplari nefericite in urma careia mi-am ars placuta de baza ( moment in care, fireste, testarile au incetat ). Singura parte care mai ramanea de implementat era minimax-ul pentru algoritmul calculatorului Hard.
Rezultatul final arata astfel :
Realizarea acestui proiect a fost una distractiva din care am ramas cu experiente de neuitat ( macar pana cand imi dispar ranile de la arsurile letconului ). In cele din urma, desi imi pare bine ca am reusit sa realizez o buna parte din ce mi-am propus, raman cu regretul ca nu am reusit sa finalizez proiectul si sa il duc cu bine pana la capat.
Datasheet ATmega 16
http://elf.cs.pub.ro/pm/wiki/lab/lab1
http://en.wikipedia.org/wiki/Negamax
Fisierele :
xsi0.zip