Inhoudsopgave:

Het moeilijkste spel ter wereld opnieuw maken op de Arduino: 7 stappen
Het moeilijkste spel ter wereld opnieuw maken op de Arduino: 7 stappen

Video: Het moeilijkste spel ter wereld opnieuw maken op de Arduino: 7 stappen

Video: Het moeilijkste spel ter wereld opnieuw maken op de Arduino: 7 stappen
Video: Moeilijkste Escape Room Ter Wereld 2024, November
Anonim
Image
Image

Dit project is gebaseerd op een computerspel dat je online kunt vinden. De naam is: 'Het moeilijkste spel ter wereld'. Ik kon het opnieuw maken op de Arduino met behulp van een LED-matrix met vier modules. In deze instructable leer ik je hoe je het zelf kunt bouwen. Voordat we te veel details geven, wil ik een kort overzicht geven van de stappen die ik heb doorlopen om dit spel te maken.

  1. Ik heb alle benodigde onderdelen verzameld.
  2. Ik heb de onderdelen met elkaar verbonden.
  3. Ik schreef een schets die de joystick gebruikte om de spelers-LED over alle modules te bewegen.
  4. Ik ontwierp de eerste obstakels en voegde ze toe aan de schets, zodat ze het moeilijkste spel ter wereld nabootsten.
  5. Vervolgens heb ik code toegevoegd om een botsing met de obstakels te detecteren, waardoor het spel opnieuw wordt gestart.
  6. En toen ontwierp ik nog twee niveaus van obstakels.

Stap 1: Alle onderdelen

Alle onderdelen
Alle onderdelen
Alle onderdelen
Alle onderdelen

Hier is een lijst met alle onderdelen die je nodig hebt:

  1. Een Arduino UNO en usb-connector:
  2. Een viermodule 8x8: LED-matrix
  3. Een joystick:
  4. 10 mannelijke naar vrouwelijke draden:

Stap 2: Hoe de onderdelen op de Arduino aan te sluiten?

Hoe de onderdelen op de Arduino aan te sluiten?
Hoe de onderdelen op de Arduino aan te sluiten?

Hoe de LED-matrix op de Arduino aan te sluiten

  1. GND gaat naar GND
  2. VCC gaat naar 5V
  3. DataIn gaat naar digitale pin 12
  4. CLK gaat naar digitale pin 11
  5. CS of LOAD gaat naar digitale pin 10

Hoe de joystick aan te sluiten

  1. GND gaat naar GND
  2. 5V gaat naar 5V
  3. VRx gaat naar analoge pin A0
  4. VRy gaat naar analoge pin A1
  5. SW wordt niet gebruikt

De batterij wordt aangesloten op de 9v-aansluiting om de Arduino stroom te geven

Stap 3: Stroomschema van het programma

Stroomschema van het programma
Stroomschema van het programma

Het ovaal geeft de start van het programma aan.

De eerste stap is het definiëren van alle obstakels.

De volgende twee stappen geven aan dat u de variabelen instelt en alle modules aanzet.

De volgende stap is het instellen van de LED's op het eerste niveau en eventuele andere variabelen.

Geef vervolgens het niveau weer waarop de speler zich momenteel bevindt.

De ruit geeft aan dat u de joystick leest om te zien in welke richting deze wordt geduwd.

Beweeg de speler vervolgens in de richting waarin de joystick is geduwd.

Controleer en kijk of de speler tegen een obstakel is gebotst.

Als de speler een obstakel raakt, ga dan terug naar het eerste niveau. Zo niet, controleer dan of de speler het einde van het level heeft bereikt.

Als de speler aan het einde van het level is, ga dan naar het volgende level en ga dan terug naar "Toon huidig niveau". Als ze niet aan het einde zijn, verplaats dan de obstakels en ga terug naar "Lees Joystick".

Stap 4: De joystick programmeren

Om het kleine stipje dat de speler is te verplaatsen, hebben we natuurlijk een joystick nodig. en om de joystick in staat te stellen de speler daadwerkelijk te bewegen, moeten we deze coderen in de Arduino IDE. U moet de LedControl-bibliotheek opnemen die u kunt vinden door naar het schetsmenu> Bibliotheken opnemen> bibliotheken beheren te gaan en naar LedControl te zoeken. Hier is hoe de code voor de joystick eruit ziet.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc=LedControl(DataIn, CLK, DIN, 4); // Creëert object voor vier modules int delaytime = 50; // snelheid waarmee het spel wordt uitgevoerd joystick_RtLt, joystick_UpDn; int spelers_x = 0; // spelers horizontale positie van 0 tot 31 int players_y = 3; // spelers verticale positie van 0 tot 7 int rij, kolom, module; void setup() { initialize_modules(); // zet alle vier led-modules aan en stel ze in } void loop () { move_player (); // start lus door te controleren of speler vertraging (vertragingstijd) beweegt; } void initialize_modules(){ lc.shutdown(0, false); // start module 0 lc.setIntensity (0, 1); lc.shutdown(1, false); // start module 1 lc.setIntensity (1, 1); lc.shutdown(2, false); // start module 2 lc.setIntensity(2, 1); lc.shutdown(3, false); // start module 3 lc.setIntensity (3, 1); lc.clearDisplay(0); // wist module 0} void move_player(){ module = players_x/8; //definieert in welke module de speler zich bevindt column = players_x%8; // definieert de kolom waar de speler zich in de modulerij bevindt = players_y; lc.setLed(module, rij, kolom, false); // schakel led uit op de huidige positie van de speler joystick_RtLt = analogRead (A0)/204 - 2; //lees X-joystick en kaartbereik van 2 tot -2 if (joystick_RtLt > 0) //wanneer de joystick naar rechts is player_x++; //ga naar rechts else if(joystick_RtLt 0) //if joystick is naar links en niet aan het begin players_x--; // beweeg linker joystick_UpDn = analogRead (A1)/204 - 2; //lees Y-joystick en kaartbereik van 2 tot -2 if(joystick_UpDn 0) //als joystick omlaag is en speler niet onderaan spelers_y--; //move down else if(joystick_UpDn > 0 && players_y < 7) //if joystick omhoog staat en speler niet bovenaan players_y++; //ga omhoog module = spelers_x/8; //set module naar spelers nieuwe positie kolom = spelers_x%8; // stel kolom in op spelers nieuwe positie rij = spelers_y; // stel rij in op spelers nieuwe positie lc.setLed (module, rij, kolom, waar); // zet led aan op de nieuwe positie van de speler}

Nu je de joystick hebt toegevoegd, gaan we aan het eerste obstakel werken!

Stap 5: Het eerste niveau

Oké, dus nu is het tijd om in het hoofdgedeelte van het programma te komen, de obstakels! De obstakels maken dit echt tot het 'moeilijkste spel ter wereld'. Dus als je het spel echt wilt spelen, moet je dit aan je code toevoegen:

byte obstakel [LEVELS][SCENES][COLUMNS][ROWS] = { // drie niveaus, 8 scènes, 8 kolommen, 8 rijen

{{{1, 1, 1, 1, 1, 1, 0, 0}, // eerste niveau, eerste scène {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}, //eerste niveau, tweede scène {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}, //eerste niveau, derde scène {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}, //eerste niveau, vierde scène {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}, // eerste niveau, vijfde scène {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}, // eerste niveau, zesde scène {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}, // eerste niveau, zevende scène {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}, //eerste niveau, achtste scène {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(); // zet aan en stel alle vier de led-modules start_level (0) in; void loop() { move_player(); // start de lus door te controleren of de speler beweegt if (collision()){ //check for collision level = 0; // als de botsing waar is, reset het niveau start_level (niveau); // herstart game } else if (delay_count == obstakel_delay) { // als er geen botsing is, verplaats obstakel om de andere vertraging moveobstacle (); delay_count = 0; }anders delay_count++; vertraging (vertragingstijd); //vertraging door snelheid van het spel}

En dat is het eerste obstakel! Als je dit als je eerste niveau verveelt, kun je altijd de bytes wijzigen, onthoud dat je acht verschillende scènes nodig hebt! Laten we doorgaan naar de volgende stap, botsingsdetectie!

Stap 6: Botsingsdetectie

Deze stap is een ander belangrijk onderdeel van het spel, zonder deze stap zou er niet veel uitdaging zijn! je zou je een weg door de obstakels kunnen banen zonder enige gevolgen! dat zou toch niet zo leuk zijn? dus laten we het spel uitdagender (en veel leuker!) maken door dit gedeelte van het programma toe te voegen:

lege lus() {

beweeg speler(); // start de lus door te controleren of de speler beweegt if (collision()){ //check for collision level = 0; // als de botsing waar is, reset het niveau start_level (niveau); // herstart game } else if (delay_count == obstakel_delay) { // als er geen botsing is, verplaats obstakel om de andere vertraging moveobstacle (); delay_count = 0; }anders delay_count++; vertraging (vertragingstijd); //vertraging door snelheid van het spel} int collision (){ // controleer of speler een obstakel raakt in scènemodule = players_x/8; kolom = spelers_x%8; rij = spelers_y; if(module > 0) if(obstakel[niveau][scène][kolom][rij] == 1) //als de positie van de speler hetzelfde is als de terugkeer van een obstakel(1); // botsing gedetecteerd return true return (0); // geen botsing retourneer false}

En daar ga je! nu kun je veel meer van het spel genieten! Nu ga ik je laten zien hoe je de laatste twee niveaus van het spel programmeert! je bent bijna klaar met deze instructable, en ik weet zeker dat je klaar bent om het uit te proberen!

Stap 7: De laatste twee niveaus

We kwamen aan het einde van de instructable, deze laatste twee niveaus zijn alles wat je nodig hebt om dit spel te voltooien. Dan kun je het zelf uitproberen! hier is de code:

byte obstakel [LEVELS][SCENES][COLUMNS][ROWS] = { // tweede en derde niveau, 8 scènes, 8 kolommen, 8 rijen

{{{1, 0, 0, 0, 0, 0, 0, 1}, // tweede niveau, eerste scène {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}, // tweede niveau, tweede scène {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}, // tweede niveau, derde scène {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}, // vierde scène van het tweede niveau {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}, // tweede niveau, fif de scène {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}, // tweede niveau, zesde scène {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}, // tweede niveau, zevende scène {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}, // tweede niveau achtste scène {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}, // derde niveau, eerste scène {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}, // derde niveau, tweede scène {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}, //derde niveau, derde scène {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}, //derde niveau, vierde scène {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}, // derde niveau, vijfde scène {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}, // derde niveau, zesde scène {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}, // derde niveau, zevende scène {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}, //derde niveau, achtste scène { 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}}} };

En dat is het! je bent helemaal klaar om te proberen het moeilijkste spel ter wereld te voltooien. Ook de volledige Arduino-code is hieronder bijgevoegd.

Aanbevolen: