Innholdsfortegnelse:

Gjenopprett verdens vanskeligste spill på Arduino: 7 trinn
Gjenopprett verdens vanskeligste spill på Arduino: 7 trinn

Video: Gjenopprett verdens vanskeligste spill på Arduino: 7 trinn

Video: Gjenopprett verdens vanskeligste spill på Arduino: 7 trinn
Video: Minecraft Live 2022 2024, Juli
Anonim
Image
Image

Dette prosjektet er basert på et dataspill som du kan finne online. Navnet er "The Worlds Hardest Game." Jeg klarte å lage den på Arduino på nytt ved hjelp av en fire-modul LED Matrix. I denne instruksen lærer jeg deg hvordan du konstruerer det selv. Før vi går inn på for mange detaljer, vil jeg gi en rask oversikt over trinnene jeg gikk gjennom for å lage dette spillet.

  1. Jeg samlet alle nødvendige deler.
  2. Jeg koblet delene sammen.
  3. Jeg skrev en skisse som brukte joysticken til å flytte spillerens LED på tvers av alle modulene.
  4. Jeg designet de første hindringene og la dem til skissen slik at de etterlignet verdens vanskeligste spill.
  5. Jeg la deretter til kode for å oppdage en kollisjon med hindringene, som starter spillet på nytt.
  6. Og så designet jeg ytterligere to nivåer av hindringer.

Trinn 1: Alle delene

Alle delene
Alle delene
Alle delene
Alle delene

Her er en liste over alle delene du trenger:

  1. En Arduino UNO og usb-kontakt:
  2. En firemodul 8x8: LED-matrise
  3. En joystick:
  4. 10 mannlige til hunnledninger:

Trinn 2: Slik kobler du delene til Arduino

Hvordan koble delene til Arduino
Hvordan koble delene til Arduino

Hvordan koble LED -matrisen til Arduino

  1. GND går til GND
  2. VCC går til 5V
  3. DataIn går til digital pin 12
  4. CLK går til digital pin 11
  5. CS eller LOAD går til digital pin 10

Slik kobler du til joysticken

  1. GND går til GND
  2. 5V går til 5V
  3. VRx går til analog pin A0
  4. VRy går til analog pin A1
  5. SW brukes ikke

Batteriet kobles til 9v -kontakten for å gi Arduino strøm

Trinn 3: Flytdiagram for programmet

Flytdiagram for programmet
Flytdiagram for programmet

Den ovale indikerer starten på programmet.

Det første trinnet er å definere alle hindringene.

De to neste trinnene angir å sette variablene og slå på alle modulene.

Det neste trinnet er å sette lysdiodene til det første nivået og andre variabler.

Vis deretter nivået som spilleren er på nå.

Romben indikerer at du leser styrespaken for å se hvilken retning den skyves.

Flytt deretter spilleren i hvilken retning styrespaken ble presset.

Sjekk og se om spilleren kolliderte med en hindring.

Hvis spilleren traff et hinder, gå tilbake til første nivå. Hvis ikke, sjekk om spilleren nådde slutten av nivået.

Hvis spilleren er på slutten av nivået, sett til neste nivå og gå tilbake til "Vis nåværende nivå.". Hvis de ikke er på slutten, flytter du hindringene og går tilbake til, "Les styrespaken."

Trinn 4: Programmering av styrespaken

Selvfølgelig for å flytte den lille prikken som er spilleren, trenger vi en joystick. og for å la joysticken faktisk flytte spilleren må vi kode den i Arduino IDE. Du må inkludere LedControl -biblioteket som du finner ved å gå til skisse -menyen> Inkluder biblioteker> administrere biblioteker og søke etter LedControl. Slik ser koden for joysticken ut.

#inkludere "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Oppretter objekt for fire moduler int delay = 50; // hastigheten som spillet kjører int joystick_RtLt, joystick_UpDn; int spillere_x = 0; // spillerens horisontale posisjon fra 0 til 31 int spillere_y = 3; // spillere vertikal posisjon fra 0 til 7 int rad, kolonne, modul; ugyldig oppsett () {initialize_modules (); // slå på og sett alle fire LED -modulene} void loop () {move_player (); // start loop ved å sjekke om spilleren flytter forsinkelse (forsinkelse); } ugyldig initialize_modules () {lc.shutdown (0, false); // starter modul 0 lc.setIntensity (0, 1); lc.stopp (1, usant); // starter opp modul 1 lset. setIntensity (1, 1); lc.stopp (2, usann); // starter opp modul 2 lc.setIntensity (2, 1); lc.stopp (3, usann); // starter opp modul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // sletter modul 0} void move_player () {module = players_x/8; // definerer hvilken modul spilleren er i kolonne = spillere_x%8; // definerer kolonnen der spilleren er på modulraden = spillere_y; lc.setLed (modul, rad, kolonne, usann); // slå av led på spillerens nåværende posisjon joystick_RtLt = analogRead (A0)/204 - 2; // les X -joystick og kartområde fra 2 til -2 hvis (joystick_RtLt> 0) // når joystick er til høyre spillere_x ++; // gå til høyre hvis (joystick_RtLt 0) // hvis joystick er til venstre og ikke i begynnelsen spillere_x--; // flytt venstre joystick_UpDn = analogRead (A1)/204 - 2; // les Y-joystick og kartområde fra 2 til -2 hvis (joystick_UpDn 0) // hvis joystick er nede og spilleren ikke er nederst spillere_y--; // flytt nedover hvis (joystick_UpDn> 0 && players_y <7) // hvis joystick er oppe og spilleren ikke er i topp player_y ++; // gå opp modul = spillere_x/8; // sett modul til spillere ny posisjonskolonne = spillere_x%8; // sett kolonne til spillere ny posisjon rad = spillere_y; // sett rad til spillere ny posisjon lc.setLed (modul, rad, kolonne, true); // slå på led på spillerens nye posisjon}

Nå som du har lagt til joysticken, la oss jobbe med det første hinderet!

Trinn 5: Det første nivået

OK, så nå er det på tide å komme inn på hoveddelen av programmet, hindringene! Hindringene er det som virkelig gjør dette til, "Verdens vanskeligste spill." Så hvis du faktisk vil spille spillet, må du legge dette til koden din:

bytehinder [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// tre nivåer, 8 scener, 8 collums, 8 rader

{{{1, 1, 1, 1, 1, 1, 0, 0}, // første nivå, første scene {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}, // første nivå, andre scene {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}, // første nivå, tredje scene {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}, // først nivå, fjerde scene {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}, // første nivå, femte scene {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}, // første nivå, sjette scene {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}, // første nivå, syvende scene {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}, // første nivå, åttende scene {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}}}, ugyldig oppsett () {initialize_modules (); // Slå på og sett alle fire LED -modulene start_level (0); void loop () {move_player (); // start sløyfe ved å sjekke om spilleren beveger seg hvis (kollisjon ()) {// sjekk for kollisjonsnivå = 0; // hvis kollisjonen er sann, tilbakestill nivå start_level (nivå); // start spillet på nytt} else if (delay_count == hinder_forsinkelse) {// hvis ingen kollisjon beveger hinder annenhver forsinkelse moveobstacle (); delay_count = 0; } annet delay_count ++; forsinkelse (forsinkelse); // forsinkelse etter spillets hastighet}

Og det er den første hindringen! Hvis du blir lei av dette som ditt første nivå, kan du alltid bytte byte, bare husk at du må ha åtte forskjellige scener! La oss fortsette til neste trinn, kollisjonsdeteksjon!

Trinn 6: Kollisjonsdeteksjon

Dette trinnet er en annen viktig del av spillet, uten det ville det ikke vært mye av en utfordring! du kan bare veve deg gjennom hindringene uten konsekvenser! det ville ikke vært mye moro? så la oss gjøre spillet mer utfordrende (og mye mer underholdende!) ved å legge til denne delen av programmet:

void loop () {

move_player (); // start sløyfe ved å sjekke om spilleren beveger seg hvis (kollisjon ()) {// sjekk for kollisjonsnivå = 0; // hvis kollisjonen er sann, tilbakestill nivå start_level (nivå); // start spillet på nytt} else if (delay_count == hinder_forsinkelse) {// hvis ingen kollisjon beveger hinderet annenhver forsinkelse flyttingshindring (); delay_count = 0; } annet delay_count ++; forsinkelse (forsinkelse); // forsinkelse med spillets hastighet} int kollisjon () {// sjekk om spilleren traff et hinder i scenemodulen = players_x/8; kolonne = spillere_x%8; rad = spillere_y; if (modul> 0) if (hinder [nivå] [scene] [kolonne] [rad] == 1) // hvis spillerens posisjon er den samme som hinderretur (1); // kollisjon oppdaget retur sant avkastning (0); // ingen kollisjonsretur falsk}

Og der går du! nå kan du nyte spillet mye mer! Nå skal jeg vise deg hvordan du programmerer de to siste nivåene i spillet! du er nesten ferdig med dette instruerbare, og jeg er sikker på at du er klar til å prøve det!

Trinn 7: De to siste nivåene

Kommer til slutten av det instruerbare, er de to siste nivåene alt du trenger for å fullføre dette spillet. Da kan du prøve det selv! her er koden:

bytehinder [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// andre og tredje nivå, 8 scener, 8 kolonner, 8 rader

{{{1, 0, 0, 0, 0, 0, 0, 1}, // andre nivå, første scene {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}, // andre nivå, andre scene {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}, // andre nivå, tredje scene {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}, // andre nivå fjerde scene {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}, // andre nivå, fif scene {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}, // andre nivå, sjette scene {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}, // andre nivå, syvende scene {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}, // andre nivå åttende scene {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}, // tredje nivå, første scene {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}, // tredje nivå, andre scene {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}, // tredje nivå, tredje scene {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}, // tredje nivå, fjerde scene {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}, // tredje nivå, femte scene {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}, // tredje nivå, sjette scene {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}, // tredje nivå, syvende scene {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}, // tredje nivå, åttende scene { 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}}}};

Og det er det! du er klar til å prøve å fullføre verdens vanskeligste spill. Den fulle Arduino -koden er vedlagt nedenfor.

Anbefalt: