Andrei-Emanuel VASILESCU - X&0 - LCD Grafic

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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.

Descriere generală

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.

Hardware Design

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

Software Design

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).

Rezultate Obţinute

Un video cu o demonstratie a proiectului: 331ca_vasilescu_andrei_emanuel_demonstratie.zip

Concluzii

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.

Download

Arhiva contine codul, Makefile si README.
331ca_vasilescu_andrei_emanuel_proiectpm.zip

Bibliografie/Resurse

pm/prj2015/avoinescu/andrei_vasilescu_x.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0