Ball in a maze

ASCII���mage 1.0.9

Introducere

Proiectul presupune implementarea unui puzzle menit sa testeze dexteritatea si abilitatile de coordonare ale jucatorului. Obiectivul este simplu: jucatorul trebuie sa manipuleze placa prin inclinari ale acesteia pe toate cele 3 axe de coordonate pentru a ghida bila prin labirint, ferindu-se in acelasi timp de obstacole. Plecand dintr-un punct de start, puzzle-ul este rezolvat atunci cand bila a ajuns in punctul de finish.

Proiectul este o reinterpretare digitala a variantei fizice. Avantajul principal al digitalizarii puzzle-ului consta in posibiliatea stocarii unui numar mare de labirinturi in memoria MCU-ului, sporind astfel fascinatia jucatorului. In acest mod, un utilizator poate economisi banii necesari achizitionarii unor noi labirinturi si va salva spatiul fizic aferent depozitarii.

Descriere generala

ball-in-a-maze-scheme.jpg

Jucatorul va actiona butonul de ON/OFF pentru a porni dispozitivul. Pe ecran se va afisa bila in punctul de start si un labirint cu grad de dificultate usor. Accelerometrul va masura unghiurile de inclinatie ale placii pe cele 2 axe de coorodnate x si y, livrand aceste date MCU-ului pentru procesare. In functie de aceste masuratori, bila va fi randata pe ecranul LCD la noua ei pozitie. In acelasi timp, unitatea de control este responsabila de randarea constanta a labirintului pentru afisarea acestuia pe ecran. In momentul in care jucatorul a adus bila in punctul de finish, pe ecran se va afisa un mesaj sugestiv(i.e. “Congratulations!”) si se va trece la urmatorul labirint cu un grad de dificultate mai ridicat. Jucatorul poate actiona oricand butonul ON/OFF pentru a opri dispozitivul, insa progresul acestuia nu va fi salvat. Dispozitivul va retine un numar limitat de labirinturi, rezolvarea ultimului labirint reprezentand finalul jocului.

Hardware Design

Lista de componente este:

  • Modul Accelerometru și Giroscop cu 3 Axe MPU6050
  • Ecran LCD 2.8” cu rezolutia de 240×320 pixeli RGB, bazat pe controllerul ILI9341
  • Translator de nivel bidirectional cu 4 canale
  • Modul stabilizator de 3.3V
  • Breadboard
  • Fire de legatura

Translatorul si modulul stabilizator sunt necesare deoarece LCD-ul opereaza la 3.3V.

Schema electrica:

Software Design

Pentru implemenatarea software am folosit Sublime Text Editor si compilatorul avr-gcc. Din punct de vedere arhitectural, software-ul este alcatuit din 3 parti distincte, fiecare contribuind la crearea unui mediu optim pentru rularea jocului:

  1. Init: La inceputul fiecarui joc, LCD-ul si accelerometrul sunt initilizati folosind functiile aferente din bibiliotecile fiecarei componente. De asemenea, sunt calculate pozitiile fiecarui perete din labirint, al punctului de start al bilei si al punctului de finish.
  2. Draw: Folosind functiile din biblioteca driverului ILI9341 pentru LCD, se vor randa pe ecran mariginile si peretii labirintului, bila in punctul de start si punctul de finish.
  3. Game physics: Accelerometrul va trimite MCU-ului constant date despre unghiul de inclinatie al acestuia pe cele 2 axe X si Y. Aceste valori sunt inmultite cu niste constante si dupa care adunate la pozitia anterioara a bilei pentru a genera noua ei pozitie in labirint pe axele specificate. Se verifica daca au loc coliziuni intre bila si obstacolele din labirint si in functie de rezultat, bila va fi randata corespunzator la noua ei pozitie.

Jocul are(deocamdata) 2 nivele de dificultate pentru un singur labirint:

  • Easy Mode - bila trebuie sa ajunga in punctul de finish
  • Hard Mode - bila trebuie sa ajunga in punctul de finish fara a atinge marginile labirintului sau vreun perete

In implementare am folosit 2 biblioteci specifice accelerometrului MPU6050, respectiv LCD-ului ILI9341, cu mici modificari personale. Link-urile de referinta se gasesc in categoria Resurse.

Rezultate Obtinute

Bila se rostogoleste uniform, fara spike-uri, chiar daca accelerometrul este miscat brusc. Coliziunile cu elementele labirintului nu “mananca pixeli”, bila ramanand pe traseu.

ball_maze_hardware.jpeg

ball_maze_start.jpeg

ball_maze_gameplay.jpeg

Demonstratie Gameplay: open

Concluzii

A fost un proiect fain deoarece am putut explora si partea de design hardware, observand interactiunea dintre componente si MCU. Cel mai challenging lucru a fost, insa, design-ul software pentru coliziuni si dinamica bilei, insa ma bucur ca am reusit sa implementez un joc functional.

Download

Bibliografie/Resurse

pm/prj2019/apredescu/ball-in-a-maze.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