Sisällysluettelo:

Maailman vaikeimman pelin luominen Arduinolla: 7 vaihetta
Maailman vaikeimman pelin luominen Arduinolla: 7 vaihetta

Video: Maailman vaikeimman pelin luominen Arduinolla: 7 vaihetta

Video: Maailman vaikeimman pelin luominen Arduinolla: 7 vaihetta
Video: Lonely (short version) 2024, Heinäkuu
Anonim
Image
Image

Tämä projekti perustuu tietokonepeliin, jonka löydät verkosta. Sen nimi on "Maailman vaikein peli". Pystyin luomaan sen uudelleen Arduinolle neljän moduulin LED-matriisin avulla. Tässä ohjeessa opetan sinulle, kuinka rakentaa se itse. Ennen kuin menemme liikaa yksityiskohtiin, haluan antaa nopean yleiskatsauksen tämän pelin luomisvaiheista.

  1. Keräsin kaikki tarvittavat osat.
  2. Liitin osat yhteen.
  3. Kirjoitin luonnoksen, joka käytti ohjaussauvaa soittimien LEDin siirtämiseen kaikkien moduulien yli.
  4. Suunnittelin ensimmäiset esteet ja lisäsin ne luonnokseen, jotta ne jäljittelivät maailman vaikeinta peliä.
  5. Lisäsin sitten koodin havaitaksesi törmäyksen esteisiin, mikä käynnistää pelin uudelleen.
  6. Ja sitten suunnittelin vielä kaksi tasoa esteitä.

Vaihe 1: Kaikki osat

Kaikki osat
Kaikki osat
Kaikki osat
Kaikki osat

Tässä on luettelo kaikista tarvittavista osista:

  1. Arduino UNO- ja usb-liitin:
  2. Neljä moduulia 8x8: LED-matriisi
  3. Joystick:
  4. 10 uros-naarasjohtoa:

Vaihe 2: Osien liittäminen Arduinoon

Kuinka liittää osat Arduinoon
Kuinka liittää osat Arduinoon

Kuinka liittää LED -matriisi Arduinoon

  1. GND menee GND: lle
  2. VCC menee 5V jännitteeseen
  3. DataIn siirtyy digitaaliseen nastaan 12
  4. CLK siirtyy digitaaliseen nastaan 11
  5. CS tai LOAD siirtyy digitaaliseen nastaan 10

Ohjaussauvan kytkeminen

  1. GND menee GND: lle
  2. 5V menee 5V
  3. VRx menee analogiseen nastaan A0
  4. VRy menee analogiseen nastaan A1
  5. SW: tä ei käytetä

Akku kytketään 9 voltin liittimeen, jotta Arduino saa virtaa

Vaihe 3: Ohjelman vuokaavio

Ohjelman vuokaavio
Ohjelman vuokaavio

Soikea ilmaisee ohjelman alkamisen.

Ensimmäinen askel on määritellä kaikki esteet.

Seuraavat kaksi vaihetta osoittavat muuttujien asettamisen ja kaikkien moduulien kytkemisen päälle.

Seuraava askel on asettaa LEDit ensimmäiselle tasolle ja muut muuttujat.

Näytä seuraavaksi taso, jolla soitin on parhaillaan.

Rhombus osoittaa lukemalla ohjaussauvan nähdäksesi mihin suuntaan sitä työnnetään.

Siirrä sitten soitinta mihin tahansa suuntaan ohjaussauvaa työnnettiin.

Tarkista, onko pelaaja törmännyt esteeseen.

Jos pelaaja osuu esteeseen, palaa ensimmäiselle tasolle. Jos ei, tarkista, onko pelaaja saavuttanut tason loppuun.

Jos pelaaja on tason lopussa, aseta seuraava taso ja palaa sitten kohtaan "Näytä nykyinen taso". Jos ne eivät ole lopussa, siirrä esteet ja palaa kohtaan "Lue ohjaussauva".

Vaihe 4: Ohjaussauvan ohjelmointi

