Indholdsfortegnelse:

Genskab af verdens hårdeste spil på Arduino: 7 trin
Genskab af verdens hårdeste spil på Arduino: 7 trin

Video: Genskab af verdens hårdeste spil på Arduino: 7 trin

Video: Genskab af verdens hårdeste spil på Arduino: 7 trin
Video: Adam vs. World's Best 16-year-old 2024, Juli
Anonim
Image
Image

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.

  1. Jeg samlede alle de nødvendige dele.
  2. Jeg forbandt delene.
  3. Jeg skrev en skitse, der brugte joysticket til at flytte afspillerens LED på tværs af alle modulerne.
  4. Jeg designede de første forhindringer og tilføjede dem til skitsen, så de efterlignede verdens hårdeste spil.
  5. Jeg tilføjede derefter kode for at opdage en kollision med forhindringerne, som genstarter spillet.
  6. Og så designede jeg yderligere to niveauer af forhindringer.

Trin 1: Alle dele

Alle dele
Alle dele
Alle dele
Alle dele

Her er en liste over alle de dele, du har brug for:

  1. Et Arduino UNO- og usb-stik:
  2. Et fire-modul 8x8: LED-matrix
  3. Et joystick:
  4. 10 ledninger til hun:

Trin 2: Sådan tilsluttes delene til Arduino

Sådan tilsluttes delene til Arduino
Sådan tilsluttes delene til Arduino

Sådan tilsluttes LED -matrixen 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

Sådan tilsluttes joysticket

  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 bruges ikke

Batteriet tilsluttes 9v -stikket for at give Arduino strøm

Trin 3: Flowdiagram over programmet

Programoversigt
Programoversigt

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: