Turinys:

Sunkiausio pasaulio žaidimo atkūrimas „Arduino“: 7 žingsniai
Sunkiausio pasaulio žaidimo atkūrimas „Arduino“: 7 žingsniai

Video: Sunkiausio pasaulio žaidimo atkūrimas „Arduino“: 7 žingsniai

Video: Sunkiausio pasaulio žaidimo atkūrimas „Arduino“: 7 žingsniai
Video: SUNKIAUSIAS PASAULIO ŽAIDIMAS 2024, Liepa
Anonim
Image
Image

Šis projektas pagrįstas kompiuteriniu žaidimu, kurį galite rasti internete. Jo pavadinimas yra „Sunkiausias pasaulio žaidimas“. Man pavyko jį iš naujo sukurti „Arduino“naudojant keturių modulių LED matricą. Šioje pamokoje aš mokysiu jus, kaip tai sukurti patys. Prieš įsitraukdami į per daug detalių, noriu trumpai apžvelgti žingsnius, kuriuos nuėjau kurdama šį žaidimą.

  1. Surinkau visas reikalingas dalis.
  2. Aš sujungiau dalis.
  3. Parašiau eskizą, kuris naudojo vairasvirtę, norėdamas perkelti žaidėjų šviesos diodus per visus modulius.
  4. Aš suprojektavau pirmąsias kliūtis ir įtraukiau jas į eskizą, kad jos imituotų sunkiausią pasaulio žaidimą.
  5. Tada pridėjau kodą, kad aptikčiau susidūrimą su kliūtimis, o tai iš naujo paleis žaidimą.
  6. Ir tada aš sukūriau dar du kliūčių lygius.

1 žingsnis: visos dalys

Visos dalys
Visos dalys
Visos dalys
Visos dalys

Čia yra visų jums reikalingų dalių sąrašas:

  1. „Arduino UNO“ir USB jungtis:
  2. Keturių modulių 8x8: LED matrica
  3. Joystick:
  4. 10 laidų nuo patelių iki moterų:

2 žingsnis: Kaip prijungti dalis prie „Arduino“

Kaip prijungti dalis prie „Arduino“
Kaip prijungti dalis prie „Arduino“

Kaip prijungti LED matricą prie „Arduino“

  1. GND eina į GND
  2. VCC pereina prie 5 V.
  3. „DataIn“pereina prie skaitmeninio kaiščio 12
  4. CLK pereina prie skaitmeninio kaiščio 11
  5. CS arba LOAD pereina prie skaitmeninio kaiščio 10

Kaip prijungti vairasvirtę

  1. GND eina į GND
  2. 5V pereina prie 5V
  3. VRx pereina prie analoginio kaiščio A0
  4. VRy pereina prie analoginio kaiščio A1
  5. SW nenaudojamas

Akumuliatorius prijungiamas prie 9 V lizdo, kad suteiktų „Arduino“energijos

3 žingsnis: programos schema

Programos schema
Programos schema

Ovalas rodo programos pradžią.

Pirmasis žingsnis yra apibrėžti visas kliūtis.

Kiti du veiksmai nurodo kintamųjų nustatymą ir visų modulių įjungimą.

Kitas žingsnis yra nustatyti šviesos diodus į pirmąjį lygį ir visus kitus kintamuosius.

Toliau parodykite lygį, kuriuo šiuo metu veikia grotuvas.

Romboje nurodoma, kad skaitote vairasvirtę, kad pamatytumėte, kokia kryptimi jis stumiamas.

Tada pastumkite grotuvą bet kuria kryptimi, kuria buvo paspausta vairasvirtė.

Patikrinkite ir ar žaidėjas nesusidūrė su kliūtimi.

Jei žaidėjas pataiko kliūtį, grįžkite į pirmąjį lygį. Jei ne, patikrinkite, ar žaidėjas pasiekė lygio pabaigą.

Jei žaidėjas yra lygio pabaigoje, nustatykite kitą lygį, tada grįžkite į „Rodyti dabartinį lygį“. Jei jie nėra pabaigoje, perkelkite kliūtis ir grįžkite į „Skaityti vairasvirtę“.

4 žingsnis: vairasvirtės programavimas

