Ionuţ BACIU (78667) - Fancy snake

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul presupune implementarea unui joc Snake cu un twist: implementarea are ca scop dezvoltarea a mai multor nivele cu grade diferite de dificultate, powerup-uri specifice care pot fi benefice pentru jucător sau nu și un set de vieți. Utilizatorul va putea selecta modul de joc (clasic - jocul original sau fancy - pe nivele). Suplimentar, jocul va avea diferite sunete în funcție de evenimentul întâmpinat (acțiunea din joc, de exemplu eat, gain powerup, death, game lost etc.).

Proiectul este folosit doar în scopuri recreaționale. În funcție de ideile care pot veni pe parcursul dezvoltării, acesta pot diferi din punct de vedere al experienței utilizatorului.

Motivul temei proiectului: folosirea LCD-ului grafic și îmbinarea noțiunilor din teoria jocurilor plus cele dobândite în urma laboratoarelor.

Descriere generală

Hardware Design

Denumire Număr
Plăcuță de bază 1
Buzzer 1
Butoane 6
Microcontroller ATmega 324 1
Display LCD SPI ILI9163 1

Software Design

<fc #000080>Proiectul a fost realizat în C++ (datorită fișierelor pentru LCD-ul SPI ILI9163)</fc>

<fc #00FF00>Surse:</fc>

  1. digitalpin - folder pentru pinii LCD-ului
  2. ili9166 - folder cu funcșiile LCD-ului
  3. spi - folder pentru SPI

Sursele luate pentru LCD au fost luate de la următoarea adresă: spi

<fc #00FF00>Biblioteci folosite:</fc>

  1. DigitalPin.h (din folderul digitalpin) - pentru pini
  2. ili9163.h (din folderul ili9163) - pentru lcd
  3. font5x8.h (din folderul ili9163) - permite lcd-ului afișarea de caractere
  4. colors.h (din folderul ili9163) - un set de culori folosite în implementare
  5. spi_lib.h (din folderul spi) - pentru inițializarea LCD-ului prin SPI
  6. defines.h - string-uri și int-uri folosite
  7. config.h - configurările necesare pentru inițializarea LCD-ului
  8. song.h - cântecul pe buzzer
  9. main.h - funcțiile folosite în main
  10. Importurile din main.cpp: avr/io.h, util/delay.h, avr/interrupt.h, stdlib.h și string.h

<fc #00FF00>Funcții:</fc>

  1. void init_buttons(void) - inițializarea butoanelor și a led-ului de pe placă
  2. void play(int32_t note, uint32_t len) - funcție pentru redarea unei note
  3. void set_lcd(void) - setarea meniului pe lcd
  4. void about_menu(void) - setarea meniului “About” pe lcd
  5. void display_score(void) - desenarea meniului de scor la terminarea jocului.
  6. void move_square(void) - deplasarea cursorului la apăsarea unui dintre butoanele sus sau jos (PA1 sau PA2)
  7. void init_game(void) - inițializarea datelor pentru joc (lcd-ul, valorile pentru scor, hartă etc.)
  8. void draw_snake_start(void) - desenarea șarpelui în poziția de start
  9. void add_food(int place, int type) - adăugarea unui element de tipul food
  10. int check_for_score(void) - verificare dacă s-a făcut coliziunea cu un element de tipul food
  11. void check_for_collision(void) - verificare coliziuni cu propria coadă
  12. void change_direction(void) - schimbarea de direcție la apăsarea unuia dintre butoanele stânga, jos, sus, dreapta (PA0, PA1, PA2 sau PA3)
  13. void change_game_settings(void) - modificările suferinte la powerup-uri (pentru jocul Advanced)
  14. void draw_snake(void) - desenarea șarpelui la momentul curent pe LCD
  15. void change_tail(void) - resetare coordonate coadă
  16. void move(int type) - mutarea în funcție de tipul de joc
  17. void play_game(int type) - funcția de joc
  18. int main(void) - main-ul
  19. ISR(TIMER0_OVF_vect) - întrerupere pentru buzzer
  20. ISR(PCINT0_vect) - întrerupere pentru butoane, realizată doar pentru ecranul principal

<fc #00FF00>Structuri:</fc>

  1. structura de tipul Food oferă detalii pentru “mâncarea” șarpelui, detaliile fiind coordonatele x, y și tipul
  2. un enum pentru tipul de joc și al ecranului curent (pentru opțiunile meniului)

Rezultate Obţinute

Rezultatul final a fost realizarea jocului clasic Snake cu mai multe tipuri de joc după cum urmează Small - dimensiunea nu se modifică și nu există powerup-uri Classic - jocul clasic de Snake Advanced - powerup-uri (+1p/5p/-5p scor cu +0/+1 dimensiune și resetarea la dimensiunea inițială)

La pornirea proiectului, LCD-ul va arăta meniul principal care conține cele 3 tipuri de joc plus meniul Advanced unde se găsesc detalii despre powerup-uri. Deasemenea există și un cursor care poate fi mutat sus-jos pentru a selecta unul dintre cele patru meniuri. Selectul se va face cu butonul de pe PA0, jos cu PA1 și sus cu PA2. Din meniul de abput se iese apăsând Back, adică butonul PA3.

Jocul se desfășoară apăsând pe cele 4 butoane (PA0, PA1, PA2, PA3). Scorul este înmulțit cu 10 față de valoarea sa reală.

Din meniul de final, cel se scor, se iese apăsând pe butonul PA0 și se revine la meniul principal.

Concluzii

În cocluzie, proiectul realizează un joc de tipul Snake, cu moduri de joc diferinte, care presupune și redarea unei melodii atâta timp cât utilizatorul se află în meniul principal.

Download

Jurnal

  1. 22 aprilie - introducere + descriere generală + componente
  2. 7 mai - schema proiectului
  3. 15 mai - adăugarea codului pentru LCD
  4. 17 mai - terminarea jocului folosind delay-uri
  5. 18 mai - adăugarea întreruperilor pentru buzzer și butoane
  6. 20 mai - terminarea documentului de prezentare al proiectului + modificări

Bibliografie/Resurse

  1. Datasheet microcontroler - doc8272.pdf
  2. Datasheet LCD - ILI9163.pdf
  3. Biblioteca pentru SPI LCD - spi

Documentația PDF

* Documentația în format PDF

pm/prj2018/imatesica/ionut.baciu.txt · Last modified: 2021/04/14 17:07 (external edit)
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