Snake Game

  • Nume: Dabelea Ioana-Viviana
  • Grupa: 333CB

Introducere

Proiectul meu, Snake Game, se bazeaza pe un joc clasic și distractiv în care jucătorul controlează un șarpe și încearcă să mănânce cât mai multe bucăți de hrană pentru a crește lungimea șarpelui său. Scopul jocului este să eviți să te lovești de propriul tău corp, în timp ce încerci să obții un scor cât mai mare posibil.

Ideea mea a pornit de la dorința de a recrea o experiență clasică de joc într-un mod simplu și distractiv, care să amintească de nostalgica eră a jocurilor arcade. Astfel, utilizatorul poate sa ia o pauza de la viata agitata de zi cu zi si sa se relaxeze.

Descriere generală

Proiectul meu este dezvoltat pe o placuta Arduino UNO, avand ca si interfata grafica o matrice LED de 8*8.

Utilizatorul are control total cu ajutorul unui joystick, permițându-i să mute șarpele în orice direcție dorește: în jos, în sus, la stânga sau la dreapta. Un aspect interesant este că șarpele poate traversa marginile matricei, reapărând în câmpul vizual pe aceeași linie sau coloană, în funcție de direcția sa.

În timpul jocului, o melodie simplă, specifică jocurilor arcade, însoțește acțiunea. De fiecare dată când șarpele mănâncă o bucată de hrană, se aude un sunet caracteristic.

În cazul în care utilizatorul pierde, LED-urile se aprind secvențial până când întreaga matrice este acoperită, iar în fundal se aude o melodie.

Hardware Design

Lista piese
  • Placa de Dezvoltare Compatibila cu Arduino UNO R3 (ATmega328p + ATmega16u2)
  • Breadboard HQ
  • MAX7219 LED Dot Matrix Module
  • Joystick
  • SD Card Reader
  • Buzzer
Schema circuit:

Schem electrica:

Software Design

Mediu de Dezvolate: Arduino IDE

Biblioteci Utilizate

  • SD.h: Pentru interacțiunea cu cardul SD.
  • TMRpcm.h: Pentru redarea fișierelor audio de pe cardul SD.
  • SPI.h: Protocol de comunicație pentru cardul SD.
  • LedControl.h: Controlul afișajului LED de tip matrice.

Descriere Implementare

Implementarea jocului a fost facuta in mai multi pasi:

  • am creat structura sarpelui (doi vectori care contin coordonatele cozii pe OX si OY si doua variabile )
  • am gandit modul de deplasare al sarpelui, folosindu-ma de directa capului
  • am randomizat locul unde apare “mancarea”, pentru a creste dificultatea jocului
  • cu ajutorul unui card SD am pastrat intr-un fisier date despre sesiunea de joc curenta (scor, timp, numar de schimbari de directie)

Funcții de Setup

  • setup(): Funcția principală de setup care configurează pini, afișajul LED, poziția inițială a șarpelui și a mâncării.
  • setupSnakePosition(): Setează poziția inițială a șarpelui random.
  • setupFoodPosition(): Setează poziția mâncării într-o locație
  • setupLedBoard(): Configurează afișajul LED.
  • setupSpeaker(): Configurează modulul de sunet și verifică cardul SD.
  • setupPins(): Configurează pinul joystick-ului.

Funcții de Control al Jocului

  • playGameOverSong(): Redă sunetul specific când jocul s-a terminat.
  • playFoodEatenSong(): Redă sunetul specific când șarpele mănâncă mâncarea.
  • startGame(): Funcția principală care gestionează logica jocului, inclusiv verificarea coliziunilor, actualizarea direcției șarpelui, gestionarea mâncării și actualizarea afișajului.
  • manageGameOver(): Verifică dacă șarpele s-a ciocnit cu propria coadă.
  • manageSnakeOutOfBounds(): Asigură că șarpele revine pe partea opusă a afișajului dacă iese din limite.
  • manageSnakeTailCoordinates(): Actualizează coordonatele cozii șarpelui.
  • manageEatenFood(): Verifică dacă șarpele a mâncat mâncarea și actualizează scorul și dimensiunea șarpelui.
  • setJoystickDirection(): Setează direcția șarpelui pe baza input-ului de la joystick.
  • changeSnakeDirection(): Modifică direcția șarpelui pe baza valorii setate de joystick.
  • showGameOverScreen(): Afișează ecranul de game over și resetează variabilele de joc.
  • resetVariables(): Resetează variabilele jocului la valorile inițiale.
  • showLed() și hideLed(): Aprinde sau stinge un LED specific de pe afișaj.
  • drawSnake(): Desenează șarpele și mâncarea pe afișajul LED.
  • writeGameStatistic(): Scrie in fisierul de pe cardul SD detalii despre sesiunea de joc.

Rezultate Obţinute

Concluzii

Download

soon..

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

pm/prj2024/avaduva/ioana.dabelea.txt · Last modified: 2024/05/27 16:51 by ioana.dabelea
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