Mi-am propus sa fac un joc de X si 0 de dimensiune 5×5, cu afisaj pe un LCD Nokia 3310.
Jocul implica existenta a doi jucatori, unul uman, celalalt fiind calculatorul. Pentru ca unul dintre cei doi sa castige, trebuie ca pe o linie/coloana/diagonala sa existe doar simbolul corespunzator acelui jucator ('x' sau '0'). Pe LCD vom observa evolutia jocului.
Ideea realizarii acestui proiect a pornit de la clasicul joc X si 0 de 3×3 patrate. M-am gandit ca e unul dintre jocurile clasice si ca ar fi amuzant sa il complic putin.
Scopul proiectului meu e sa demonstrez ca un joc simplu poate fi complicat (prin marirea dimensiunii) si ca poate fi implementat de oricine are la dispozitie o placuta de baza si un LCD.
Utilitate: In urma realizarii acestui proiect voi stapani mai bine tehnicile de programare ale unui microcontroller si ale unui LCD, ceea ce ma va ajuta in viitor.
Vor fi 2 jucatori:
Schema bloc este urmatoarea:
Voi folosi cele 25 de butoane pentru jucatorul uman. Prin apasarea unui buton se selecteaza casuta in care simbolul asociat acestuia va fi pus (simbolul poate fi fie X fie 0).
Pentru interactiunea cu utilizatorul voi folosi interfata seriala RS232.
De asemenea, evolutia jocului va putea fi observata pe LCD. In momentul in care unul dintre jucatori castiga, se afiseaza pe LCD jucator_alfa a castigat!, unde alfa este 1 pentru om si 0 pentru calculator.
Componente:
Schema placii de baza este urmatoarea:
Pentru cuplarea LCD-ului voi folosi schema din laboratorul 1 de PM:
Partea de software a acestui proiect va fi realizata in limbajul C folosind WinAvr.
Jocul propriu zis va fi construit dupa urmatoarii pasi:
Jocul incepe atunci cand ansamblul este conectat la un calculator real. Pentru a determina care jucator incepe (omul sau calculatorul) voi folosi o variabila generata random. Apoi jocul debuteaza. Intotdeauna, primul jucator va fi asociat cu simbolul 'x'.
Pentru comunicatia cu LCD-ul, voi folosi functiile din laboratorul 1 de PM:
void LCD_init(); // Initializare modul LCD. // Trebuie apelata inainte de a se face orice operatie cu LCD-ul. // Initializarea este facuta considerand o interfatare pe 4 fire. void LCD_writeInstruction(unsigned char _instruction); // Trimite o instructiune catre l. void LCD_writeData(unsigned char _data); // Trimite date catre LCD pentru afisare. void LCD_write(unsigned char _byte); // Trimite un byte catre LCD pe pinii D4-7 in 2 timpi. // Se trimit intai bitii mai semnificativi si apoi cei mai putin semnificativi. void LCD_waitNotBusy(); // Functia asteapta pana cand lcd-ul devine disponibil pt o noua comanda. void LCD_print(char* _msg); // Afiseaza imformatia pe LCD (doar 1 linie, primele 16 caractere din msg) void LCD_print2(char* _msg1, char* _msg2); // Afisare pe 2 lini pe LCD. // Pe prima linie afiseaza _msg1 si pe a 2-a _msg2. void LCD_printDecimal2u(unsigned int _n); // Afisare numar in baza 10 pe LCD void LCD_printHexa(unsigned int _n); // Afisare numar in baza 16 pe LCD void LCD_waitInstructions(unsigned char _instructions); // Asteapta un numar de cicli de ceas
In constructie.
Voi publica aceste concluzii dupa ce voi termina de implementat proiectul.