Kazalo:

Ponovno ustvarjanje najtežje igre na svetu na Arduinu: 7 korakov
Ponovno ustvarjanje najtežje igre na svetu na Arduinu: 7 korakov

Video: Ponovno ustvarjanje najtežje igre na svetu na Arduinu: 7 korakov

Video: Ponovno ustvarjanje najtežje igre na svetu na Arduinu: 7 korakov
Video: ТАКОВ МОЙ ПУТЬ В L4D2 2024, Julij
Anonim
Image
Image

Ta projekt temelji na računalniški igri, ki jo lahko najdete na spletu. Njegovo ime je "Najtežja igra na svetu". Na arduinu sem ga lahko znova ustvaril s pomočjo štiri matrične LED matrice. V tem navodilu vas naučim, kako ga sami sestaviti. Preden se lotimo preveč podrobnosti, želim na kratko predstaviti korake, ki sem jih opravil pri ustvarjanju te igre.

  1. Zbral sem vse potrebne dele.
  2. Deli sem povezal skupaj.
  3. Napisal sem skico, ki je z igralno palico premikala LED predvajalnike po vseh modulih.
  4. Oblikoval sem prve ovire in jih dodal skici, tako da so posnemale najtežjo igro na svetu.
  5. Nato sem dodal kodo za zaznavanje trka z ovirami, ki bo znova zagnal igro.
  6. In potem sem zasnoval še dve stopnji ovir.

Korak: Vsi deli

Vsi deli
Vsi deli
Vsi deli
Vsi deli

Tu je seznam vseh delov, ki jih potrebujete:

  1. Arduino UNO in USB priključek:
  2. Štiri modul 8x8: LED matrika https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. Joystick:
  4. 10 moških do ženskih žic:

2. korak: Kako priključiti dele na Arduino

Kako priključiti dele na Arduino
Kako priključiti dele na Arduino

Kako priključiti LED matriko na Arduino

  1. GND gre v GND
  2. VCC preide na 5V
  3. DataIn gre na digitalni pin 12
  4. CLK gre na digitalni pin 11
  5. CS ali LOAD gre na digitalni pin 10

Kako priključiti krmilno palčko

  1. GND gre v GND
  2. 5V gre na 5V
  3. VRx gre na analogni pin A0
  4. VRy gre na analogni pin A1
  5. SW se ne uporablja

Baterijo priključite na vtičnico 9v, da dobite moč Arduina

3. korak: Diagram poteka programa

Diagram poteka programa
Diagram poteka programa

Oval označuje začetek programa.

Prvi korak je opredeliti vse ovire.

Naslednja dva koraka označujeta nastavitev spremenljivk in vklop vseh modulov.

Naslednji korak je nastavitev LED na prvo raven in vse druge spremenljivke.

Naslednji prikaz ravni, na kateri je predvajalnik trenutno.

Romb označuje branje igralne palice, da vidite, v katero smer ga potiskate.

Nato premaknite predvajalnik v katero koli smer, v katero je bila pritisnjena igralna ročica.

Preverite, ali je igralec trčil v oviro.

Če igralec zadene oviro, se vrnite na prvo stopnjo. Če ne, preverite, ali je igralec dosegel konec ravni.

Če je igralec na koncu ravni, nastavite na naslednjo stopnjo in se nato vrnite na "Prikaz trenutne ravni". Če niso na koncu, premaknite ovire in se vrnite na "Preberite igralno palico."

4. korak: Programiranje igralne palice

Seveda, da premaknemo majhno piko na igralcu, potrebujemo igralno palico. in da lahko igralna palica dejansko premakne predvajalnika, jo moramo kodirati v Arduino IDE. Vključiti morate knjižnico LedControl, ki jo najdete, tako da odprete meni za skice> Vključi knjižnice> upravljajte knjižnice in poiščite LedControl. Tukaj je videti koda igralne palice.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Ustvari objekt za štiri module int delaytime = 50; // hitrost, s katero igra teče int joystick_RtLt, joystick_UpDn; int player_x = 0; // vodoravni položaj igralcev od 0 do 31 int players_y = 3; // navpični položaj igralcev od 0 do 7 int vrstica, stolpec, modul; void setup () {initialize_modules (); // vklopimo in nastavimo vse štiri LED module} void loop () {move_player (); // zagon zanke s preverjanjem, ali se igralec premakne zakasnitev (zakasnitev); } void initialize_modules () {lc.shutdown (0, false); // zažene modul 0 lc.setIntensity (0, 1); lc.shutdown (1, napačno); // zažene modul 1 lc.setIntensity (1, 1); lc.zključitev (2, napačno); // zažene modul 2 lc.setIntensity (2, 1); lc.usklop (3, napačno); // zažene modul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // počisti modul 0} void move_player () {module = players_x/8; // določa, v katerem modulu je igralec v stolpcu = players_x%8; // definira stolpec, kjer je igralec v vrstici modula = players_y; lc.setLed (modul, vrstica, stolpec, napačno); // izklop LED na trenutnem položaju igralca joystick_RtLt = analogRead (A0)/204 - 2; // beremo igralno palico X in zemljevid se giblje od 2 do -2, če (joystick_RtLt> 0) // ko je krmilna palica desno od igralcev_x ++; // pojdi desno, če (joystick_RtLt 0) // če je krmilna palica levo in ne na začetku players_x--; // premakni levo krmilno palčko_UpDn = analogRead (A1)/204 - 2; // beremo Y-igralno palico in zemljevid se giblje od 2 do -2 if (joystick_UpDn 0) // če je krmilna palica spuščena in igralec ni na dnu players_y--; // premakni se navzdol else if (joystick_UpDn> 0 && players_y <7) // če je krmilna palica vklopljena in igralec ni na vrhu player_y ++; // gor modul = players_x/8; // nastavite modul na stolpec za novo pozicijo igralcev = players_x%8; // nastavite stolpec za igralce nova pozicija vrstica = players_y; // nastavimo vrstico na igralce novo mesto lc.setLed (modul, vrstica, stolpec, true); // vklopi LED na novem mestu igralca}

Zdaj, ko ste dodali krmilno palčko, se lotimo prve ovire!

5. korak: Prva stopnja

V redu, zdaj je čas, da se lotimo glavnega dela programa, ovir! Ovire so tisto, zaradi česar je ta "najtežja igra na svetu". Torej, če želite dejansko igrati igro, morate svoji kodi dodati to:

bajtna ovira [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// tri ravni, 8 prizorov, 8 dogovorov, 8 vrstic

{{{1, 1, 1, 1, 1, 1, 0, 0}, // prva raven, prvi prizor {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}, // prva stopnja, drugi prizor {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}, // prva stopnja, tretja prizor {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}, // prvi raven, četrti prizor {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}, // prva raven, peti prizor {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}, // prva raven, šesti prizor {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}, // prva stopnja, sedmi prizor {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, 1}, // prva raven, osma prizor {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 (); // vklopimo in nastavimo vse štiri LED module start_level (0); void loop () {move_player (); // zaženemo zanko s preverjanjem, če se igralec premakne if (collision ()) {// preverimo stopnjo trka = 0; // če je trk res, ponastavite raven start_level (level); // znova zaženite igro} else if (delay_count == prepreka_dej) {// če ni trka premakni ovira vsaka druga zamuda moveobstacle (); zaostanek_številk = 0; } else delay_count ++; zamuda (zamik); // zakasnitev glede na hitrost igre}

In to je prva ovira! Če vam je to kot prva stopnja dolgčas, lahko vedno spremenite bajte, ne pozabite, da morate imeti osem različnih prizorov! Nadaljujmo z naslednjim korakom, odkrivanjem trkov!

6. korak: Zaznavanje trka

Ta korak je še en pomemben del igre, saj brez njega ne bi bilo veliko izzivov! lahko bi se prebili skozi ovire brez posledic! to ne bi bilo zabavno kajne? zato naredimo igro bolj zahtevno (in veliko bolj zabavno!), tako da dodamo ta razdelek programa:

void loop () {

move_player (); // zaženemo zanko s preverjanjem, če se igralec premakne if (collision ()) {// preverimo stopnjo trka = 0; // če je trk res, ponastavite raven start_level (level); // znova zaženite igro} else if (delay_count == prepreka_dej) {// če ni trka premakni ovira vsaka druga zamuda moveobstacle (); zaostanek_številk = 0; } else delay_count ++; zamuda (zamik); // zakasnitev glede na hitrost igre} int collision () {// preveri, če igralec zadene oviro v modulu scene = players_x/8; stolpec = igralci_x%8; vrstica = igralci_y; if (modul> 0) if (ovira [raven] [prizor] [stolpec] [vrstica] == 1) // če je položaj igralca enak vračanju ovire (1); // odkrit trk return true return (0); // no colllision return false}

In tu ste! zdaj lahko v igri uživate veliko več! Zdaj vam bom pokazal, kako programirati zadnji dve stopnji igre! s tem navodilom ste skoraj končali in prepričan sem, da ste ga pripravljeni preizkusiti!

7. korak: Zadnji dve ravni

Ko se je pouk približal, sta zadnji dve ravni vse, kar potrebujete za dokončanje te igre. Potem lahko sami preizkusite! tukaj je koda:

bajtna ovira [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// druga in tretja raven, 8 prizorov, 8 stolpcev, 8 vrstic

{{{1, 0, 0, 0, 0, 0, 0, 1}, // druga raven, prvi prizor {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}, // druga raven, drugi prizor {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}, // druga raven, tretji prizor {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}, // četrti prizor druge stopnje {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}, // druga stopnja, pet prizor {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}, // druga raven, šesti prizor {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}, // druga raven, sedmi prizor {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}, // osmi prizor druge stopnje {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}, // tretja raven, prvi prizor {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}, // tretja raven, drugi prizor {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}, // tretja raven, tretji prizor {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}, // tretja raven, četrti prizor {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}, // tretja raven, peti prizor {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}, // tretja raven, šesti prizor {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}, // tretja stopnja, sedmi prizor {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}, // tretja raven, osmi prizor { 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}}}};

In to je to! ste pripravljeni, da poskusite dokončati najtežjo igro na svetu. Spodaj je priložena tudi celotna koda Arduino.

Priporočena: