Table of Contents

Sokoban 10

*Autor*: NECULAI Andreea

Introducere

Sokoban (倉庫番, Sōko-ban) este un joc puzzle, creat în 1980. Scopul acestui joc este să transporți câteva obiecte printr-un labirint astfel încât toate obiectele să ajungă pe zonele marcate. Obiectele, de obicei cutii, pot fi împinse de jucător, una câte una(jucătorul nu poate împinge două sau mai multe cutii odată). Pentru a putea fi mișcată, o cutie trebuie să aibă spațiu liber deasupra, dedesubt, stânga sau dreapta. Cutia se poate deplasa pe orizontală sau pe verticală.

Descriere generală

Modul de joc este simplu. Jucătorul seletează dacă începe jocul apăsând pe joystick. Fiecare nivel este contra timp(60 de secunde de la începerea nivelului). La terminarea timpului, se va afișa un mesaj prin care jucătorul este anunțat că a pierdut. Pentru a muta personajul și implicit blocuirle, jucătorul mișcă joystickul în direcția dorită. Dacă reușește să poziționeze toate blocurile înainte de a se termina timpul, se va afișa mesajul de terminare a nivelului și se trece la următorul nivel. La finalizarea nivelului 3 jucătorul câștigă jocul și se afișează mesajul aferent.

Hardware Design

În aceast proiect folosesc:
1. Arduino Uno
2. Modul Joystick PS2 compatibil Arduino
3. Ecran Nokia 5110 84×48
4. Buzzer
5. Fire mama-tata și tata-tata

Software Design

Am folosit Arduino IDE pentru scrierea codului și biblioteca Aafruit_GFX pentru desenarea fundalului. Codul pentru ticăitul de ceas este bazat pe laboratorul 1 de pm și se bazează pe întreruperi. Funcțiile LcdWriteCmd(), clearScreen(), LcdWriteData(), LcdWriteCharacter(), LcdWriteString(), LcdXY() realizează setup-ul lcd-ului, curățarea ecranului de pixeli, afișarea de pixeli pe ecran, afișarea unui caracter pe lcd în funcție de codificarea pe care i-am atribuit-o, scrierea unui string data ca parametru și poziționarea unui caracter sau a unui șir de caractere în funcție de o coordonată x și de una a lui y.
În momentul apăsării pe joystick se apelează funcția Level(), se copiază în interiorul funcției harta de la nivel, se fac setările necesare pentru afișarea hărții și se inițializează timpul de joc la 60 secunde. Numărul cutiilor care trebuie poziționate este dat de nivelul la care ne aflăm. Dacă o cutie se așează pe o poziție, aceasta nu mai poate fi mutată, iar numărul cutiilor rămase descrește. Nivelul se termină în momentul când numărul cutiilor care trebuie să fie mutate este 0 sau cand s-a terminat timpul.
În fișierul font.h am adăugat codificările caracterelor și cele 3 hărți al nivelelor 1, 2, 3. Pentru fiecare hartă:

 # = zid 
 @ = pion 
 ' ' = spațiu 
 + = bloc 
 ! = poziția pe care trebuie să mutăm 
 0 = bloc poziționat (nu este vizibil de jucător, dar reține că blocul nu mai poate fi mutat) 

Rezultate Obţinute

Concluzii

Mi-a făcut plăcere să lucrez la acest proiect. Acum că l-am terminat, îmi dau seama că puteam să mai adaug componente hardware pentru a-l face mai interesant(ex: un modul bluetooth pentru a transmite informția de la joystick la lcd sau un card de memorie pentru a face mai multe nivele). Cu toate acestea, jocul merge foarte bine.

Download

sokoban10.zip

Bibliografie

-bibliotecile arduino: Adafruit_GFX.h si Adafruit_PCD8544.h;
-youtube:https://www.youtube.com/watch?v=RAlZ1DHw03g&list=RDCMUCmHvGf00GDuPYG9DZqQKd9A&index=2;
-laboartorul 1 pm;
-wikipedia:https://en.wikipedia.org/wiki/Sokoban;

PDF