LCD Endless Runner

  • Student: Tănăsescu Robert-Andrei
  • Grupa: 336CC
  • Adresa de e-mail contact: robert.tanasescu@stud.acs.upb.ro

Introducere

Ce face proiectul ?

Proiectul implementează un joc de tip Endless Runner, unde jucătorul trebuie să se ferească de obstacole pentru a putea avansa. Din punctul de vedere al controlului, player-ul poate efectua următoarele acțiuni :

  • mutare pe rândul de sus
  • mutare pe rândul de jos
  • atac (anumite obstacole pot fi distruse)

Jocul va fi afișat pe un LCD 2 linii x 16 coloane și va avea trei metode independente de control :

  • joystick
  • telecomandă IR
  • butoane

Player-ul se va afla mereu pe prima coloană și va avea posibilitatea să-și schimbe linia, practic vor exista două lane-uri TOP si BOT. Pentru a oferi și alt tip de feedback înafară de cel vizual, proiectul implementează și generarea de sunete folosind un buzzer.
Pentru a face experiența mai intuitivă, se vor folosi 3 LED-uri conectate unul lângă celălalt și vor fi aprinse atâtea câte vieți mai are player-ul și pe dotMatrix se va aprinde un led pentru fiecare obstacol distrus, iar în momentul când matricea “se umple” aceasta se resetează iar player-ul primește o viață în plus (dacă numărul de vieți < 3) sau un bonus la scor (dacă numărul de vieți == 3). În momentul în care jucătorul are 0 vieți rămase, jocul se oprește, afișează “GAME OVER” și scorul obținut.

Scopul proiectului

Scopul proiectului este să ofere o modalitate de recreere a unui individ și să trezească spiritul competitiv din orice jucător.

Ideea de la care s-a pornit

Ca și sursă de inspirație am avut jocul cu dinozaurul din Google Chrome. Am pornit de la ideea de a crea un joc pe un ecran LCD și am ajuns la concluzia că un joc asemnănător cu cel din Google Chrome este alegerea perfectă deoarece spațiul de pe LCD este suficient pentru acest tip de joc.

Utilitatea proiectului

Consider că proiectul este util deoarece învât cum se realizează legătura dintre componente hardware și software când vine vorba de un joc video. În plus, acest joc testează viteza de reacție , coordonarea și consider că acest tip de joc dacă este făcut cum trebuie, nu poate deveni plictisitor și stârnește ambiția unui om de a avansa cât mai mult.

Descriere generală

Schema bloc

Hardware Design

Lista de componente este :

  • Arduino Uno R3
  • Cabluri Tată-Tată
  • Cabluri Tată-Mamă
  • Breadboard
  • Buzzer
  • LED-uri
  • LCD 2 linii x 16 coloane I2C
  • Joystick
  • Rezistori
  • Butoane
  • Senzor IR
  • Telecomanda IR
  • DotMatrix 8×8

Schema electrică

Software Design

În ceea ce privește implementarea software a proiectului, am gândit proiectul ca având 3 stări posibile :

  • Starea 1 , starea inițială în care afișez o animație de boot pe LCD (un ecran de loading, practic) după care afișez mesajul “Press any key to start!” si astept input din partea player-ului.
  • Starea 2 , în care se desfășoară jocul efectiv, aici jucătorul are control complet și poate utiliza oricare dintre cele 3 metode de input
  • Starea 3 , în care apare ecranul de “GAME OVER” și este afișat scorul obținut de player. În această stare dacă se apasă unul dintre cele 3 butoane sau se mișcă joystick-ul, jocul va reporni și practic ajungem în starea 2.

Codul proiectului se află în fișierul lcd_runner.ino. În antetul fișierului am definit pinii pentru fiecare componentă legată la Arduino și am definit câteva variabile globale.

Biblioteci utilizate

În acest proiect au fost utilizate 4 biblioteci externe :

  • Ledcontrol.h (pentru a controla DotMatrix-ul 8×8)
  • IRremote.h (pentru a utiliza receiver-ul IR)
  • NewTone.h (pentru a controla buzzer-ul pasiv)
  • LiquidCrystal_I2C.h (pentru a controla LCD-ul I2C)

Descriere logistică

În funcția setup setez modurile pentru fiecare pini utilizați și inițializez LCD-ul, Dotmatrix-ul și array-urile pentru obstacole.
În funcția loop avem jocul efectiv, și pentru a face diferența dintre cele 3 stări ale jocului folosim un flag numit GAME_OVER care are următoarea semnificație :

  • dacă este -1 înseamnă că suntem în partea de loading a jocului
  • dacă este 0 înseamnă că suntem în jocul efectiv
  • dacă este 1 înseamnă că suntem în ecranul de GAME OVER

În ansamblu, în funcția loop tratez coliziunile dintre player și obstacole, distrugerea, generarea și desenarea pe LCD a obstacolelor, desenarea player-ului.

Reguli joc

În ceea ce privește regulile jocului acestea sunt următoarele :

  • dacă jucătorul se ciocnește de un obstacol acesta pierde o viață, în momentul când nu mai are nicio viață este GAME OVER
  • dacă se umple o linie de pe DOTMATRIX jucătorul mai primește o viață (dacă numărul de vieți este mai mic ca 3), altfel dacă numărul de vieți este 3 primește un bonus la scor
  • jucătorul poate distruge doar obstacolele care au forma ”#”, cele care au forma ”[” nu pot fi distruse

Rezultate Obținute

Concluzii

În concluzie, consider că acest proiect m-a ajutat să descopăr și să experimentez legătura dintre hardware și software, văzând mai în detaliu cum trebuie implementate anumite aspecte ale unui controller, de exemplu (joystick și butoane) și ale unui joc. În plus, fiind un proiect fizic, am putut să pun în aplicare noțiunile învățate la laborator.

Download

Jurnal

25/05/2021 - Adaugare README și update cod arduino
22/05/2021 - Update cod arduino
20/05/2021 - Upload videoclip Youtube și finalizare documentație

Bibliografie/Resurse

pm/prj2021/dbrigalda/lcdrunner.txt · Last modified: 2021/05/26 07:19 by robert.tanasescu
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