Cuprins:

Recreația celui mai greu joc din lume pe Arduino: 7 pași
Recreația celui mai greu joc din lume pe Arduino: 7 pași

Video: Recreația celui mai greu joc din lume pe Arduino: 7 pași

Video: Recreația celui mai greu joc din lume pe Arduino: 7 pași
Video: Cum scrii când începi un caiet nou 2024, Noiembrie
Anonim
Image
Image

Acest proiect se bazează pe un joc pe computer pe care îl puteți găsi online. Numele său este „Cel mai greu joc din lume”. Am reușit să-l recreez pe Arduino folosind un LED Matrix cu patru module. În acest instructabil vă învăț cum să-l construiți singur. Înainte de a ajunge la prea multe detalii, vreau să ofer o scurtă prezentare generală a etapelor prin care am trecut pentru a crea acest joc.

  1. Am adunat toate piesele necesare.
  2. Am conectat piesele între ele.
  3. Am scris o schiță care folosea joystick-ul pentru a muta LED-urile jucătorilor pe toate modulele.
  4. Am proiectat primele obstacole și le-am adăugat la schiță, astfel încât să imite Worlds Hardest Game.
  5. Am adăugat apoi cod pentru a detecta o coliziune cu obstacolele, care va relua jocul.
  6. Și apoi am proiectat încă două niveluri de obstacole.

Pasul 1: Toate părțile

Toate piesele
Toate piesele
Toate piesele
Toate piesele

Iată o listă cu toate părțile de care aveți nevoie:

  1. Un conector Arduino UNO și USB:
  2. Un patru module 8x8: matrice LED
  3. Un joystick:
  4. 10 fire de la mascul la feminin:

Pasul 2: Cum să conectați piesele la Arduino

Cum să conectați piesele la Arduino
Cum să conectați piesele la Arduino

Cum să conectați matricea LED la Arduino

  1. GND merge la GND
  2. VCC merge la 5V
  3. DataIn merge la pinul digital 12
  4. CLK trece la pinul digital 11
  5. CS sau LOAD trece la pinul digital 10

Cum se conectează joystick-ul

  1. GND merge la GND
  2. 5V merge la 5V
  3. VRx merge la pinul analogic A0
  4. VRy trece la pinul analogic A1
  5. SW nu este utilizat

Bateria se conectează la mufa de 9v pentru a oferi putere Arduino

Pasul 3: Diagrama fluxului programului

Organigrama programului
Organigrama programului

Ovalul indică începutul programului.

Primul pas este de a defini toate obstacolele.

Următorii doi pași indică setarea variabilelor și pornirea tuturor modulelor.

Următorul pas este de a seta LED-urile la primul nivel și orice alte variabile.

Apoi afișează nivelul pe care este jucătorul în prezent.

Rombul indică citirea joystick-ului pentru a vedea în ce direcție este împins.

Apoi mutați jucătorul în orice direcție a fost împins joystick-ul.

Verificați și vedeți dacă jucătorul s-a ciocnit de un obstacol.

Dacă jucătorul a lovit un obstacol, reveniți la primul nivel. Dacă nu, verificați dacă jucătorul a ajuns la sfârșitul nivelului.

Dacă jucătorul se află la sfârșitul nivelului, setați-l la nivelul următor, apoi reveniți la „Afișează nivelul curent”. Dacă nu sunt la sfârșit, mutați obstacolele și întoarceți-vă la „Citiți joystick-ul”.

Pasul 4: Programarea joystick-ului

Desigur, pentru a muta micul punct care este jucătorul, avem nevoie de un joystick. și pentru a permite joystick-ului să deplaseze de fapt playerul, trebuie să-l codăm în ID-ul Arduino. Trebuie să includeți biblioteca LedControl pe care o puteți găsi accesând meniul schiță> Includeți biblioteci> gestionați bibliotecile și căutați LedControl. Iată cum arată codul pentru joystick.

#include „LedControl.h”

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Creează obiect pentru patru module int delaytime = 50; // viteza cu care rulează jocul în joystick_RtLt, joystick_UpDn; int players_x = 0; // poziția orizontală a jucătorilor de la 0 la 31 int players_y = 3; // poziția verticală a jucătorilor de la 0 la 7 rânduri, coloane, module; void setup () {initialize_modules (); // porniți și setați toate cele patru module led} void loop () {move_player (); // începe bucla verificând dacă jucătorul mișcă întârzierea (delaytime); } void initialize_modules () {lc.shutdown (0, false); // pornește modulul 0 lc.setIntensity (0, 1); lc.shutdown (1, fals); // pornește modulul 1 lc.setIntensity (1, 1); lc.shutdown (2, fals); // pornește modulul 2 lc.setIntensity (2, 1); lc.shutdown (3, fals); // pornește modulul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // șterge modulul 0} void move_player () {module = players_x / 8; // definește modul în care este jucătorul pe coloană = players_x% 8; // definește coloana în care se află jucătorul pe rândul modulului = players_y; lc.setLed (modul, rând, coloană, fals); // opriți ledul în poziția actuală a jucătorului joystick_RtLt = analogRead (A0) / 204 - 2; // citiți X-joystick și harta variază de la 2 la -2 dacă (joystick_RtLt> 0) // atunci când joystick-ul este la jucătorii potriviți_x ++; // mergeți în dreapta altfel dacă (joystick_RtLt 0) // dacă joystick-ul este la stânga și nu la începutul players_x--; // mutați stânga joystick_UpDn = analogRead (A1) / 204 - 2; // citiți Y-joystick și harta variază de la 2 la -2 dacă (joystick_UpDn 0) // dacă joystick-ul este în jos și jucătorul nu este la baza jucători_y--; // mutați în jos altfel dacă (joystick_UpDn> 0 && players_y <7) // dacă joystick-ul este sus și jucătorul nu este la top players_y ++; // merge sus modul = players_x / 8; // setați modulul la noua poziție a coloanei jucătorilor = players_x% 8; // setați coloana la poziția nouă a jucătorilor rând = players_y; // setați rândul pe poziția nouă a jucătorilor lc.setLed (modul, rând, coloană, adevărat); // pornește ledul la noua poziție a jucătorului}

Acum că ați adăugat joystick-ul, să lucrăm la primul obstacol!

Pasul 5: Primul nivel

Bine, așa că acum este timpul să intrați în partea principală a programului, obstacolele! Obstacolele sunt ceea ce face cu adevărat acest „cel mai greu joc din lume”. Deci, dacă doriți să jucați efectiv jocul, trebuie să adăugați acest lucru la codul dvs.:

byte obstacle [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// trei nivele, 8 scene, 8 coloane, 8 rânduri

{{{1, 1, 1, 1, 1, 1, 0, 0}, // primul nivel, prima scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primul nivel, a doua scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primul nivel, al treilea scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primul nivel, a patra scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primul nivel, a cincea scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primul nivel, a șasea scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, // primul nivel, a șaptea scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // primul nivel, opt scenă {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, void setup () {initialize_modules (); // porniți și setați toate cele patru module led start_level (0); bucla void () {move_player (); // începe bucla verificând dacă jucătorul se mișcă dacă (coliziune ()) {// verifică nivelul de coliziune = 0; // dacă coliziune este adevărată, resetați nivelul start_level (nivel); // reporniți jocul} else if (delay_count == obstacle_delay) {// if no collision move obstacle every other delay moveobstacle (); delay_count = 0; } else else_count ++; întârziere (întârziere); // întârziere în funcție de viteza jocului}

Și acesta este primul obstacol! Dacă te plictisești de acest lucru ca prim nivel, atunci poți oricând să schimbi octeții, amintește-ți că trebuie să ai opt scene diferite! Să continuăm cu pasul următor, detectarea coliziunilor!

Pasul 6: Detectarea coliziunilor

Acest pas este o altă parte importantă a jocului, fără ca acesta să nu fie prea mare provocare! ai putea pur și simplu să îți croiești drum printre obstacole fără a avea consecințe! nu ar fi foarte distractiv nu? deci hai să facem jocul mai provocator (și mult mai distractiv!) prin adăugarea acestei secțiuni a programului:

bucla nulă () {

move_player (); // începe bucla verificând dacă jucătorul se mișcă dacă (coliziune ()) {// verifică nivelul de coliziune = 0; // dacă coliziune este adevărată, resetați nivelul start_level (nivel); // reporniți jocul} else if (delay_count == obstacle_delay) {// if no collision move obstacle every other delay moveobstacle (); delay_count = 0; } else else_count ++; întârziere (întârziere); // întârziere în funcție de viteza jocului} int collision () {// verificați dacă jucătorul a lovit un obstacol în modul scene = players_x / 8; coloană = jucători_x% 8; rând = jucători_y; if (modul> 0) if (obstacol [nivel] [scenă] [coloană] [rând] == 1) // dacă poziția jucătorului este aceeași cu întoarcerea obstacolului (1); // coliziune detectată return true return (0); // fără coliziune returnare falsă}

Și iată-te! acum vă puteți bucura de joc mult mai mult! Acum am să vă arăt cum să programați ultimele două niveluri ale jocului! aproape ați terminat cu acest instructable și sunt sigur că sunteți gata să-l încercați!

Pasul 7: Ultimele două niveluri

Veneau la sfârșitul instructabilului, aceste două niveluri sunt tot ce aveți nevoie pentru a termina acest joc. Apoi, puteți încerca singur! aici este codul:

byte obstacle [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// al doilea și al treilea nivel, 8 scene, 8 coloane, 8 rânduri

{{{1, 0, 0, 0, 0, 0, 0, 1}, // al doilea nivel, prima scenă {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // al doilea nivel, a doua scenă {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // al doilea nivel, a treia scenă {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // al doilea nivel scena a patra {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, // al doilea nivel, fif scena a {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // al doilea nivel, a șasea scenă {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, // al doilea nivel, a șaptea scenă {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // al doilea nivel a opta scenă {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // al treilea nivel, prima scenă {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // al treilea nivel, a doua scenă {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // al treilea nivel, a treia scenă {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // al treilea nivel, a patra scenă {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // al treilea nivel, a cincea scenă {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // al treilea nivel, a șasea scenă {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // al treilea nivel, a șaptea scenă {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // al treilea nivel, scena a opta { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}}};

Si asta e! ești pregătit să încerci să finalizezi cel mai greu joc din lume. De asemenea, codul complet Arduino este atașat mai jos.

Recomandat: