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: CS50 2013 - Week 9 2024, Novembar
Anonim
Image
Image

Ovaj projekat je zasnovan na računarskoj 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čim vas kako da to sami konstruišete. Prije nego što pređemo na previše detalja, želim dati kratak pregled koraka kroz 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 koristila džojstik za pomicanje LED -ova 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š dva nivoa prepreka.

Korak 1: Svi dijelovi

Svi delovi
Svi delovi
Svi delovi
Svi delovi

Evo popisa svih dijelova koji su vam potrebni:

  1. Arduino UNO i USB konektor:
  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 prelazi na digitalni pin 11
  5. CS ili LOAD ide na digitalni pin 10

Kako spojiti džojstik

  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 9v utičnicu kako bi Arduinu dala 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 prvi nivo i sve ostale varijable.

Sljedeći prikazuje nivo na kojem je igrač trenutno na.

Romb označava čitanje džojstika da vidi u kom smjeru se gura.

Zatim pomaknite igrač u bilo kojem smjeru gurnute ručice.

Proverite da li se igrač sudario sa preprekom.

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

Ako je igrač na kraju nivoa, postavite ga na sljedeći nivo, a zatim se vratite na "Prikaz trenutnog nivoa". Ako nisu na kraju, pomaknite prepreke i vratite se na "Čitajte joystick".

Korak 4: Programiranje upravljačke palice

Naravno, da bismo pomaknuli malu točku koja je igrač, potreban nam je joystick. a kako bismo omogućili da joystick zaista premjesti player moramo ga kodirati u Arduino IDE. Morate uključiti biblioteku LedControl koju možete pronaći ako odete u meni za skice> Uključi biblioteke> upravljajte bibliotekama i potražite LedControl. Evo kako izgleda kod džojstika.

#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 players_y = 3; // vertikalni položaj igrača od 0 do 7 int red, stupac, modul; void setup () {initialize_modules (); // uključiti i postaviti sva četiri LED modula} void loop () {move_player (); // pokretanje petlje provjerom da li igrač pomiče kašnjenje (vrijeme kašnjenja); } void initialize_modules () {lc.shutdown (0, false); // pokreće modul 0 lc.setIntensity (0, 1); lc.shutdown (1, false); // pokreće modul 1 lc.setIntensity (1, 1); lc.shutdown (2, false); // pokreće modul 2 lc.setIntensity (2, 1); lc.shutdown (3, false); // 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 koloni = players_x%8; // definira kolonu u kojoj se igrač nalazi u modulu row = players_y; lc.setLed (modul, red, stupac, false); // isključuje LED na trenutnoj poziciji igrača joystick_RtLt = analogRead (A0)/204 - 2; // čita X -joystick i raspon karte od 2 do -2 if (joystick_RtLt> 0) // kada je joystick na desnoj strani player_x ++; // idite desno inače (joystick_RtLt 0) // ako je joystick lijevo, a ne na početku players_x--; // pomaknite 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 ++; // go up module = players_x/8; // postavlja modul na kolonu igrača nova pozicija = players_x%8; // postavljanje kolone igračima nova pozicija red = players_y; // postavlja red za igrače novu poziciju lc.setLed (modul, red, stupac, true); // uključite LED na novoj poziciji igrača}

Sada kada ste dodali joystick, poradimo na prvoj prepreci!

Korak 5: Prvi nivo

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

bajt prepreka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// tri nivoa, 8 scena, 8 koluma, 8 redova

{{{1, 1, 1, 1, 1, 1, 0, 0}, // prvi nivo, 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}, // prvi nivo, 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}, // prvi nivo, treći scena {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 nivo, č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}, // prvi nivo, 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}, // prvi nivo, š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}, // prvi nivo, 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}, // prvi nivo, osmi 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, 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 () {Initilize_modules (); // uključujemo i postavljamo sva četiri LED modula start_level (0); void loop () {move_player (); // pokretanje petlje provjerom da li se igrač kreće if (collision ()) {// provjeravanje nivoa kolizije = 0; // ako je sudar istinit, poništi nivo start_level (nivo); // 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 ++; kašnjenje (vrijeme kašnjenja); // kašnjenje po brzini igre}

I to je prva prepreka! Ako vam ovo dosadi kao prvi nivo, 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č kreće if (collision ()) {// provjeravanje nivoa kolizije = 0; // ako je sudar istinit, poništi nivo start_level (nivo); // ponovo pokrenite igru} else if (delay_count == prepreka_odgoda) {// ako nema sudara pomjerite prepreku svako drugo kašnjenje moveobstacle (); broj_kašnjenja = 0; } else delay_count ++; kašnjenje (vrijeme kašnjenja); // kašnjenje po brzini igre} int collision () {// provjerava je li igrač udario prepreku u modulu scene = players_x/8; kolona = players_x%8; row = players_y; if (modul> 0) if (prepreka [nivo] [scena] [kolona] [red] == 1) // ako je igračeva pozicija ista kao povratak prepreke (1); // sudar otkriven return true return (0); // nema sudara return false}

Evo ga! sada možete uživati u igri puno više! Sada ću vam pokazati kako programirati posljednja dva nivoa igre! Skoro ste završili s ovim uputstvom, i siguran sam da ste spremni isprobati ga!

Korak 7: Posljednja dva nivoa

Bližili su se kraj uputstva, ova dva nivoa su sve što vam je potrebno da završite ovu igru. Onda možete sami isprobati! evo koda:

bajt prepreka [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// drugi i treći nivo, 8 scena, 8 kolona, 8 redova

{{{1, 0, 0, 0, 0, 0, 0, 1}, // drugi nivo, 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}, {{100} {101} 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 0 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // drugi nivo, 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, 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}, // drugi nivo, 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 drugog nivoa {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}, // drugi nivo, 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}, // drugi nivo, š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}, // drugi nivo, 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 drugog nivoa {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}, // treći nivo, 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ći nivo, 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ći nivo, 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ći nivo, č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ći nivo, 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ći nivo, š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ći nivo, 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ći nivo, 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, dolje je priložen cijeli Arduino kod.

Preporučuje se: