Snake

Autor: Popa Gloria-Alexandra 336CA

Introducere

  • Proiectul constă în implementarea unui joc de Snake puțin îmbunătățit pe un display LCD.
  • Permite jucătorului să interacționeze cu elementele din joc prin intermediul unor butoane.
  • Jocul consider că ar fi util pentru că este un mod bun de relaxare.

Descriere generală

  • Jocul va rula pe un display LCD, iar controlul se va realiza prin 4 butoane (sus/jos/stânga/dreapta).
  • Viteza șarpelui este reglabilă printr-un potențiometru.
  • Sistem de sunet la colectarea mâncării și game over printr-un buzzer.

Hardware Design

Listă de componente

  1. Arduino UNO
  2. Mini breadboard
  3. ECRAN LCD 1.8” SPI
  4. 4 Butoane
  5. Buzzer
  6. Potențiometru
  7. 5 Rezistențe
  8. Fire

Schemă electrică

Software Design

  1. Mediu de dezvoltare:
    1. Arduino IDE
    2. Fritzing → schema electrică
  2. Librării utilizate:
    1. stdio.h si stdlib.h → biblioteci standard
    2. string.h → pentru lucrul pe șirurile de caractere
    3. SPI.h → pentru a permite comunicarea cu LCD-ul SPI, plăcuța Arduino fiind pe post de master
    4. TFT.h → pentru a simplifica procesul de desenat pe ecran
  3. Fișiere sursă:
    1. snake.ino

Logica jocului

În primul rând, am desenat ecranul de start în care jucătorul este îndemnat să apese pe un buton pentru a începe jocul. În urma acestei acțiuni este redat fundalul și este plasată prima bucată de mâncare pe harta. De asemenea, este afișat șarpele la o poziție prestabilită (acesta începe să se miște într-o direcție determinată de care dintre butoane a fost apăsat).

Jocul se petrece într-un loop infinit, fiind resetat în momentul în care șarpele se lovește fie de un perete, fie de propriul său corp. În acel moment apare ecranul de game over și buzzer-ul scoate un sunet specific.

Logica jocului se bazează în principiu pe implementarea unei liste simplu înlănțuite, în care un nod reprezintă un pătrat care alcătuiește șarpele. La fiecare iterație, stabilesc care este noua poziție a capului în funcție de ce input este primit de la butoane. Practic, este nevoie doar să desenez capul și să șterg coada (ultimul nod din lista), restul șarpelui rămânând în poziția precedentă. Așa se păstrează dimensiunea sa constantă, iar în cazul în care crește punctajul nu se mai șterge ultimul bloc, incrementându-se astfel această dimensiune.

Punctele se acumulează pe măsură ce șarpele colectează mâncarea spawnată aleator pe harta, la o poziție diferită de a sa. Fiecare punct obținut este semnalat de către buzzer printr-un bipăit scurt.

Viteza șarpelui poate fi variată de către player cu ajutorul unui potențiometru, aspect care oferă o dinamică mai bună jocului.

Rezultate obținute


Demo

Concluzii

  • Am reușit să finalizez implementarea propusă, atât partea de software cât și cea de hardware, cea din urmă ajutându-mă să înțeleg mai bine anumite concepte care stau la bazele electronicii.
  • În mod clar proiectul ar putea fi îmbunătățit, în sensul în care este destul de dificil pentru un jucător nou să se acomodeze cu înghesuiala de pe breadboard. O mai bună organizare a componentelor în prealabil ar fi fost de ajutor în acest sens.
  • Per total, a fost o experiență foarte plăcută să am ocazia de a implementa unul din jocurile copilăriei în această manieră.

Download

Jurnal

  • alegerea proiectului
  • crearea paginii de wiki
  • cumpărarea pieselor
  • realizarea hardware-ului
  • realizarea software-ului
  • schemă electrică
  • completarea documentației
  • filmuleț demo

Bibliografie/Resurse

pm/prj2021/apredescu/snake.txt · Last modified: 2021/06/03 15:30 by gloria.popa
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