Table of Contents

Snake

Autor: STIUCA Roxana-Elena

Introducere

Descriere generala

Schema bloc

Componente

Nume Numar Link
Arduino Uno 1 click
Breadboard 1 click
Modul LCD SPI 128×160 1 click
Modul bluetooth HC-05 1 click
Fire 14

Hardware Design

Conectare modul Bluetooth

Pentru conectarea acestui nodul, este nevoie sa conectam pinii GND si VCC la pinii GND si 5V de pe Arduino, precum si conectarea pinilor RX si TX la pinii TX(1), respectiv RX(0) ai Arduino.

Astfel, avem o comunicare seriala.

Din perspectiva telefonului, este nevoie de un telefon Android cu o aplicatie de tipul Bluetooth Terminal. Eu am ales aplicatia BlueDuino care permite conectarea prin Bluetooth la un device, ofera o interfata grafica cu 4 butoane (sus, jos, stanga, dreapta) care pot fi configurate a.i. la apasare sa fie trimis un String (“w”, “s”, “a”, “d”). In Arduino, tot ce trebuie facut este: myblue.read() si verificarea caracterului citit.

Conectare ecran LCD

Modulul LCD SPI 128×160 vine cu 8 pini, dintre care GND si VCC trebuie sa fie conectati la GND si 5V de pe Arduino, iar pinul LED la 3.3V.

Pentru ceilalti 5 pini, exista mai multe optiuni de conectare ce trebuie apoi specificate cand este creat obiectul LCDWIKI_SPI in cod. Eu am ales conectarea (ST7735S, 10, 9, 8, _):

Software Design

Mediul de dezvoltare

Arduino IDE

Biblioteci folosite

Stari program

Programul se afla mereu in una din urmatoarele stari: setup, READY, START, PLAY, GAMEOVER. Secventa de stari e circulara si programul poate sa treaca dintr-o stare in urmatoarea ca urmare a unui eveniment.

O descriere pe scurt a fiecarei stari:

Detalii implementare

Implementare personaj

Sarpele este implementat folosind o lista simplu inlantuita (vezi fisierele list.c/.h). Inceputul listei corespunde coordonatelor capului personajului, iar finalul corespunde coordonatelor cozii.

Pentru a face un pas, lista este parcursa si fiecare element preia coordonatele vechi ale elementelului anterior (adica blocul i din corp se va afla pe pozitia pe care anterior se afla blocul i-1), iar primul bloc (capul personajului) preia valoarea dictata de directia de mers (ex.: (x,y)→(x+1,y) daca directia este DIR_D). In timp ce lista este parcursa, se verifica si coloziunile dintre corp si cap (caz in care starea devine GAMEOVER).

Afisare

Pentru afisarea pe ecran sunt folosita functiile din bibliotecile LCDWIKI_GUI si LCDWIKI_SPI:

Pentru a nu exista un delay din cauza scrierii pe ecran, la fiecare loop prin starea PLAY este desenat doar blocul nou aparut pentru sarpe si este desenat peste blocul din sarpe ce a disparut cu culoarea fundalului.

Rezultate obtinute

In final, am obtinut un joc simpatic, functional, la care se pierde greu (zona de joc e mare si dureaza pana ajungi la o lungime destul de mare incat sa poata exista coliziuni).

Prezentare:

Ecran inceput:

Ecran joc:

Gameover:

Demo

Link Demo Youtube

Concluzii

Download

Fisiere sursa + Schematic

Jurnal

Bibliografie/Resurse