Innehållsförteckning:
- Steg 1: Alla delar
- Steg 2: Hur du ansluter delarna till Arduino
- Steg 3: Flödesschema för programmet
- Steg 4: Programmering av joysticken
- Steg 5: Första nivån
- Steg 6: Kollisionsdetektering
- Steg 7: De två sista nivåerna
Video: Återskapa världens hårdaste spel på Arduino: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
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.
- Jag samlade alla delar som behövs.
- Jag kopplade ihop delarna.
- Jag skrev en skiss som använde joysticken för att flytta spelarens LED över alla moduler.
- Jag designade de första hindren och lade dem till skissen så att de efterliknade världens hårdaste spel.
- Jag lade sedan till kod för att upptäcka en kollision med hindren, som kommer att starta om spelet.
- Och sedan utformade jag ytterligare två nivåer av hinder.
Steg 1: Alla delar
Här är en lista över alla delar du behöver:
- En Arduino UNO- och usb-kontakt:
- En fyrmodul 8x8: LED-matris https://www.banggood.com/MAX7219-Dot-Matrix-Module..
- En joystick:
- 10 ledningar från man till hona:
Steg 2: Hur du ansluter delarna till Arduino
Hur man ansluter LED -matrisen till Arduino
- GND går till GND
- VCC går till 5V
- DataIn går till digital pin 12
- CLK går till digital pin 11
- CS eller LOAD går till digital pin 10
Hur man ansluter joysticken
- GND går till GND
- 5V går till 5V
- VRx går till analog pin A0
- VRy går till analog stift A1
- SW används inte
Batteriet ansluts till 9v -uttaget för att ge Arduino ström
Steg 3: 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:
Aruduino LED -spel Snabbt klickande spel för två spelare: 8 steg
Aruduino LED -spel Snabbklickande spel för två spelare: Detta projekt är inspirerat av @HassonAlkeim. Om du är villig att ta en djup titt här är en länk som du kan kolla in https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Detta spel är en förbättrad version av Alkeims. Det är en
Vänd den! - Världens dummaste spel?: 7 steg (med bilder)
Vänd den! - Världens dummaste spel ?: Origins: Det här är ett spel jag utvecklat under ett par år 2018-2019 Det hette ursprungligen " Dumma vändning " och kom ur mitt intresse för att skapa enkla och roliga interaktiva spel som också kan användas för att lära ut kodning. Detta är abo
Hur man laddar upp spel till Arduboy och 500 spel till Flash-cart: 8 steg
Hur man laddar upp spel till Arduboy och 500 spel till Flash-cart: Jag gjorde några hemlagade Arduboy med Serial Flash-minne som kan lagra max 500 spel att spela på vägen. Jag hoppas kunna dela hur man laddar spel till det, inklusive hur man lagrar spel i det seriella flashminnet och skapar ett eget konsoliderat spelpaket
Återskapa en 1955 -transistorradio till liv: 7 steg
Att återuppliva en 1955 -transistorradio: Jag köpte nyligen denna Zenith Royal -transistorradio från 1955 nyligen och när jag inspekterade utsidan var den i mycket gott skick, med tanke på att den är 63 år gammal. Allt var där, inklusive det ursprungliga klistermärket på radion. Jag gjorde några r
DIY MusiLED, musiksynkroniserade lysdioder med ett klick Windows och Linux-applikation (32-bitars och 64-bitars). Lätt att återskapa, lätt att använda, lätt att porta .: 3 steg
DIY MusiLED, musiksynkroniserade lysdioder med ett klick Windows och Linux-applikation (32-bitars och 64-bitars). Lätt att återskapa, lätt att använda, lätt att porta .: Detta projekt hjälper dig att ansluta 18 lysdioder (6 röda + 6 blå + 6 gula) till ditt Arduino-kort och analysera datorns ljudkortets realtidsignaler och vidarebefordra dem till lysdioderna för att tända dem enligt slageffekterna (Snare, High Hat, Kick)