Përmbajtje:

Rikrijimi i lojës më të vështirë në botë në Arduino: 7 hapa
Rikrijimi i lojës më të vështirë në botë në Arduino: 7 hapa

Video: Rikrijimi i lojës më të vështirë në botë në Arduino: 7 hapa

Video: Rikrijimi i lojës më të vështirë në botë në Arduino: 7 hapa
Video: CS50 2015 - Week 7 2024, Korrik
Anonim
Image
Image

Ky projekt bazohet në një lojë kompjuterike që mund ta gjeni në internet. Emri i saj është, "Loja më e vështirë në botë". Unë kam qenë në gjendje ta ri-krijoj atë në Arduino duke përdorur një Matricë LED me katër module. Në këtë udhëzues ju mësoj se si ta ndërtoni vetë. Para se të hyjmë në shumë detaje, dua të jap një përmbledhje të shpejtë të hapave që kam kaluar për të krijuar këtë lojë.

  1. Mblodha të gjitha pjesët e nevojshme.
  2. I lidha pjesët së bashku.
  3. Shkrova një skicë që përdorte levën për të lëvizur lojtarët LED nëpër të gjitha modulet.
  4. Unë i projektova pengesat e para dhe i shtova në skicë, kështu që ata imituan lojën më të vështirë në botë.
  5. Pastaj shtova kodin për të zbuluar një përplasje me pengesat, të cilat do të rinisin lojën.
  6. Dhe pastaj hartova dy nivele të tjera pengesash.

Hapi 1: Të gjitha pjesët

Të gjitha Pjesët
Të gjitha Pjesët
Të gjitha Pjesët
Të gjitha Pjesët

Këtu është një listë e të gjitha pjesëve që ju nevojiten:

  1. Një lidhës Arduino UNO dhe usb:
  2. Një katër modul 8x8: Matrica LED https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. Një xhojstik:
  4. 10 tela meshkuj në femra:

Hapi 2: Si t'i lidhni pjesët me Arduino

Si t'i lidhni pjesët me Arduino
Si t'i lidhni pjesët me Arduino

Si ta lidhni matricën LED me Arduino

  1. GND shkon në GND
  2. VCC shkon në 5V
  3. DataIn shkon në pinin dixhital 12
  4. CLK shkon në pinin dixhital 11
  5. CS ose LOAD shkon në pinin dixhital 10

Si të lidhni levën

  1. GND shkon në GND
  2. 5V shkon në 5V
  3. VRx shkon në pinin analog A0
  4. VRy shkon në pinin analog A1
  5. SW nuk përdoret

Bateria lidhet me folenë 9v për t'i dhënë fuqinë Arduino

Hapi 3: Grafiku i rrjedhës i Programit

Grafiku i rrjedhës së programit
Grafiku i rrjedhës së programit

Ovali tregon fillimin e programit.

Hapi i parë është përcaktimi i të gjitha pengesave.

Dy hapat e ardhshëm tregojnë vendosjen e variablave dhe ndezjen e të gjitha moduleve.

Hapi tjetër, është vendosja e LED -ve në nivelin e parë dhe çdo variabël tjetër.

Tjetra shfaqni nivelin në të cilin aktualisht është lojtari.

Rombi tregon leximin e Joystick për të parë se në cilin drejtim po shtyhet.

Pastaj lëvizni lojtarin në çfarëdo drejtimi që Joystick u shty.

Kontrolloni dhe shihni nëse lojtari është përplasur me një pengesë.

Nëse lojtari godet një pengesë, kthehuni në nivelin e parë. Nëse jo kontrolloni për të parë nëse lojtari ka arritur në fund të nivelit.

Nëse lojtari është në fund të nivelit, vendoseni në nivelin tjetër dhe kthehuni te "Shfaq nivelin aktual". Nëse ato nuk janë në fund, zhvendosni pengesat dhe kthehuni te "Lexoni Joystick".

Hapi 4: Programimi i Joystick

Sigurisht që për të lëvizur pikën e vogël që është lojtari, ne kemi nevojë për një levë. dhe për të lejuar që levë të lëvizë aktualisht lojtarin, duhet ta kodojmë në Arduino IDE. Duhet të përfshini bibliotekën LedControl të cilën mund ta gjeni duke shkuar te menyja e skicës> Përfshini bibliotekat> menaxhoni bibliotekat dhe kërkoni për LedControl. Ja se si duket kodi për levën.

#përfshi "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Krijon objekt për katër module int delaytime = 50; // shpejtësia me të cilën loja shkon int joystick_RtLt, joystick_UpDn; int players_x = 0; // pozicioni horizontal i lojtarëve nga 0 në 31 int players_y = 3; // pozicioni vertikal i lojtarëve nga 0 në 7 rresht int, kolonë, modul; void setup () {initialize_modules (); // ndizni dhe vendosni të katër modulet led} void loop () {move_player (); // filloni lakin duke kontrolluar nëse lojtari lëviz vonesë (vonesë); } void initialize_modules () {lc.shutdown (0, false); // fillon modulin 0 lc.setIntensity (0, 1); lc. mbyllje (1, false); // fillon modulin 1 lc.setIntensity (1, 1); lc. mbyllje (2, false); // fillon modulin 2 lc.setIntensity (2, 1); lc. mbyllje (3, false); // fillon modulin 3 lc.setIntensity (3, 1); lc. ClearDisplay (0); // pastron modulin 0} void move_player () {modul = players_x/8; // përcakton cilin modul është lojtari në kolonën = players_x%8; // përcakton kolonën ku lojtari është në rreshtin e modulit = players_y; lc.setLed (moduli, rreshti, kolona, false); // fikni led në pozicionin aktual të lojtarit joystick_RtLt = analogRead (A0)/204 - 2; // lexoni X -joystick dhe diapazoni i hartës nga 2 në -2 nëse (joystick_RtLt> 0) // kur joystick është te lojtarët e duhur_x ++; // shkoni djathtas tjetër nëse (joystick_RtLt 0) // nëse joystick është në të majtë dhe jo në fillim lojtarët_x--; // lëviz levën majtas_UpDn = analogRead (A1)/204 - 2; // lexoni Y-joystick dhe diapazoni i hartës nga 2 në -2 nëse (joystick_UpDn 0) // nëse joystick është poshtë dhe lojtari nuk është në fund players_y--; // lëviz poshtë poshtë nëse (joystick_UpDn> 0 && players_y <7) // nëse joystick është lart dhe lojtari nuk është në krye players_y ++; // shkoni lart modul = players_x/8; // vendosni modulin për lojtarët kolona e pozicionit të ri = players_x%8; // vendos kolonën te lojtarët rreshti i pozicionit të ri = players_y; // vendos rresht te lojtarët pozicioni i ri lc.setLed (modul, rresht, kolonë, i vërtetë); // ndizni led në pozicionin e ri të lojtarit}

Tani që keni shtuar levën le të punojmë në pengesën e parë!

Hapi 5: Niveli i Parë

Mirë, kështu që tani është koha për të hyrë në pjesën kryesore të programit, pengesat! Pengesat janë ato që e bëjnë këtë me të vërtetë, "Loja më e vështirë në botë". Pra, nëse doni të luani lojën, atëherë duhet ta shtoni këtë në kodin tuaj:

byte pengesë [NIVELAT] [Skenat] [KOLONAT] [RRESAT] = {// tre nivele, 8 skena, 8 përplasje, 8 rreshta

{{{1, 1, 1, 1, 1, 1, 0, 0}, // niveli i parë, skena e parë {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}, // niveli i parë, skena e dytë {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, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // niveli i parë, i tretë skena {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}, // së pari niveli, skena e katërt {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, 0}, // niveli i parë, skena e pestë {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, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // niveli i parë, skena e gjashtë {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}, // niveli i parë, skena e shtatë {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, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // niveli i parë, i teti skena {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 (); // ndizni dhe vendosni të katër modulet led start_level (0); void loop () {move_player (); // filloni lakin duke kontrolluar nëse lojtari lëviz nëse (përplasja ()) {// kontrolloni nivelin e përplasjes = 0; // nëse përplasja është e vërtetë, rivendosni nivelin start_level (niveli); // rinis lojën} tjetër nëse (delay_count == pengesë_vonesë) {// nëse asnjë përplasje nuk lëviz pengesë çdo vonesë tjetër moveobstacle (); vonesa_numri = 0; } tjetër delay_count ++; vonesë (vonesë); // vonesë me shpejtësinë e lojës}

Dhe kjo është pengesa e parë! Nëse mërziteni nga kjo si niveli juaj i parë, atëherë gjithmonë mund të ndryshoni bajtët, vetëm mos harroni se duhet të keni tetë skena të ndryshme! Le të vazhdojmë në hapin tjetër, zbulimin e përplasjes!

Hapi 6: Zbulimi i Përplasjes

Ky hap është një pjesë tjetër e rëndësishme e lojës, me të cilën nuk do të kishte shumë sfidë! ju thjesht mund të kaloni rrugën tuaj përmes pengesave pa ndonjë pasojë! nuk do të ishte shumë argëtuese, apo jo? kështu që le ta bëjmë lojën më sfiduese (dhe shumë më argëtuese!) duke shtuar këtë pjesë të programit:

lak void () {

move_player (); // filloni lakin duke kontrolluar nëse lojtari lëviz nëse (përplasja ()) {// kontrolloni nivelin e përplasjes = 0; // nëse përplasja është e vërtetë, rivendosni nivelin start_level (niveli); // rinis lojën} tjetër nëse (delay_count == pengesë_vonesë) {// nëse asnjë përplasje nuk lëviz pengesë çdo vonesë tjetër moveobstacle (); vonesa_numri = 0; } tjetër delay_count ++; vonesë (vonesë); // vonesa me shpejtësinë e lojës} int përplasja () {// kontrolloni nëse lojtari goditi një pengesë në modulin e skenës = players_x/8; kolona = lojtarët_x%8; rresht = lojtarët_y; nëse (moduli> 0) nëse (pengesa [niveli] [skena] [kolona] [rreshti] == 1) // nëse pozicioni i lojtarit është i njëjtë me kthimin e pengesës (1); // përplasja e zbuluar kthimi i vërtetë kthimi (0); // asnjë përplasje nuk kthehet e rreme}

Dhe atje ju shkoni! tani mund ta shijoni lojën shumë më tepër! Tani do t'ju tregoj se si të programoni dy nivelet e fundit të lojës! pothuajse keni mbaruar me këtë udhëzues, dhe jam i sigurt që jeni gati ta provoni!

Hapi 7: Dy nivelet e fundit

Duke ardhur në fund të mësimit, këto dy nivele të fundit janë gjithçka që ju nevojitet për të përfunduar këtë lojë. Atëherë mund ta provoni vetë! këtu është kodi:

byte pengesë [NIVELAT] [Skenat] [KOLONAT] [RRESAT] = {// niveli i dytë dhe i tretë, 8 skena, 8 kolona, 8 rreshta

{{{1, 0, 0, 0, 0, 0, 0, 1}, // niveli i dytë, skena e parë {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}, // niveli i dytë, skena e dytë {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}, // niveli i dytë, skena e tretë {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}, // niveli i dytë skena e katërt {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}, // niveli i dytë, pesë skena e th {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}, // niveli i dytë, skena e gjashtë {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}, // niveli i dytë, skena e shtatë {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}, // niveli i dytë skena e tetë {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}, // niveli i tretë, skena e parë {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}, // niveli i tretë, skena e dytë {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}, // niveli i tretë, skena e tretë {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}, // niveli i tretë, skena e katërt {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 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}, // niveli i tretë, skena e pestë {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}, // niveli i tretë, skena e gjashtë {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}, // niveli i tretë, skena e shtatë {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}, // niveli i tretë, skena e tetë { 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}}}};

Dhe kjo eshte! jeni gati të përpiqeni të përfundoni lojën më të vështirë në botë. Gjithashtu kodi i plotë Arduino është bashkangjitur më poshtë.

Recommended: