Sisukord:

Maailma raskeima mängu taastamine Arduino's: 7 sammu
Maailma raskeima mängu taastamine Arduino's: 7 sammu

Video: Maailma raskeima mängu taastamine Arduino's: 7 sammu

Video: Maailma raskeima mängu taastamine Arduino's: 7 sammu
Video: Maailma raskeim ülesanne! (Ohtude saar videosari 5. osa) 2024, Juuli
Anonim
Image
Image

See projekt põhineb arvutimängul, mille leiate Internetist. Selle nimi on "Maailma raskeim mäng". Suutsin selle Arduinos uuesti luua, kasutades nelja mooduliga LED-maatriksit. Selles juhendis õpetan teile, kuidas seda ise konstrueerida. Enne kui asume liiga paljude detailide juurde, tahan anda kiire ülevaate selle mängu loomise sammudest.

  1. Kogusin kokku kõik vajalikud osad.
  2. Ühendasin osad omavahel.
  3. Kirjutasin visandi, mis kasutas juhtkangi mängijate LED -i liigutamiseks kõigis moodulites.
  4. Ma kavandasin esimesed takistused ja lisasin need visandile, nii et nad jäljendasid maailma kõige raskemat mängu.
  5. Seejärel lisasin koodi, et avastada kokkupõrge takistustega, mis taaskäivitab mängu.
  6. Ja siis kavandasin veel kaks takistuste taset.

Samm: kõik osad

Kõik osad
Kõik osad
Kõik osad
Kõik osad

Siin on kõigi vajalike osade loend:

  1. Arduino UNO ja USB-pistik:
  2. Neli moodulit 8x8: LED-maatriks
  3. Joystick:
  4. 10 isast naissoost juhet:

Samm: kuidas osi Arduinoga ühendada

Kuidas ühendada osad Arduinoga
Kuidas ühendada osad Arduinoga

Kuidas ühendada LED -maatriks Arduinoga

  1. GND läheb GND -le
  2. VCC läheb 5V pingele
  3. DataIn läheb digitaalsele tihvtile 12
  4. CLK läheb digitaalsele tihvtile 11
  5. CS või LOAD läheb digitaalsele tihvtile 10

Kuidas juhtkangi ühendada

  1. GND läheb GND -le
  2. 5V läheb 5V peale
  3. VRx läheb analoogpistikule A0
  4. VRy läheb analoogpistikule A1
  5. SW -d ei kasutata

Aku ühendatakse 9 V pistikupesaga, et anda Arduinole energiat

3. samm: programmi vooskeem

Programmi vooskeem
Programmi vooskeem

Ovaal näitab programmi algust.

Esimene samm on määratleda kõik takistused.

Järgmised kaks sammu näitavad muutujate seadistamist ja kõigi moodulite sisselülitamist.

Järgmine samm on seadistada LED -id esimesele tasemele ja kõik muud muutujad.

Järgmisena kuvage tase, millel mängija praegu töötab.

Romboos näitab juhtkangi lugemist, et näha, mis suunas seda lükatakse.

Seejärel liigutage mängijat suvalises suunas, mida juhtkangi lükati.

Kontrollige ja vaadake, kas mängija põrkas vastu takistust.

Kui mängija tabas takistust, minge tagasi esimesele tasemele. Kui ei, siis kontrollige, kas mängija jõudis taseme lõppu.

Kui mängija on taseme lõpus, seadke see järgmisele tasemele ja minge tagasi valikule "Kuva praegune tase". Kui need pole lõpus, liigutage takistused ja minge tagasi jaotisse "Loe juhtkangi".

4. samm: juhtkangi programmeerimine

Muidugi, mängija liigutamiseks vajaliku täpikese liigutamiseks vajame juhtkangi. ja selleks, et juhtkang saaks mängijat tegelikult liigutada, peame selle Arduino IDE -s kodeerima. Peate lisama LedControli teegi, mille leiate visandimenüüst> Kaasa teegid> raamatukogude haldamine ja otsige LedControl. Siin näeb välja juhtkangi kood.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Loob objekti neljale moodulile int delaytime = 50; // mängu käivitamise kiirus int joystick_RtLt, joystick_UpDn; int mängijad_x = 0; // mängijate horisontaalne asend 0 kuni 31 int mängijad_y = 3; // mängijate vertikaalne asend 0 kuni 7 int rida, veerg, moodul; void setup () {initialize_modules (); // kõigi nelja led -mooduli sisselülitamine ja seadistamine} void loop () {move_player (); // algusahelat kontrollides, kas mängija liigutab viivitust (viivitusaeg); } void initialize_modules () {lc.shutdown (0, false); // käivitab mooduli 0 lc.setIntensity (0, 1); lc.sulgemine (1, vale); // käivitab mooduli 1 lc.setIntensity (1, 1); lc.sulgemine (2, vale); // käivitab mooduli 2 lc.setIntensity (2, 1); lc.sulgemine (3, vale); // käivitab mooduli 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // kustutab mooduli 0} void move_player () {moodul = mängijad_x/8; // määrab, millisel moodulil mängija veerus on = players_x%8; // määrab veeru, kus mängija on mooduli real = players_y; lc.setLed (moodul, rida, veerg, vale); // lülita LED välja mängija praegusel positsioonil juhtkangi_RtLt = analogRead (A0)/204 - 2; // loe X -juhtnuppu ja kaardivahemikku 2 kuni -2, kui (joystick_RtLt> 0) // kui juhtnupp on õigele mängijale_x ++; // mine paremale muidu if (joystick_RtLt 0) // kui juhtnupp on vasakul ja mitte alguses player_x--; // liiguta vasakule juhtkangi_UpDn = analogRead (A1)/204 - 2; // loe Y-juhtkangi ja kaardivahemikku 2 kuni -2, kui (joystick_UpDn 0) // kui juhtnupp on maas ja mängija ei ole all mängijad_y--; // liigu muidu alla, kui (juhtnupp_UpDn> 0 && players_y <7) // kui juhtnupp on üleval ja mängija pole tipus mängijad_y ++; // mine üles moodul = players_x/8; // seada moodul mängijatele uus positsiooniveerg = players_x%8; // määrake veerg mängijatele uus positsioon rida = players_y; // seada rida mängijatele uus positsioon lc.setLed (moodul, rida, veerg, tõene); // lülitage LED sisse mängija uuel positsioonil}

Nüüd, kui olete juhtnupu lisanud, töötame esimese takistuse kallal!

Samm: esimene tase

Olgu, nii et nüüd on aeg asuda programmi põhiosa, takistuste juurde! Takistused muudavad selle tõepoolest "maailma raskeimaks mänguks". Nii et kui soovite mängu tegelikult mängida, peate selle oma koodile lisama:

bait takistus [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// kolm taset, 8 stseeni, 8 kollumit, 8 rida

{{{1, 1, 1, 1, 1, 1, 0, 0}, // esimene tase, esimene stseen {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}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // esimene tase, teine stseen {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}, // esimene tase, kolmas stseen {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}, // esimene tase, neljas stseen {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}, // esimene tase, viies stseen {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}, // esimene tase, kuues stseen {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, 1, 1, 1, 1, 1, 1}, // esimene tase, seitsmes stseen {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, // esimene tase, kaheksas stseen {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}}}, tühine seadistus () {initialize_modules (); // lülita sisse ja seadista kõik neli led -moodulit start_level (0); void loop () {move_player (); // algusahelat kontrollides, kas mängija liigub kui (kokkupõrge ()) {// kontrollige kokkupõrke taset = 0; // kui kokkupõrge on tõene, lähtestage tase start_level (level); // mängu taaskäivitamine} else if (delay_count == takistuste viivitus) {// kui kokkupõrget ei toimu, liiguta takistust igal teisel viivitusel moveobstacle (); delay_count = 0; } muu delay_count ++; viivitus (viivitusaeg); // mängu kiirusega viivitamine}

Ja see on esimene takistus! Kui teil on sellest esimene tase igav, saate baite alati muuta, pidage meeles, et teil peab olema kaheksa erinevat stseeni! Jätkame järgmise sammuga - kokkupõrke tuvastamine!

6. samm: kokkupõrke tuvastamine

See samm on veel üks oluline osa mängust, ilma selleta poleks palju väljakutseid! võite lihtsalt takistustest läbi põigata, ilma tagajärgedeta! see poleks eriti lõbus? nii et muudame mängu keerulisemaks (ja palju lõbusamaks!), lisades programmi selle jaotise:

void loop () {

move_player (); // algusahelat kontrollides, kas mängija liigub kui (kokkupõrge ()) {// kontrollige kokkupõrke taset = 0; // kui kokkupõrge on tõene, lähtestage tase start_level (level); // mängu taaskäivitamine} else if (delay_count == takistuse viivitus) {// kui kokkupõrke puudumine liigutab takistust iga teine viivitus moveobstacle (); delay_count = 0; } muu delay_count ++; viivitus (viivitusaeg); // viivitus mängu kiiruse järgi} int collision () {// kontrollige, kas mängija tabas stseenimoodulis takistust = players_x/8; veerg = mängijad_x%8; rida = mängijad_y; if (moodul> 0) if (takistus [tase] [stseen] [veerg] [rida] == 1) // kui mängija positsioon on sama nagu takistuse tagasitulek (1); // tuvastatud kokkupõrge tagastab tõelise tulu (0); // kokkupõrkeid ei tagastata vale}

Ja seal sa lähed! nüüd saate mängu palju rohkem nautida! Nüüd näitan teile, kuidas mängu kahte viimast taset programmeerida! olete selle juhendiga peaaegu valmis saanud ja olen kindel, et olete valmis seda proovima!

7. samm: kaks viimast taset

Kui jõudsite juhendatava lõpule, on need kaks viimast taset kõik, mida vajate selle mängu lõpetamiseks. Siis saate seda ise proovida! siin on kood:

bait takistus [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// teine ja kolmas tase, 8 stseeni, 8 veergu, 8 rida

{{{1, 0, 0, 0, 0, 0, 0, 1}, // teine tase, esimene stseen {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}, // teine tase, teine stseen {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}, // teine tase, kolmas stseen {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}, // teise taseme neljas stseen {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}, // teine tase, viies stseen {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}, // teine tase, kuues stseen {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}, // teine tase, seitsmes stseen {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}, // teise astme kaheksas stseen {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}, // kolmas tase, esimene stseen {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}, // kolmas tase, teine stseen {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}, // kolmas tase, kolmas stseen {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}, // kolmas tase, neljas stseen {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}, // kolmas tase, viies stseen {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}, // kolmas tase, kuues stseen {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}, // kolmas tase, seitsmes stseen {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}, // kolmas tase, kaheksas stseen { 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}}}};

Ja see ongi kõik! olete valmis proovima lõpetada maailma kõige raskem mäng. Allpool on lisatud ka täielik Arduino kood.

Soovitan: