Indholdsfortegnelse:
- Trin 1: Alle dele
- Trin 2: Sådan tilsluttes delene til Arduino
- Trin 3: Flowdiagram over programmet
- Trin 4: Programmering af joysticket
- Trin 5: Det første niveau
- Trin 6: Kollisionsdetektion
- Trin 7: De sidste to niveauer
Video: Genskab af verdens hårdeste spil på Arduino: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Dette projekt er baseret på et computerspil, som du kan finde online. Dets navn er "Verdens hårdeste spil." Jeg var i stand til at genskabe det på Arduino ved hjælp af en fire modul LED Matrix. I denne instruktive lærer jeg dig, hvordan du konstruerer det selv. Inden vi går i gang med for mange detaljer, vil jeg give et hurtigt overblik over de trin, jeg gik igennem for at skabe dette spil.
- Jeg samlede alle de nødvendige dele.
- Jeg forbandt delene.
- Jeg skrev en skitse, der brugte joysticket til at flytte afspillerens LED på tværs af alle modulerne.
- Jeg designede de første forhindringer og tilføjede dem til skitsen, så de efterlignede verdens hårdeste spil.
- Jeg tilføjede derefter kode for at opdage en kollision med forhindringerne, som genstarter spillet.
- Og så designede jeg yderligere to niveauer af forhindringer.
Trin 1: Alle dele
Her er en liste over alle de dele, du har brug for:
- Et Arduino UNO- og usb-stik:
- Et fire-modul 8x8: LED-matrix
- Et joystick:
- 10 ledninger til hun:
Trin 2: Sådan tilsluttes delene til Arduino
Sådan tilsluttes LED -matrixen til Arduino
- GND går til GND
- VCC går til 5V
- DataIn går til digital pin 12
- CLK går til digital pin 11
- CS eller LOAD går til digital pin 10
Sådan tilsluttes joysticket
- GND går til GND
- 5V går til 5V
- VRx går til analog pin A0
- VRy går til analog pin A1
- SW bruges ikke
Batteriet tilsluttes 9v -stikket for at give Arduino strøm
Trin 3: Flowdiagram over programmet
Den ovale angiver programmets start.
Det første trin er at definere alle forhindringer.
De næste to trin angiver indstilling af variablerne og tænding af alle modulerne.
Det næste trin er at indstille LED'erne til det første niveau og andre variabler.
Vis derefter det niveau, afspilleren er i øjeblikket på.
Rhombus angiver at læse joysticket for at se hvilken retning det skubbes.
Flyt derefter afspilleren i den retning, joysticket blev skubbet.
Kontroller, om spilleren stødte med en forhindring.
Hvis spilleren ramte en forhindring, skal du gå tilbage til det første niveau. Hvis ikke, skal du kontrollere, om spilleren nåede slutningen af niveauet.
Hvis spilleren er ved slutningen af niveauet, skal du indstille til næste niveau og derefter gå tilbage til, "Vis aktuelt niveau.". Hvis de ikke er i slutningen, skal du flytte forhindringerne og gå tilbage til "Læs joystick".
Trin 4: Programmering af joysticket
For at flytte den lille prik, der er spilleren, har vi selvfølgelig brug for et joystick. og for at lade joysticket rent faktisk flytte afspilleren, skal vi kode det i Arduino IDE. Du skal inkludere LedControl -biblioteket, som du kan finde ved at gå til skitsemenuen> Inkluder biblioteker> administrere biblioteker og søge efter LedControl. Sådan ser koden til joysticket ud.
#include "LedControl.h"
int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Opretter objekt til fire moduler int delay = 50; // hastighed, hvormed spillet kører int joystick_RtLt, joystick_UpDn; int spillere_x = 0; // spillerens vandrette position fra 0 til 31 int spillere_y = 3; // spillere lodret position fra 0 til 7 int række, kolonne, modul; void setup () {initialize_modules (); // tænd og indstil alle fire LED -moduler} void loop () {move_player (); // start loop ved at kontrollere, om spilleren flytter forsinkelse (forsinkelse); } ugyldig initialize_modules () {lc.shutdown (0, false); // starter modul 0 lc.setIntensity (0, 1) op; lc.lukning (1, falsk); // starter modul 1 lc.setIntensity (1, 1) op; lc.lukning (2, falsk); // starter modul 2 lc.setIntensity (2, 1) op; lc.lukning (3, falsk); // starter modul 3 lc.setIntensity (3, 1) op; lc.clearDisplay (0); // rydder modul 0} void move_player () {module = players_x/8; // definerer hvilket modul afspilleren er på kolonne = spillere_x%8; // definerer den kolonne, hvor spilleren er på modulrækken = spillere_y; lc.setLed (modul, række, kolonne, falsk); // sluk led ved spillerens nuværende position joystick_RtLt = analogRead (A0)/204 - 2; // læs X -joystick og kortinterval fra 2 til -2 hvis (joystick_RtLt> 0) // når joystick er til den rigtige player_x ++; // gå til højre ellers hvis (joystick_RtLt 0) // hvis joystick er til venstre og ikke i begyndelsen spillere_x--; // flyt venstre joystick_UpDn = analogRead (A1)/204 - 2; // læs Y-joystick og kortområde fra 2 til -2 hvis (joystick_UpDn 0) // hvis joystick er nede, og afspilleren ikke er i bunden player_y--; // flytte ned andet hvis (joystick_UpDn> 0 && players_y <7) // hvis joystick er oppe og afspilleren ikke er i top player_y ++; // gå op modul = spillere_x/8; // sæt modul til spillere ny position kolonne = spillere_x%8; // sæt kolonne til spillere ny position række = spillere_y; // sæt række til spillere ny position lc.setLed (modul, række, kolonne, sand); // Tænd LED på spillerens nye position}
Nu hvor du har tilføjet joysticket, lad os arbejde på den første forhindring!
Trin 5: Det første niveau
Okay, så nu er det tid til at komme ind på hoveddelen af programmet, forhindringerne! Hindringerne er det, der virkelig gør dette til, "Verdens hårdeste spil." Så hvis du rent faktisk vil spille spillet, skal du føje dette til din kode:
byte forhindring [NIVEAUER] [SCENES] [COLUMNS] [ROWS] = {// tre niveauer, 8 scener, 8 collums, 8 rækker
{{{1, 1, 1, 1, 1, 1, 0, 0}, // første niveau, 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 niveau, anden 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 niveau, 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 niveau, 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 niveau, 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, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // første niveau, 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 niveau, 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 niveau, ottende 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}, {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 opsætning () {initialize_modules (); // Tænd og indstil alle fire LED -moduler start_level (0); void loop () {move_player (); // start loop ved at kontrollere, om spilleren bevæger sig, hvis (collision ()) {// check for collision level = 0; // hvis kollision er sand, nulstil niveau start_level (niveau); // genstart spillet} ellers hvis (delay_count == obstacle_delay) {// hvis ingen kollision bevæger hindring hver anden forsinkelse moveobstacle (); delay_count = 0; } ellers delay_count ++; forsinkelse (forsinkelse); // forsinkelse med spilhastighed}
Og det er den første forhindring! Hvis du keder dig med dette som dit første niveau, kan du altid ændre bytes, bare husk at du skal have otte forskellige scener! Lad os fortsætte til det næste trin, kollisionsdetektion!
Trin 6: Kollisionsdetektion
Dette trin er en anden vigtig del af spillet, uden det ville der ikke være meget af en udfordring! du kunne bare væve dig igennem forhindringerne uden konsekvenser! det ville ikke være meget sjovt, ikke? så lad os gøre spillet mere udfordrende (og meget mere underholdende!) ved at tilføje dette afsnit af programmet:
void loop () {
move_player (); // start loop ved at kontrollere, om spilleren bevæger sig, hvis (collision ()) {// check for collision level = 0; // hvis kollision er sand, nulstil niveau start_level (niveau); // genstart spillet} ellers hvis (delay_count == hinder_forsinkelse) {// hvis ingen kollision bevæger hindring hver anden forsinkelse bevægelse forhindring (); delay_count = 0; } ellers delay_count ++; forsinkelse (forsinkelse); // forsinkelse med spilhastighed} int kollision () {// tjek om spilleren ramte en forhindring i scenemodul = players_x/8; kolonne = spillere_x%8; række = spillere_y; hvis (modul> 0) hvis (forhindring [niveau] [scene] [kolonne] [række] == 1) // hvis spillerens position er den samme som forhindringsretur (1); // kollision detekteret return true true return (0); // ingen kollisionsretur falsk}
Og der går du! nu kan du nyde spillet meget mere! Nu vil jeg vise dig, hvordan du programmerer de sidste to niveauer i spillet! du er næsten færdig med dette instruerbare, og jeg er sikker på, at du er klar til at prøve det!
Trin 7: De sidste to niveauer
Kommer til slutningen af det instruerbare, er disse sidste to niveauer alt hvad du behøver for at afslutte dette spil. Så kan du prøve det selv! her er koden:
bytehindring [NIVEAUER] [SCENES] [COLUMNS] [ROWS] = {// andet og tredje niveau, 8 scener, 8 kolonner, 8 rækker
{{{1, 0, 0, 0, 0, 0, 0, 1}, // andet niveau, 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}, // andet niveau, anden 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}, // andet niveau, 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}, // andet niveau 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}, // andet niveau, 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}, // andet niveau, 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}, // andet niveau, 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}, // andet niveau ottende 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 niveau, 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 niveau, anden 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 niveau, 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 niveau, 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 niveau, 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 niveau, 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 niveau, 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 niveau, ottende 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 at forsøge at fuldføre verdens hårdeste spil. Den fulde Arduino -kode er vedhæftet herunder.
Anbefalede:
Spil Nintendo -spil på Idevice med en Wiimote gratis !: 6 trin
Spil Nintendo -spil på Idevice med en Wiimote gratis!: Har du nogensinde gået til appbutikken for at få et Super Nintendo -spil, men du kan ikke finde et at spille. Nå nu kan du spille disse nintendo -spil med snes -emulatoren fra cydia. Denne emulator giver dig mulighed for at spille Nintendo -spil på din enhed, selv med
Aruduino LED -spil Hurtigt klik på to -spiller -spil: 8 trin
Aruduino LED -spil Hurtigt klikende spil for to spillere: Dette projekt er inspireret af @HassonAlkeim. Hvis du er villig til at kigge dybt, er her et link, du kan tjekke https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Dette spil er en forbedret version af Alkeims. Det er en
Vend den! - Verdens dummeste spil?: 7 trin (med billeder)
Vend den! - Verdens dummeste spil ?: Origins: Dette er et spil, jeg udviklede i løbet af et par år 2018-2019 Det blev oprindeligt kaldt " Stupid Flip " og kom ud af min interesse i at skabe enkle og sjove interaktive spil, der også kunne bruges til undervisning i kodning. Dette er abo
Spil Flappy Bird -spil med M5stack Esp32 -baseret M5stick C Development Board: 5 trin
Spil Flappy Bird-spil med M5stack Esp32-baseret M5stick C Development Board: Hej fyre i dag vil vi lære at uploade flappy bird-spilkoden til m5stick c udviklingsbræt leveret af m5stack.For dette lille projekt skal du bruge to ting: m5stick-c udviklingstavle: https://www.utsource.net/itm/p/8663561.h
Spil et PONG -spil med Arduino Uno og OLED 0.96 SSD1306 Display: 6 trin
Spil et PONG -spil med Arduino Uno og OLED 0.96 SSD1306 Display: Hej fyre i dag laver vi et PONG -spil med Arduino. Vi vil bruge adafruit's 0,96 oled display til at vise spillet & trykknapper for at styre spillet