Žinoma, norėdami perkelti mažą tašką, kuris yra grotuvas, mums reikia vairasvirtės. ir norėdami leisti vairasvirtei iš tikrųjų perkelti grotuvą, turime jį koduoti „Arduino IDE“. Turite įtraukti „LedControl“biblioteką, kurią rasite eidami į eskizų meniu> Įtraukti bibliotekas> tvarkyti bibliotekas ir ieškodami „LedControl“. Štai kaip atrodo vairasvirtės kodas.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Sukuria objektą keturiems moduliams int delaytime = 50; // žaidimo greitis int joystick_RtLt, joystick_UpDn; int žaidėjai_x = 0; // žaidėjų horizontali padėtis nuo 0 iki 31 int player_y = 3; // žaidėjų vertikali padėtis nuo 0 iki 7 int eilutė, stulpelis, modulis; void setup () {initialize_modules (); // įjungti ir nustatyti visus keturis LED modulius} void loop () {move_player (); // pradėti ciklą tikrinant, ar žaidėjas juda delčia (delaytime); } void initialize_modules () {lc.shutdown (0, false); // paleidžia modulį 0 lc.setIntensity (0, 1); lc. išjungimas (1, klaidingas); // paleidžia 1 modulį lc.setIntensity (1, 1); lc.išjungimas (2, klaidingas); // paleidžia 2 modulį lc.setIntensity (2, 1); lc. išjungimas (3, klaidingas); // paleidžia 3 modulį lc.setIntensity (3, 1); lc.clearDisplay (0); // išvalo modulį 0} void move_player () {modulis = žaidėjai_x/8; // apibrėžia, kuriame modulyje žaidėjas yra stulpelyje = players_x%8; // apibrėžia stulpelį, kuriame žaidėjas yra modulio eilutėje = players_y; lc.setLed (modulis, eilutė, stulpelis, klaidinga); // išjungti šviesos diodą dabartinėje žaidėjo padėtyje vairasvirtė_RtLt = analogRead (A0)/204 - 2; // skaityti X kreiptuką ir žemėlapio diapazoną nuo 2 iki -2, jei (vairasvirtė_RtLt> 0) // kai vairasvirtė yra į dešinę žaidėjų_x ++; // eik į dešinę, jei (vairasvirtė_RtLt 0) // jei vairasvirtė yra kairėje, o ne pradžioje player_x--; // perkelti į kairę vairasvirtę_UpDn = analogRead (A1)/204 - 2; // skaityti Y kreiptuką ir žemėlapio diapazoną nuo 2 iki -2, jei (vairasvirtė_UpDn 0) // jei vairasvirtė nuleista ir žaidėjas nėra apačioje žaidėjai_y--; // judėti žemyn kitaip if (vairasvirtė_UpDn> 0 && player_y <7) // jei vairasvirtė pakelta ir žaidėjas nėra aukščiausio lygio žaidėjų_y ++; // eiti aukštyn modulis = player_x/8; // nustatyti modulį žaidėjams naujos pozicijos stulpelis = žaidėjai_x%8; // nustatyti stulpelį žaidėjams nauja pozicija eilutė = žaidėjai_y; // nustatyti eilutę žaidėjams nauja pozicija lc.setLed (modulis, eilutė, stulpelis, tiesa); // įjungti diodą naujoje žaidėjo pozicijoje}

Dabar, kai pridėjote vairasvirtę, pradėkime dirbti su pirmąja kliūtimi!

5 žingsnis: Pirmasis lygis

Gerai, taigi dabar atėjo laikas įsitraukti į pagrindinę programos dalį, kliūtis! Kliūtys yra tai, kas iš tikrųjų daro tai „Sunkiausiu pasaulio žaidimu“. Taigi, jei norite iš tikrųjų žaisti žaidimą, turite jį pridėti prie savo kodo:

baitų kliūtis [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// trys lygiai, 8 scenos, 8 kolos, 8 eilutės

{{{1, 1, 1, 1, 1, 1, 0, 0}, // pirmasis lygis, pirmoji scena {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}, { 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, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // pirmasis lygis, antra scena {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}, {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}, // pirmasis lygis, trečias scena {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, 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}, // pirmasis lygis, ketvirtoji scena {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}, {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}, // pirmasis lygis, penkta scena {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}, // pirmasis lygis, šešta scena {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, 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}, // pirmasis lygis, septintoji scena {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}}, {{0, 1, 1, 1, 1, 1, 1, 1, 1}, // pirmasis lygis, aštuntas scena {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 (); // įjungti ir nustatyti visus keturis led modulius start_level (0); void loop () {move_player (); // pradėti ciklą tikrinant, ar žaidėjas juda, jei (kolizija ()) {// patikrinti susidūrimo lygį = 0; // jei susidūrimas tikras, iš naujo nustatykite lygį start_level (level); // iš naujo paleisti žaidimą} else if (delay_count == kliūties delsimas) {// jei nėra susidūrimo judėti kliūtis kas kitas delsa moveobstacle (); delay_count = 0; } else delay_count ++; vėlavimas (vėlavimo laikas); // atidėti žaidimo greitį}

Ir tai yra pirmoji kliūtis! Jei jums nuobodu tai kaip pirmasis lygis, visada galite pakeisti baitus, tiesiog atminkite, kad turite turėti aštuonias skirtingas scenas! Tęskime kitą žingsnį - susidūrimo aptikimą!

6 žingsnis: susidūrimo aptikimas

Šis žingsnis yra dar viena svarbi žaidimo dalis, be jo nebūtų didelių iššūkių! galite tiesiog įveikti kliūtis be jokių pasekmių! ar tai nebūtų labai smagu? todėl padarykime žaidimą sudėtingesnį (ir daug įdomesnį!) pridėdami šią programos skiltį:

void loop () {

„move_player“(); // pradėti ciklą tikrinant, ar žaidėjas juda, jei (kolizija ()) {// patikrinti susidūrimo lygį = 0; // jei susidūrimas tikras, iš naujo nustatykite lygį start_level (level); // iš naujo paleisti žaidimą} else if (delay_count == kliūties delsimas) {// jei nėra susidūrimo judėti kliūtis kas kitas delsa moveobstacle (); delay_count = 0; } else delay_count ++; vėlavimas (vėlavimo laikas); // uždelsimas pagal žaidimo greitį} int collision () {// patikrinkite, ar žaidėjas scenos modulyje nepataikė į kliūtį = players_x/8; stulpelis = žaidėjai_x%8; eilutė = žaidėjai_y; if (modulis> 0) if (kliūtis [lygis] [scena] [stulpelis] [eilutė] == 1) // jei žaidėjo padėtis tokia pati kaip ir kliūčių grįžimas (1); // aptiktas susidūrimas return true return (0); // no collision return false}

Ir štai! dabar galite mėgautis žaidimu daug daugiau! Dabar aš jums parodysiu, kaip užprogramuoti paskutinius du žaidimo lygius! jūs beveik baigėte šią pamoką ir esu tikras, kad esate pasirengęs tai išbandyti!

7 žingsnis: Paskutiniai du lygiai

Pasibaigus instrukcijai, šie du paskutiniai lygiai yra viskas, ko jums reikia norint užbaigti šį žaidimą. Tada galite tai išbandyti patys! čia yra kodas:

baitų kliūtis [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// antras ir trečias lygis, 8 scenos, 8 stulpeliai, 8 eilutės

{{{1, 0, 0, 0, 0, 0, 0, 1}, // antras lygis, pirmoji scena {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}, // antras lygis, antra scena {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, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // antras lygis, trečioji scena {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}, // antro lygio ketvirtoji scena {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}, // antras lygis, penktas scena {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}, // antras lygis, šešta scena {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}, // antrasis lygis, septintoji scena {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}, // antrojo lygio aštuntoji scena {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}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // trečias lygis, pirmoji scena {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}, // trečias lygis, antroji scena {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}, // trečias lygis, trečioji scena {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}, // trečias lygis, ketvirtoji scena {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}, // trečias lygis, penktoji scena {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}, // trečias lygis, šešta scena {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}, // trečias lygis, septintoji scena {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}, // trečias lygis, aštuntoji scena { 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}}}};

Štai ir viskas! esate pasiruošę užbaigti sunkiausią pasaulio žaidimą. Taip pat visas „Arduino“kodas pridedamas žemiau.

Rekomenduojamas: