Sadržaj:

Ponovno stvaranje najteže igre na svijetu na Arduinu: 7 koraka
Ponovno stvaranje najteže igre na svijetu na Arduinu: 7 koraka

Video: Ponovno stvaranje najteže igre na svijetu na Arduinu: 7 koraka

Video: Ponovno stvaranje najteže igre na svijetu na Arduinu: 7 koraka
Video: Leap Motion SDK 2024, Srpanj
Anonim
Image
Image

Ovaj projekt temelji se na računalnoj igri koju možete pronaći na internetu. Njegovo ime je "Najteža igra na svijetu". Uspio sam ga ponovno stvoriti na Arduinu pomoću LED matrice s četiri modula. U ovom uputstvu učit ću vas kako ga sami konstruirati. Prije nego što pređemo na previše detalja, želim dati kratak pregled koraka koje sam prošao za stvaranje ove igre.

  1. Skupio sam sve potrebne dijelove.
  2. Spojio sam dijelove zajedno.
  3. Napisao sam skicu koja je pomoću joysticka prebacila LED diode igrača po svim modulima.
  4. Dizajnirao sam prve prepreke i dodao ih u skicu tako da oponašaju najtežu igru na svijetu.
  5. Zatim sam dodao kod za otkrivanje sudara s preprekama, koji će ponovo pokrenuti igru.
  6. Zatim sam dizajnirao još dvije razine prepreka.

Korak 1: Svi dijelovi

Svi dijelovi
Svi dijelovi
Svi dijelovi
Svi dijelovi

Evo popisa svih dijelova koji su vam potrebni:

  1. Arduino UNO i USB priključak:
  2. Četiri modula 8x8: LED matrica
  3. Joystick:
  4. 10 muških i ženskih žica:

Korak 2: Kako spojiti dijelove na Arduino

Kako spojiti dijelove na Arduino
Kako spojiti dijelove na Arduino

Kako spojiti LED matricu na Arduino

  1. GND ide u GND
  2. VCC ide na 5V
  3. DataIn ide na digitalni pin 12
  4. CLK ide na digitalni pin 11
  5. CS ili LOAD ide na digitalni pin 10

Kako spojiti joystick

  1. GND ide u GND
  2. 5V ide na 5V
  3. VRx ide na analogni pin A0
  4. VRy ide na analogni pin A1
  5. SW se ne koristi

Baterija se priključuje na utičnicu od 9V kako bi Arduino dobio snagu

Korak 3: Dijagram toka programa

Dijagram toka programa
Dijagram toka programa

Oval označava početak programa.

Prvi korak je definiranje svih prepreka.

Sljedeća dva koraka pokazuju postavljanje varijabli i uključivanje svih modula.

Sljedeći korak je postavljanje LED dioda na prvu razinu i sve ostale varijable.

Sljedeći prikaz razine na kojoj je igrač trenutno na.

Romb označava čitanje upravljačke palice kako bi vidio u kojem se smjeru gura.

Zatim pomaknite player u bilo kojem smjeru gurnute palice.

Provjerite je li se igrač sudario s preprekom.

Ako je igrač udario u prepreku, vratite se na prvu razinu. Ako nije, provjerite je li igrač došao do kraja razine.

Ako je igrač na kraju razine, postavite na sljedeću razinu, a zatim se vratite na "Prikaz trenutne razine". Ako nisu na kraju, pomaknite prepreke i vratite se na "Read Joystick".

Korak 4: Programiranje joysticka

Naravno, da bismo pomaknuli malu točku koja je igrač, potreban nam je joystick. a da bismo dopustili da joystick stvarno premjesti player moramo ga kodirati u Arduino IDE. Morate uključiti knjižnicu LedControl koju možete pronaći tako da odete na izbornik skica> Uključi knjižnice> upravljajte knjižnicama i potražite LedControl. Evo kako izgleda kôd za joystick.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Kreira objekt za četiri modula int delaytime = 50; // brzina kojom igra radi int joystick_RtLt, joystick_UpDn; int player_x = 0; // vodoravna pozicija igrača od 0 do 31 int player_y = 3; // okomiti položaj igrača od 0 do 7 int reda, stupca, modula; void setup () {initialize_modules (); // uključiti i postaviti sva četiri LED modula} void loop () {move_player (); // pokretanje petlje provjerom pomiče li igrač kašnjenje (vrijeme odgode); } void initialize_modules () {lc.shutdown (0, false); // pokreće modul 0 lc.setIntensity (0, 1); lc.shutdown (1, netočno); // pokreće modul 1 lc.setIntensity (1, 1); lc.shutdown (2, netočno); // pokreće modul 2 lc.setIntensity (2, 1); lc.shutdown (3, lažno); // pokreće modul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // briše modul 0} void move_player () {module = players_x/8; // definira koji modul je igrač u stupcu = players_x%8; // definira stupac u kojem se igrač nalazi u retku modula = players_y; lc.setLed (modul, red, stupac, false); // isključuje LED na trenutnoj poziciji igrača joystick_RtLt = analogRead (A0)/204 - 2; // čitati X -joystick i raspon karte od 2 do -2 if (joystick_RtLt> 0) // kada je joystick na desnoj strani player_x ++; // idite desno, ako (joystick_RtLt 0) // ako je joystick lijevo, a ne na početku players_x--; // pomakni lijevo joystick_UpDn = analogRead (A1)/204 - 2; // čita Y-joystick i raspon karte od 2 do -2 if (joystick_UpDn 0) // ako je joystick dolje i igrač nije na dnu players_y--; // pomaknite se dolje else if (joystick_UpDn> 0 && players_y <7) // ako je joystick gore, a igrač nije na vrhu players_y ++; // gore modul = players_x/8; // postavi modul igračima nova pozicija stupac = players_x%8; // postavljanje stupca igračima nova pozicija red = players_y; // postavi red igračima novu poziciju lc.setLed (modul, red, stupac, true); // uključite LED na novom mjestu igrača}

Sad kad ste dodali joystick, poradimo na prvoj prepreci!

Korak 5: Prva razina

U redu, sada je vrijeme da prijeđete na glavni dio programa, na prepreke! Prepreke su ono što ovu igru doista čini "najtežom igrom na svijetu". Dakle, ako zaista želite igrati igru, morate dodati ovo svom kodu:

prepreka od bajtova [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// tri razine, 8 scena, 8 dogovora, 8 redaka

{{{1, 1, 1, 1, 1, 1, 0, 0}, // prva razina, prva scena {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 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // prva razina, druga scena {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}, // prva razina, treća prizor {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}, // prvo razina, četvrta scena {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}, // prva razina, peta scena {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}, // prva razina, šesta scena {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}, // prva razina, sedma scena {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, 1}, // prva razina, osma prizor {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 (); // uključiti i postaviti sva četiri LED modula start_level (0); void loop () {move_player (); // pokretanje petlje provjerom da li se igrač pomiče if (collision ()) {// provjera razine sudara = 0; // ako je sudar istinit, resetiraj razinu start_level (level); // ponovno pokretanje igre} else if (delay_count == prepreka_odgoda) {// ako nema sudara pomicanje prepreka svako drugo kašnjenje moveobstacle (); broj_kašnjenja = 0; } else delay_count ++; odgoda (vrijeme odgode); // kašnjenje po brzini igre}

I to je prva prepreka! Ako vam je ovo dosadilo kao vašoj prvoj razini, uvijek možete promijeniti bajtove, samo zapamtite da morate imati osam različitih scena! Idemo na sljedeći korak, otkrivanje sudara!

Korak 6: Otkrivanje sudara

Ovaj korak je još jedan važan dio igre, jer bez njega ne bi bio veliki izazov! mogli biste se samo probiti kroz prepreke bez ikakvih posljedica! to ne bi bilo zabavno zar ne? pa učinimo igru izazovnijom (i puno zabavnijom!) dodavanjem ovog odjeljka programa:

void loop () {{100} {101}

move_player (); // pokretanje petlje provjerom da li se igrač pomiče if (collision ()) {// provjera razine sudara = 0; // ako je sudar istinit, resetiraj razinu start_level (level); // ponovno pokretanje igre} else if (delay_count == prepreka_odgoda) {// ako nema sudara pomicanje prepreka svako drugo kašnjenje moveobstacle (); broj_kašnjenja = 0; } else delay_count ++; odgoda (vrijeme odgode); // kašnjenje po brzini igre} int collision () {// provjerava je li igrač udario u prepreku u modulu scene = players_x/8; stupac = players_x%8; red = igrači_y; if (modul> 0) if (prepreka [razina] [scena] [stupac] [redak] == 1) // ako je položaj igrača isti kao povratak prepreke (1); // sudar otkriven return true return (0); // no collision return false}

I eto! sada možete uživati u igri puno više! Sada ću vam pokazati kako programirati posljednje dvije razine igre! Skoro ste završili s ovim uputstvom, i siguran sam da ste spremni isprobati ga!

Korak 7: Posljednje dvije razine

Dolazili su do kraja nastave, ove dvije razine su sve što vam je potrebno da završite ovu igru. Onda možete sami isprobati! evo koda:

bajtna prepreka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// druga i treća razina, 8 scena, 8 stupaca, 8 redaka

{{{1, 0, 0, 0, 0, 0, 0, 1}, // druga razina, prva scena {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}, // druga razina, druga scena {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}, // druga razina, treća scena {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}, // četvrta scena druge razine {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}, // druga razina, pet scena {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}, // druga razina, šesta scena {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}, // druga razina, sedma scena {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}, // osma scena druge razine {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}, // treća razina, prva scena {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}, // treća razina, druga scena {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}, // treća razina, treća scena {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}, // treća razina, četvrta scena {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}, // treća razina, peta scena {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}, // treća razina, šesta scena {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}, // treća razina, sedma scena {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}, // treća razina, osma scena { 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}}}};

I to je to! spremni ste za pokušaj dovršetka najteže igre na svijetu. Također je dolje priložen cijeli Arduino kod.

Preporučeni: