Sadržaj:
- Korak 1: Svi dijelovi
- Korak 2: Kako spojiti dijelove na Arduino
- Korak 3: Dijagram toka programa
- Korak 4: Programiranje upravljačke palice
- Korak 5: Prvi nivo
- Korak 6: Otkrivanje sudara
- Korak 7: Posljednja dva nivoa
Video: Ponovno stvaranje najteže igre na svijetu na Arduinu: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
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.
- Skupio sam sve potrebne dijelove.
- Spojio sam dijelove zajedno.
- Napisao sam skicu koja je koristila džojstik za pomicanje LED -ova igrača po svim modulima.
- Dizajnirao sam prve prepreke i dodao ih u skicu tako da oponašaju najtežu igru na svijetu.
- Zatim sam dodao kod za otkrivanje sudara s preprekama, koji će ponovo pokrenuti igru.
- Zatim sam dizajnirao još dva nivoa prepreka.
Korak 1: Svi dijelovi
Evo popisa svih dijelova koji su vam potrebni:
- Arduino UNO i USB konektor:
- Četiri modula 8x8: LED matrica
- Joystick:
- 10 muških i ženskih žica:
Korak 2: Kako spojiti dijelove na Arduino
Kako spojiti LED matricu na Arduino
- GND ide u GND
- VCC ide na 5V
- DataIn ide na digitalni pin 12
- CLK prelazi na digitalni pin 11
- CS ili LOAD ide na digitalni pin 10
Kako spojiti džojstik
- GND ide u GND
- 5V ide na 5V
- VRx ide na analogni pin A0
- VRy ide na analogni pin A1
- SW se ne koristi
Baterija se priključuje na 9v utičnicu kako bi Arduinu dala snagu
Korak 3: 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:
Stvaranje prave odbrambene igre odbrambene kule: 11 koraka
Stvaranje prave odbrambene igre odbrambenog tornja: Zdravo, mi smo GBU! Naš tim je dobio zadatak u našem VG100, Uvod u inženjering, klasa: dizajnirati i izgraditi Warzone Tower Defense igru iz stvarnog života. VG100 je osnovna klasa koju svi brucoši moraju pohađati na Zajedničkom institutu (JI.) Joint Inst
Greentent - prva mini prijenosna staklena kuća na svijetu s mjerenjima temperature i vlažnosti u Arduinu: 3 koraka
Greentent - prva mini prijenosna staklena kuća na svijetu s mjerenjima temperature i vlažnosti u Arduinu: Prvi put sam došao na ideju o prijenosnom stakleniku po kojem se možete kretati noću kada sam htio napraviti način da imam mali vrt u kutiji s nadziranom temperaturom i vlažnost zraka. Dakle, kasno je navečer i želim otići u trgovinu po ove su
Moja DIY operacija igre Steampunk, zasnovana na Arduinu: 9 koraka (sa slikama)
Moja DIY Steampunk operacija igre, zasnovana na Arduinu: Ovaj projekt je prilično opsežnog obima. Ne zahtijeva puno alata ili predznanja, ali naučit će svakoga (uključujući mene) mnogo u mnogim različitim odjelima izrade
Stvaranje fizičkog kontrolera igre: 10 koraka (sa slikama)
Stvaranje kontrolera za fizičke igre: Kada je Nintendo Wii predstavljen, igrači su bili ohrabreni, nije bilo potrebno, da napuste sofu i skoče, plešu i trzaju kako bi osvojili bodove u svojoj igri po izboru. Iako u izgradnji za Wii postoji strma krivulja učenja, lako je kupiti
DIY MusiLED, muzički sinhronizovane LED diode sa Windows-om i Linux aplikacijom jednim klikom (32-bitne i 64-bitne). Lako za ponovno stvaranje, za korištenje, za prijenos: 3 koraka
DIY MusiLED, muzički sinhronizovane LED diode sa Windows-om i Linux aplikacijom jednim klikom (32-bitne i 64-bitne). Lako za ponovno stvaranje, za korištenje, za prijenos: Ovaj projekt će vam pomoći da spojite 18 LED dioda (6 crvenih + 6 plavih + 6 žutih) na Arduino ploču i analizirate signale zvučne kartice vašeg računara u stvarnom vremenu i prenesete ih na LED diode koje će ih osvijetliti prema beat efektima (Snare, High Hat, Kick)