Pac-Man (パックマン Pakkuman?) este un joc arcade dezvoltat de compania Namco. A fost lansat în 1980, și a devenit imediat foarte popular.
Proiectul meu reprezintă o versiune mai simplă a jocului clasic si poate fi controlat prin intermediul unui joystick și a unui ecran LCD. Scopul jocului este de a controla personajul principal pentru a evita fantomele și a colecta punctele de pe harta.
Consider că acest proiect este util pentru alții deoarece oferă oportunitatea de a construi un joc interactiv și educativ utilizând componente electronice și o placa Arduino. De asemenea, poate fi util pentru cei care doresc să învețe programarea Arduino sau să își îmbunătățească abilitățile de programare.
Arduino Uno este placa de dezvoltare care controlează toate aspectele jocului și comunică cu celelalte componente pentru a afișa jocul, pentru a citi valorile de la joystick și pentru a produce efecte de sunet. Joystick-ul este conectat la pinii analogici ai plăcii Arduino pentru a citi pozitia jucatorului (valorile de pe axele X și Y), iar ecranul LCD este conectat la pinii digitali ai plăcii Arduino pentru a afișa jocul, scorul si nivelul.
Buzzer-ul este conectat la un pin digital pentru a crea efecte de sunet in momente importante ale jocului, cum ar fi atunci cand jucatorul reuseste sa colecteze toate campurile de pe harta. Butonul de reset este conectat la pinul digital pentru a reporni jocul.
Componente necesare
Jocul folosește următoarele tehnologii și componente:
La inceputului jocului, este redata o melodie de start, urmata de un mesaj de Welcome si intructiuni pentru joc. Scopul jocului este să colectezi inimioarele reprezentate pe ecran, evitând fantomele care sunt afisate pe exran. Fantomele pot fi evitate de către Pac-Man, iar când este atins de o fantomă, jocul se încheie cu un semnal sonor si cu afisarea scorului curent, dar si a highscore-ului. Jucătorul poate controla mișcarea lui Pac-Man(sus/jos) folosind joystickul.
În implementarea acestui joc, se folosesc întreruperi pentru a detecta mișcarea joystickului. În fiecare ciclu de joc, se citește valoarea ADC a joystickului pentru a determina poziția acestuia. Dacă joystickul este mișcat, se declanșează o întrerupere care semnalează că joystickul a fost mutat. Apoi, în funcția loop(), se verifică starea jocului și se execută acțiunile corespunzătoare.
Jocul are trei stări principale:
-STATE_INTRO: Starea de introducere a jocului. În această stare, se afișează un mesaj de bun venit și instrucțiuni pentru jucător. De asemenea, se redă o melodie de început a jocului. -STATE_PLAY: Starea de joc. În această stare, jucătorul controlează mișcarea lui Pac-Man pentru a colecta inimioarele și a evita fantomele. Scorul este actualizat în timp real pe afișajul LCD. -STATE_GAMEOVER: Starea de sfârșit a jocului. În această stare, se afișează un mesaj de game over și se redă o melodie de sfârșit a jocului.
Jocul utilizează o serie de structuri și variabile pentru a gestiona sprite-urile (personaje) și starea jocului. De exemplu, există o structură pentru fiecare sprite care conține informații despre poziția și tipul sprite-ului.
În codul furnizat, se folosesc întreruperile pentru a trata mișcarea joystick-ului. Prin intermediul întreruperii PCINT1 (Pin Change Interrupt 1), se detectează schimbările de stare pe pinul A1 (PC1). Atunci când joystick-ul este mutat în sus sau în jos, se declanșează o întrerupere și se setează variabila joystickMoved pe true. Această variabilă este ulterior verificată în funcția loop() pentru a determina acțiunea corespunzătoare.
În funcția setup(), se configurează întreruperea și se activează ADC (Analog-to-Digital Converter). Pinul A1 (PC1) este setat ca pin de intrare, iar ADMUX (ADC Multiplexer Selection Register) și ADCSRA (ADC Control and Status Register A) sunt configurați corespunzător. În funcția loop(), se realizează citirea valorii analogice de pe pinul A1 folosind ADC. Această valoare reprezintă poziția joystick-ului pe axa Y și este stocată în variabila yValue. Apoi, întreruperile sunt dezactivate temporar (cli()) pentru a evita modificări ale valorii în timpul verificărilor.
În funcția play(), valoarea yValue este utilizată pentru a determina poziția curentă a joystick-ului și pentru a controla mișcarea lui Pac-Man în sus și în jos în funcție de aceasta.
ADC este folosit pentru a citi valorile analogice de la joystick și a le transforma în valori digitale pe care Arduino le poate procesa. Această conversie analog-digitală se realizează prin setarea corespunzătoare a registrelor ADMUX și ADCSRA și prin apelarea funcției analogRead() în care se specifică pinul analog de citire. Valoarea digitală rezultată este stocată în variabila yValue și este utilizată ulterior în funcția play() pentru a controla mișcarea Pac-Man.
Pentru functionalitatea completa: https://www.youtube.com/watch?v=6VUz6QU2y5k&list=PLvBYedcS0rmK3VVGU3XVkYzdAiXhlE7lu
https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c https://docs.arduino.cc/learn/built-in-libraries/eeprom https://github.com/robsoncouto/arduino-songs https://reference.arduino.cc/reference/en/language/functions/analog-io/analogread/ https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/