Table of Contents

Petrişor-Alin DAMIAN (25512) - X si O pe ecran lcd

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

X si 0 este unul dintre cele mai simple si, in acelasi timp, unul din cele mai amuzante jocuri. In general jocul are ca suport fizic hartia, iar singura motivatie care apare pentru a juca acest joc este plictisul care apare in timpul unui curs.

Regurile jocului sunt simple, intr-o tabela de 3×3 fiecare din cei doi jucatori vor pune pe rand X, respectiv 0 pentru a completa o linie, o coloana sau o diagonala doar cu simboluri apartinand lui. Jocul se termina atunci cand unul din jucatori indeplineste conditiile mentionate anterior(atunci jucatorul castiga) sau cand toate casutele sunt pline(jocul se termina prin remiza).

Jocul va putea fi jucat in doi jucatori sau importiva unui AI(mai mult sau mai putin inteligent).

Descriere generală

Pentru a incepe jocul se va apasa pe un buton pentru a selecta modul de joc: contra alt jucator sau contra AI.

Pentru a selecta casuta in care va pune X, respectiv 0, fiecare jucator folosi cate un set de 5 butoane(4 pentru pozitionare si unul pentru selecatare). La terminarea jocului acesta va ajunge in stadiul in care se selecteaza modul de joc.

Schema bloc se compune din 3 module:

Hardware Design

Bill of materials

Cod Denuimre Cantitate Pret total Distribuitor
0104110000010865 Buton 6x6x6 10 20lei Optimus Digital
0104110000007407 Rezistor 0.25W 2.2KΩ 10 1leu Optimus Digital
0104110000007476 Rezistor 0.25W 1KΩ 10 1leu Optimus Digital
0104110000010032 Rezistor 0.25W 10KΩ 10 1leu Optimus Digital
0104110000003874 Set 10 fire colorate mama-mama 4 38lei Optimus Digital
0104110000008190 Modul LCD de 1.44'' (128×128 px) 1 30lei Optimus Digital

Schema electrica

Poza final cu proiectul (empty cofee cup for scale)

Software Design

Pentru dezvoltarea codului C si urcarea lui pe placuta, am folosit Programers Notepad, biblioteca WinAVR si Bootloaderul din laboratoare, iar pentru comunicarea intre diplay si placuta an folosit SPI.

Ecran de start

In ecranul de start daca se apasa un buton de pe controller-ul pentru P1 incepe un joc contra AI, daca se apasa un buton de pe controller-ul pentru P2 incepe un joc contra altui jucator.

In-game screen

Patratelul rosu corespunde lui P1, cel verde lui P2, iar cel albastru inchis - care nu se vede foarte bine :)) - corespunde cursorului de selectie.

P1 Wins

Ecranul care apara cand castiga P1

P2 Wins

Ecranul care apare cand castiga P2

Draw

Ecranul care apare in caz de egalitate

Dupa terminarea unui joc de X si 0, acesta se reinitializeaza dupa cateva secunde

Rezultate Obţinute

Jocul este complet jucabil, fara bug-uri.
Se poate juca atat contra unui AI cat si contra altui jucator.
Jocul se reinitializeara dupa terminarea unui meci.

Concluzii

In ceea ce priveste partea de hardware, un challenge a fost interfatarea display-ului cu placuta si folosirea bibliotecii pentru comunicare.
In ceea ce priveste partea de software, un challenge a fost programarea AI-ului care sa fie cat de cat inteligent - AI-ul este greedy :)) .
Jocul ofera o experienta placuta si poate fi jucat fara probleme.

Download

Codul sursa al proiectului:
damianpetrisoralin335cb_proiect.zip

Bibliografie/Resurse

Link-uri folsite:
http://cs.curs.pub.ro/wiki/pm/prj2016/
https://sourceforge.net/projects/winavr/files/
https://www.optimusdigital.ro/

Resurse utile:
1.44_spi_lcd_datasheet.pdf
st7735s_tft_controller_datasheet.pdf
lcd_library.rar