Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul meu consta in proiectarea si implementarea jocului X&0 pe un LCD grafic, iar interactiunea cu jocul se va permite prin butoane.
Scopul proiectului este ca, in stadiu final, sa permita jocul intre un utilizator uman si CPU, jocul fiind interactiv si amuzant.
Ideea de la care am pornit se bazeaza pe ultimul laborator, in care am interactionat cu jocul cu bila si pad-uri, care m-a atras cel mai mult dintre toate laboratoarele.
Miscarea in cadrul matricei 3×3 se va efectua prin intermediul a patru butoane (arrow keys), iar alegerea unei casute pentru plasarea unui caracter va fi facuta prin intermediul unui buton OK. In momentul in care cursorul se afla pe o celula din matrice, acesta va fi marcat prin ingrosarea celulei respective, iar la apasare pe OK, se va afisa caracterul 'X' sau caracterul '0', in functie de jucator. Jocul se termina atunci cand o linie, coloana sau diagonala din matrice sunt completate cu acelasi simbol.
Lista de piese
1. Perfboard
2. LCD: HY-1.8 SPI TFT
3. Push button: 5 bucati → up, down, right, left, ok
4. Fire, legaturi si pini
Schema electrica
Am scris codul folosind Sublime Text pe Windows 7, 64 biţi, in mediul WinAVR.
Pentru a încărca orice fișier .hex prin HIDBootFlash pe microcontroller, este necesar să se țină apăsat pe butonul RESET, apoi pe BTN concomitent. Dand drumul la RESET, iar apoi la BTN, dispozitivul este gata sa incarce codul.
LCD-ul si butoanele sunt puse pe perfboard si au forma unei console. Butoanele sunt conectate de placa de baza la PORTA, iar LCD-ul este conectat la PORTB. Conectorii sunt fire de legatura mama-mama.
Tabla de joc este reprezentata prin noua celule; fiecare celula este caracterizata de o coordonata x, o coordonata y, latime si inaltime (pentru pozitionare in cadrul LCD-ului) si un simbol cu care va fi completata. Lipsa unui simbol este marcata prin 0. Exista un cursor care marcheaza celula curenta, obtinut prin ingrosarea patratului celulei curente.
Programul trece prin diferite stari. Fiecare jucator muta la un moment dat si se analizeaza dupa fiecare mutare daca jocul s-a terminat (remiza, castig sau pierdere). La mutare invalida, fundalul celulei respective devine rosu. La castig, secventa care a generat castigul este marcata cu verde. Programul poate suporta oricate jocuri pana la iesire. Se poate iesi oricand apasand de doua ori pe butonul OK.
Am implementat partea grafica a jocului cu algoritmul Bressenham, iar CPU muta dupa un algoritm matematic, asemanator cu algoritmul Minimax (AI-ul incearca sa minimizeze scorul jucatorului HUMAN, incercand in acelasi timp sa-si maximizeze scorul).
Un video cu o demonstratie a proiectului: 331ca_vasilescu_andrei_emanuel_demonstratie.zip
Sunt foarte multumit de rezultatul obtinut si de faptul ca am pornit de la placa de baza si am ajuns sa interactionez cu jocul X&0 prin LCD.
De asemenea, ma bucur ca dificultatea jocului este avansata, intrucat AI-ul isi plaseaza simbolul conform unui algoritm matematic.
Arhiva contine codul, Makefile si README.
331ca_vasilescu_andrei_emanuel_proiectpm.zip