Tarvitsemme tietysti ohjainta, jotta voimme siirtää pienen pisteen, joka on pelaaja. ja jotta ohjaussauva voi todella siirtää pelaajaa, meidän on koodattava se Arduino IDE: hen. Sinun on sisällytettävä LedControl -kirjasto, joka löytyy siirtymällä luonnosvalikkoon> Sisällytä kirjastot> hallitse kirjastoja ja etsi LedControl. Tässä on joystickin koodi.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Luo objekti neljälle moduulille int delaytime = 50; // pelin nopeus int joystick_RtLt, joystick_UpDn; int pelaajat_x = 0; // pelaajien vaakasijainti 0-31 int pelaajaa_y = 3; // pelaajien pystysijainti 0-7 int rivi, sarake, moduuli; void setup () {initialize_modules (); // kytke päälle ja aseta kaikki neljä led -moduulia} void loop () {move_player (); // aloita silmukka tarkistamalla, siirtyykö pelaaja viiveellä (delaytime); } void initialize_modules () {lc.shutdown (0, false); // käynnistää moduulin 0 lc.setIntensity (0, 1); lc. sammutus (1, false); // käynnistää moduulin 1 lc.setIntensity (1, 1); lc. sammutus (2, false); // käynnistää moduulin 2 lc.setIntensity (2, 1); lc. sammutus (3, false); // käynnistää moduulin 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // tyhjentää moduulin 0} void move_player () {module = players_x/8; // määrittää, millä moduulilla pelaaja on sarakkeessa = pelaajat_x%8; // määrittää sarakkeen, jossa pelaaja on moduulin rivillä = players_y; lc.setLed (moduuli, rivi, sarake, epätosi); // kytke led pois päältä pelaajan nykyisessä asennossa joystick_RtLt = analogRead (A0)/204-2; // lue X -joystick ja kartta -alue 2-2, jos (joystick_RtLt> 0) // kun ohjaussauva on oikealla pelaajalla_x ++; // mene oikealle muuten if (joystick_RtLt 0) // jos joystick on vasemmalla eikä alussa player_x--; // siirrä vasemmalle joystick_UpDn = analoginenLue (A1)/204-2; // lukee Y-joystickia ja karttaa 2: sta -2: een (joystick_UpDn 0) // jos joystick on alhaalla ja pelaaja ei ole alhaalla pelaajat_y--; // siirry alaspäin if if (joystick_UpDn> 0 && players_y <7) // jos joystick on ylhäällä ja pelaaja ei ole huippupelaajien joukossa_y ++; // nouse moduuli = pelaajat_x/8; // aseta moduuli pelaajille uusi sijaintisarake = pelaajat_x%8; // aseta sarake pelaajille uusi sijainti rivi = pelaajat_y; // aseta rivi pelaajille uusi sijainti lc.setLed (moduuli, rivi, sarake, tosi); // kytke led päälle pelaajan uudessa paikassa}

Nyt kun olet lisännyt ohjaussauvan, aloitetaan ensimmäinen este!

Vaihe 5: Ensimmäinen taso

Okei, joten nyt on aika päästä ohjelman pääosaan, esteisiin! Esteet tekevät tästä "maailman vaikeimman pelin". Joten jos haluat todella pelata peliä, sinun on lisättävä tämä koodiin:

tavu este [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// kolme tasoa, 8 kohtausta, 8 collumia, 8 riviä

{{{1, 1, 1, 1, 1, 1, 0, 0}, // ensimmäinen taso, ensimmäinen kohtaus {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}, { 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}, // ensimmäinen taso, toinen kohtaus {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}, {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}, // ensimmäinen taso, kolmas kohtaus {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, 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}, // ensimmäinen taso, neljäs kohtaus {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}, {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}, // ensimmäinen taso, viides kohtaus {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}, // ensimmäinen taso, kuudes kohtaus {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}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, // ensimmäinen taso, seitsemäs kohtaus {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}}, {{0, 1, 1, 1, 1, 1, 1, 1}, // ensimmäinen taso, kahdeksas kohtaus {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}}}, mitätön asetus () {initialize_modules (); // kytke päälle ja aseta kaikki neljä led -moduulia start_level (0); void loop () {move_player (); // aloita silmukka tarkistamalla, liikkuuko pelaaja jos (törmäys ()) {// tarkista törmäystaso = 0; // jos törmäys on totta, nollaa taso start_level (level); // käynnistä peli uudelleen} else if (delay_count == este_viive) {// jos törmäystä ei siirretä esteen joka toinen delay moveobstacle (); delay_count = 0; } muu delay_count ++; viive (viive) // viive pelin nopeuden mukaan}

Ja se on ensimmäinen este! Jos kyllästyt tähän ensimmäisenä tasona, voit aina vaihtaa tavuja, muista vain, että sinulla on oltava kahdeksan eri kohtausta! Jatketaan seuraavaan vaiheeseen, törmäyksen havaitsemiseen!

Vaihe 6: Törmäyksen tunnistus

Tämä vaihe on toinen tärkeä osa peliä, ilman sitä ei olisi paljon haastetta! voit vain kutoa tiesi esteiden läpi ilman seurauksia! eikö se olisi kovin hauskaa? joten tehdään pelistä haastavampi (ja paljon viihdyttävämpi!) lisäämällä tämä ohjelman osa:

void loop () {

move_player (); // aloita silmukka tarkistamalla, liikkuuko pelaaja jos (törmäys ()) {// tarkista törmäystaso = 0; // jos törmäys on totta, nollaa taso start_level (level); // käynnistä peli uudelleen} else if (delay_count == este_viive) {// jos törmäystä ei siirretä esteen joka toinen delay moveobstacle (); delay_count = 0; } muu delay_count ++; viive (viive) // viive pelin nopeuden mukaan} int collision () {// tarkista osuiko pelaaja esteeseen kohtausmoduulissa = players_x/8; sarake = pelaajat_x%8; rivi = pelaajat_y; jos (moduuli> 0) jos (este [taso] [kohtaus] [sarake] [rivi] == 1) // jos pelaajan asema on sama kuin estepaluu (1); // törmäys havaittu palauttaa todellisen paluun (0); // no törmäyspalautus false false}

Ja näillä mennään! nyt voit nauttia pelistä paljon enemmän! Nyt näytän sinulle, kuinka ohjelmoida pelin kaksi viimeistä tasoa! olet melkein valmis tämän ohjeen kanssa, ja olen varma, että olet valmis kokeilemaan sitä!

Vaihe 7: Kaksi viimeistä tasoa

Oliko ohjeiden loppu, nämä kaksi viimeistä tasoa ovat kaikki mitä tarvitset tämän pelin loppuunsaattamiseen. Sitten voit kokeilla sitä itse! tässä koodi:

tavu este [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// toinen ja kolmas taso, 8 kohtausta, 8 saraketta, 8 riviä

{{{1, 0, 0, 0, 0, 0, 0, 1}, // toinen taso, ensimmäinen kohtaus {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}, // toinen taso, toinen kohtaus {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}, // toinen taso, kolmas kohtaus {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}, // toisen tason neljäs kohtaus {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}, // toinen taso, viisi kohtaus {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}, // toinen taso, kuudes kohtaus {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}, // toinen taso, seitsemäs kohtaus {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}, // toisen tason kahdeksas kohtaus {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}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // kolmas taso, ensimmäinen kohtaus {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}, // kolmas taso, toinen kohtaus {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}, // kolmas taso, kolmas kohtaus {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}, // kolmas taso, neljäs kohtaus {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}, // kolmas taso, viides kohtaus {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}, // kolmas taso, kuudes kohtaus {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}, // kolmas taso, seitsemäs kohtaus {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}, // kolmas taso, kahdeksas kohtaus { 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}}}};

Ja siinä se! olet valmis yrittämään maailman vaikeinta peliä. Myös koko Arduino -koodi on liitteenä alla.

Suositeltava: