Innehållsförteckning:

Återskapa världens hårdaste spel på Arduino: 7 steg
Återskapa världens hårdaste spel på Arduino: 7 steg

Video: Återskapa världens hårdaste spel på Arduino: 7 steg

Video: Återskapa världens hårdaste spel på Arduino: 7 steg
Video: Gör om det ikoniska Gravis Ultrasound - med Ian Scott 2024, November
Anonim
Image
Image

Detta projekt är baserat på ett dataspel som du kan hitta online. Dess namn är "Världens hårdaste spel". Jag kunde återskapa den på Arduino med hjälp av en fyrmodulig LED-matris. I den här instruerbara lär jag dig hur du konstruerar det själv. Innan vi går in på för många detaljer vill jag ge en snabb överblick över stegen jag gick igenom för att skapa detta spel.

  1. Jag samlade alla delar som behövs.
  2. Jag kopplade ihop delarna.
  3. Jag skrev en skiss som använde joysticken för att flytta spelarens LED över alla moduler.
  4. Jag designade de första hindren och lade dem till skissen så att de efterliknade världens hårdaste spel.
  5. Jag lade sedan till kod för att upptäcka en kollision med hindren, som kommer att starta om spelet.
  6. Och sedan utformade jag ytterligare två nivåer av hinder.

Steg 1: Alla delar

Alla delar
Alla delar
Alla delar
Alla delar

Här är en lista över alla delar du behöver:

  1. En Arduino UNO- och usb-kontakt:
  2. En fyrmodul 8x8: LED-matris https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. En joystick:
  4. 10 ledningar från man till hona:

Steg 2: Hur du ansluter delarna till Arduino

Hur man ansluter delarna till Arduino
Hur man ansluter delarna till Arduino

Hur man ansluter LED -matrisen till Arduino

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

Hur man ansluter joysticken

  1. GND går till GND
  2. 5V går till 5V
  3. VRx går till analog pin A0
  4. VRy går till analog stift A1
  5. SW används inte

Batteriet ansluts till 9v -uttaget för att ge Arduino ström

Steg 3: Flödesschema för programmet

Flödesschema för programmet
Flödesschema för programmet

Ovalen indikerar programmets start.

Det första steget är att definiera alla hinder.

De två följande stegen indikerar inställning av variablerna och aktivering av alla moduler.

Nästa steg är att ställa in lysdioderna till första nivån och eventuella andra variabler.

Visa sedan nivån som spelaren är på för närvarande.

Romben indikerar att man läser joysticken för att se åt vilket håll den skjuts.

Flytta sedan spelaren åt vilket håll som styrspaken trycktes.

Kontrollera och se om spelaren krockade med ett hinder.

Om spelaren träffade ett hinder, gå tillbaka till första nivån. Om inte, kontrollera om spelaren nått slutet av nivån.

Om spelaren är i slutet av nivån, gå till nästa nivå och gå sedan tillbaka till "Visa aktuell nivå". Om de inte är i slutet, flytta hindren och gå tillbaka till "Läs joystick".

Steg 4: Programmering av joysticken

Naturligtvis för att flytta den lilla pricken som är spelaren behöver vi en joystick. och för att låta joysticken faktiskt flytta spelaren måste vi koda den i Arduino IDE. Du måste inkludera LedControl -biblioteket som du hittar genom att gå till skissmenyn> Inkludera bibliotek> hantera bibliotek och söka efter LedControl. Så här ser koden för joysticken ut.

#inkludera "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Skapar objekt för fyra moduler int delay = 50; // hastighet med vilket spel körs int joystick_RtLt, joystick_UpDn; int spelare_x = 0; // spelare horisontell position från 0 till 31 int spelare_y = 3; // spelare vertikal position från 0 till 7 int rad, kolumn, modul; void setup () {initialize_modules (); // slå på och ställ in alla fyra ledmoduler} void loop () {move_player (); // starta loop genom att kontrollera om spelaren flyttar fördröjning (fördröjningstid); } void initialize_modules () {lc.shutdown (0, false); // startar modul 0 lc.setIntensity (0, 1); lc.avstängning (1, falskt); // startar modul 1 lc.setIntensity (1, 1); lc.avstängning (2, falskt); // startar upp modul 2 lc.setIntensity (2, 1); lc.avstängning (3, falskt); // startar upp modul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // rensar modul 0} void move_player () {module = players_x/8; // definierar vilken modul spelaren befinner sig i kolumn = spelare_x%8; // definierar kolumnen där spelaren är på modulraden = spelare_y; lc.setLed (modul, rad, kolumn, falsk); // stäng av led vid spelarens nuvarande position joystick_RtLt = analogRead (A0)/204 - 2; // läs X -joystick och kartintervall från 2 till -2 om (joystick_RtLt> 0) // när joystick är till rätt spelare_x ++; // gå åt höger annars om (joystick_RtLt 0) // om joysticken är till vänster och inte i början spelare_x--; // flytta vänster joystick_UpDn = analogRead (A1)/204 - 2; // läs Y-joystick och kartintervall från 2 till -2 om (joystick_UpDn 0) // om joysticken är nere och spelaren inte är i botten spelare_y--; // flytta nedåt annat om (joystick_UpDn> 0 && players_y <7) // om joystick är uppe och spelaren inte är i topp player_y ++; // gå upp modul = spelare_x/8; // ställ in modul till spelare ny positionskolumn = spelare_x%8; // ställ in kolumn till spelare ny position rad = spelare_y; // ställ in rad till spelare ny position lc.setLed (modul, rad, kolumn, true); // slå på LED på spelarens nya position}

Nu när du har lagt till joysticken, låt oss arbeta med det första hindret!

Steg 5: Första nivån

Okej, så nu är det dags att gå in på programmets huvuddel, hindren! Hindren är det som verkligen gör detta till "Världens hårdaste spel". Så om du verkligen vill spela spelet måste du lägga till detta i din kod:

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

{{{1, 1, 1, 1, 1, 1, 0, 0}, // första nivå, första scen {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örsta nivå, andra scen {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örsta nivån, tredje scen {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å, fjärde scen {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örsta nivån, femte scen {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örsta nivån, sjätte scen {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örsta nivå, sjunde scen {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örsta nivån, åttonde scen {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 (); // slå på och ställ in alla fyra ledmodulerna start_level (0); void loop () {move_player (); // starta loop genom att kontrollera om spelaren rör sig om (kollision ()) {// kolla kollisionsnivå = 0; // om kollisionen är sann, återställ nivå start_level (nivå); // starta om spelet} annars om (delay_count == hinder_fördröjning) {// om ingen kollision flyttar hinder varannan fördröjning flyttar hinder (); delay_count = 0; } annars delay_count ++; fördröjning (fördröjningstid); // fördröjning med spelets hastighet}

Och det är det första hindret! Om du blir uttråkad av detta som din första nivå kan du alltid ändra byte, kom bara ihåg att du måste ha åtta olika scener! Låt oss fortsätta till nästa steg, kollisionsdetektering!

Steg 6: Kollisionsdetektering

Detta steg är en annan viktig del av spelet, utan det skulle det inte bli någon större utmaning! du kan bara väva dig igenom hindren utan några konsekvenser! det vore väl inte så roligt? så låt oss göra spelet mer utmanande (och mycket mer underhållande!) genom att lägga till den här delen av programmet:

void loop () {

move_player (); // starta loop genom att kontrollera om spelaren rör sig om (kollision ()) {// kolla kollisionsnivå = 0; // om kollisionen är sann, återställ nivå start_level (nivå); // starta om spelet} annars om (delay_count == hinder_fördröjning) {// om ingen kollision flyttar hinder varannan fördröjning flyttar hinder (); delay_count = 0; } annars delay_count ++; fördröjning (fördröjningstid); // fördröjning med spelets hastighet} int kollision () {// kontrollera om spelaren träffade ett hinder i scenmodulen = spelare_x/8; kolumn = spelare_x%8; rad = spelare_y; if (modul> 0) if (hinder [nivå] [scen] [kolumn] [rad] == 1) // om spelarens position är samma som hinderretur (1); // kollisionsdetekterad retur sant retur (0); // ingen kollision retur falsk}

Och där går du! nu kan du njuta av spelet mycket mer! Nu ska jag visa dig hur du programmerar de två sista nivåerna i spelet! du är nästan klar med detta instruerbara, och jag är säker på att du är redo att testa det!

Steg 7: De två sista nivåerna

När det var slut på det instruerbara är de två sista nivåerna allt du behöver för att avsluta det här spelet. Då kan du prova själv! här är koden:

bytehinder [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// andra och tredje nivå, 8 scener, 8 kolumner, 8 rader

{{{1, 0, 0, 0, 0, 0, 0, 1}, // andra nivå, första scen {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}, // andra nivå, andra scen {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}, // andra nivå, tredje scen {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}, // andra nivå fjärde scen {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}, // andra nivå, fif scen {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}, // andra nivån, sjätte scen {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}, // andra nivån, sjunde scen {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}, // andra nivå åttonde scen {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örsta scen {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å, andra scen {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 scen {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å, fjärde scen {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 scen {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å, sjätte scen {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å, sjunde scen {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å, åttonde scen { 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}}}};

Och det är allt! du är redo att försöka slutföra världens hårdaste spel. Den fullständiga Arduino -koden bifogas nedan.

Rekommenderad: