Talaan ng mga Nilalaman:

Ang muling paggawa ng Pinakamahirap na Laro sa Daigdig sa Arduino: 7 Mga Hakbang
Ang muling paggawa ng Pinakamahirap na Laro sa Daigdig sa Arduino: 7 Mga Hakbang

Video: Ang muling paggawa ng Pinakamahirap na Laro sa Daigdig sa Arduino: 7 Mga Hakbang

Video: Ang muling paggawa ng Pinakamahirap na Laro sa Daigdig sa Arduino: 7 Mga Hakbang
Video: ANG GANDA NG MISIS NI RIGOR!๐Ÿ˜#johnestrada #prescillameirelles 2024, Nobyembre
Anonim
Image
Image

Ang proyektong ito ay batay sa isang laro sa computer na maaari mong makita sa online. Ang pangalan nito ay, "The Worlds Hardest Game." Nagawa ko itong muling likhain sa Arduino gamit ang isang apat na module na LED Matrix. Sa itinuturo na ito tinuturo ko sa iyo kung paano mo ito mabubuo. Bago namin napunta sa masyadong maraming mga detalye nais kong magbigay ng isang mabilis na pangkalahatang ideya ng mga hakbang na dumaan ako upang likhain ang larong ito.

  1. Tinipon ko ang lahat ng mga kinakailangang bahagi.
  2. Ikinonekta ko ang mga bahagi nang magkasama.
  3. Sumulat ako ng isang sketch na ginamit ang joystick upang ilipat ang mga manlalaro na humantong sa lahat ng mga module.
  4. Dinisenyo ko ang mga unang hadlang at idinagdag ang mga ito sa sketch upang tularan nila ang Worlds Hardest Game.
  5. Pagkatapos ay nagdagdag ako ng code upang makita ang isang banggaan sa mga hadlang, na kung saan ay muling simulan ang laro.
  6. At pagkatapos ay dinisenyo ko ang dalawa pang mga antas ng mga hadlang.

Hakbang 1: Lahat ng Mga Bahagi

Lahat ng Bahagi
Lahat ng Bahagi
Lahat ng Bahagi
Lahat ng Bahagi

Narito ang isang listahan ng lahat ng mga bahagi na kailangan mo:

  1. Isang Arduino UNO at usb konektor: https://www.banggood.com/Wh Wholesale-Arduino-Compati.
  2. Isang apat na module 8x8: LED matrix https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. Isang Joystick:
  4. 10 lalaki hanggang babaeng mga wire:

Hakbang 2: Paano Ikonekta ang Mga Bahagi sa Arduino

Paano Ikonekta ang Mga Bahagi sa Arduino
Paano Ikonekta ang Mga Bahagi sa Arduino

Paano ikonekta ang LED Matrix sa Arduino

  1. Ang GND ay pupunta sa GND
  2. Ang VCC ay pupunta sa 5V
  3. Ang DataIn ay papunta sa digital pin 12
  4. Ang CLK ay papunta sa digital pin 11
  5. Ang CS o LOAD ay papunta sa digital pin 10

Paano Ikonekta ang joystick

  1. Ang GND ay pupunta sa GND
  2. Ang 5V ay pupunta sa 5V
  3. Ang VRx ay papunta sa analog pin A0
  4. Ang VRy ay pumupunta sa analog pin A1
  5. Hindi ginagamit ang SW

Ang baterya ay kumonekta sa 9v jack upang bigyan ang Arduino lakas

Hakbang 3: Tsart ng Daloy ng Programa

Flow Chart ng Program
Flow Chart ng Program

Isinasaad ng hugis-itlog ang pagsisimula ng programa.

Ang unang hakbang ay upang tukuyin ang lahat ng mga hadlang.

Ang susunod na dalawang hakbang ay nagpapahiwatig ng pagtatakda ng mga variable at pag-on sa lahat ng mga module.

Ang susunod na hakbang, ay upang itakda ang LED sa unang antas at anumang iba pang mga variable.

Susunod na ipakita ang antas na kasalukuyang nasa.

Ipinapahiwatig ng rhombus na binabasa ang Joystick upang makita kung anong direksyon ang itinutulak nito.

Pagkatapos ilipat ang manlalaro sa anumang direksyon na itinulak ang Joystick.

Suriin at tingnan kung ang manlalaro ay nakabangga ng isang balakid.

Kung ang manlalaro ay tumama sa isang balakid, bumalik sa unang antas. Kung hindi suriin upang makita kung ang manlalaro naabot ang dulo ng antas.

Kung ang manlalaro ay nasa dulo ng antas, itakda sa susunod na antas pagkatapos ay bumalik sa, "Ipakita ang Kasalukuyang Antas.". Kung wala sila sa dulo, ilipat ang mga hadlang at bumalik sa, "Basahin ang Joystick."

Hakbang 4: Programming ang Joystick

Siyempre upang ilipat ang maliit na tuldok na iyon ang manlalaro, kailangan namin ng isang joystick. at upang payagan ang joystick na aktwal na ilipat ang manlalaro kailangan namin itong i-code sa Arduino IDE. Kailangan mong isama ang LedControl library na maaari mong makita sa pamamagitan ng pagpunta sa sketch menu> Isama ang Mga Aklatan> pamahalaan ang mga aklatan, at hanapin ang LedControl. Narito kung ano ang hitsura ng code para sa joystick.

# isama ang "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Lumilikha ng object para sa apat na modules int pagkaantala = 50; // bilis kung saan ang laro ay nagpapatakbo ng int joystick_RtLt, joystick_UpDn; int players_x = 0; // players horizontal position mula 0 hanggang 31 int players_y = 3; // players nangtung posisyon mula 0 hanggang 7 int hilera, haligi, module; void setup () {initialize_modules (); // i-on at itakda ang lahat ng apat na humantong module} void loop () {move_player (); // simulang loop sa pamamagitan ng pag-check kung gumagalaw ang manlalaro (pagkaantala ng oras); } void initialize_modules () {lc.shutdown (0, false); // nagsisimulang module 0 lc.setIntensity (0, 1); lc.shutdown (1, hindi totoo); // nagsisimula ang module na 1 lc.setIntensity (1, 1); lc.shutdown (2, hindi totoo); // nagsisimula ang module 2 lc.setIntensity (2, 1); lc.shutdown (3, hindi totoo); // nagsisimulang module 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // clears module 0} void move_player () {module = players_x / 8; // tumutukoy kung aling module ang nasa player ang player = players_x% 8; // tumutukoy sa haligi kung saan ang manlalaro ay nasa module row = players_y; lc.setLed (module, hilera, haligi, hindi totoo); // turn off led at kasalukuyang posisyon ng joystick_RtLt = analogRead (A0) / 204 - 2; // basahin ang X-joystick at saklaw ng mapa mula 2 hanggang -2 kung (joystick_RtLt> 0) // kapag ang joystick ay nasa tamang mga manlalaro_x ++; // go right else if (joystick_RtLt 0) // kung ang joystick ay nasa kaliwa at hindi sa simula players_x--; // move left joystick_UpDn = analogRead (A1) / 204 - 2; // basahin ang Y-joystick at saklaw ng mapa mula 2 hanggang -2 kung (joystick_UpDn 0) // kung ang joystick ay bumagsak at ang manlalaro ay hindi nasa ilalim ng mga manlalaro_y--; // bumaba pa kung // go up module = players_x / 8; // itakda ang module sa mga manlalaro ng bagong haligi ng posisyon = players_x% 8; // itakda ang haligi sa mga manlalaro ng bagong row ng posisyon = players_y; // itakda ang hilera sa mga manlalaro bagong posisyon lc.setLed (module, row, haligi, totoo); // turn on led sa bagong posisyon ng manlalaro}

Ngayon na naidagdag mo ang joystick gumana tayo sa unang balakid!

Hakbang 5: Ang Unang Antas

Okay, kaya ngayon oras na upang makapasok sa pangunahing bahagi ng programa, ang mga hadlang! Ang mga hadlang ay kung ano talaga ang gawin itong, "Pinakamahirap na Laro sa Daigdig." Kaya kung nais mong i-play ang laro, kailangan mo itong idagdag sa iyong code:

byte sagabal [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// three level, 8 eksena, 8 collum, 8 row

{{{1, 1, 1, 1, 1, 1, 0, 0}, // first level, first scene {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}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // first level, pangalawang eksena {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}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // first level, third eksena {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}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // una antas, ika-apat na eksena {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}, // unang antas, ikalimang eksena {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}, // unang antas, pang-anim na eksena {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}, // first level, ikapitong eksena {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, 1, 1, 1, 1, 1, 1, 1}, // first level, ikawalo eksena {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}}}, void setup () {initialize_modules (); // turn on and set all four led modules start_level (0); void loop () {move_player (); // start loop sa pamamagitan ng pag-check kung gumagalaw ang manlalaro kung (banggaan ()) {// suriin ang antas ng banggaan = 0; // kung totoo ang banggaan, i-reset ang antas ng start_level (antas); // restart game} iba kung (delay_count == balakid_delay) {// kung walang sagabal na galaw ng banggaan bawat iba pang pagkaantala ng ilipat (); delay_count = 0; } ibang pagkaantala_count ++; antala (pagkaantala ng oras); // pagkaantala ayon sa bilis ng laro}

At iyon ang unang hadlang! Kung nagsawa ka sa ito bilang iyong unang antas pagkatapos ay palagi mong mababago ang mga byte, tandaan lamang na kailangan mong magkaroon ng walong magkakaibang mga eksena! Magpatuloy tayo sa susunod na hakbang, pagtuklas ng banggaan!

Hakbang 6: Pagtuklas ng banggaan

Ang hakbang na ito ay isa pang mahalagang bahagi ng laro, kung wala ito ay hindi magiging isang hamon! maaari mo lamang mapagtagpi ang iyong paraan sa pamamagitan ng mga hadlang na walang anumang kahihinatnan! hindi yun magiging masaya diba? kaya't gawing mas mahirap ang laro (at mas nakakaaliw!) sa pamamagitan ng pagdaragdag ng seksyong ito ng programa:

void loop () {

move_player (); // start loop sa pamamagitan ng pag-check kung gumagalaw ang manlalaro kung (banggaan ()) {// suriin ang antas ng banggaan = 0; // kung totoo ang banggaan, i-reset ang antas ng start_level (antas); // restart game} iba kung (delay_count == balakid_delay) {// kung walang sagabal na galaw ng banggaan bawat iba pang pagkaantala ng ilipat (); delay_count = 0; } ibang pagkaantala_count ++; antala (pagkaantala ng oras); // pagkaantala sa pamamagitan ng bilis ng laro} int collision () {// suriin kung ang manlalaro ay tumama sa isang balakid sa tanawin module = players_x / 8; haligi = players_x% 8; row = players_y; kung (module> 0) kung (balakid [antas] [eksena] [haligi] [row] == 1) // kung ang posisyon ng manlalaro ay kapareho ng balakid na pagbalik (1); // collision napansin bumalik tunay na pagbalik (0); // walang banggaan na nagbabalik}

At ayan na! Ngayon ay mas nasiyahan ka sa laro! Ipapakita ko sa iyo kung paano i-program ang huling dalawang antas ng laro! ang iyong halos tapos na sa itinuturo na ito, at sigurado akong handa mong subukan ito!

Hakbang 7: Ang Huling Dalawang Antas

Papunta sa dulo ng itinuturo, ang huling dalawang antas na ito ang kailangan mo lang upang matapos ang larong ito. Pagkatapos ay maaari mo itong subukan para sa iyong sarili! narito ang code:

byte sagabal [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// pangalawa at pangatlong antas, 8 mga eksena, 8 mga haligi, 8 mga hilera

{{{1, 0, 0, 0, 0, 0, 0, 1}, // pangalawang antas, unang eksena {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}, // pangalawang antas, pangalawang eksena {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}, // pangalawang antas, pangatlong eksena {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}, // pangalawang antas ng pang-apat na eksena {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}, // pangalawang antas, fif ika-eksena na {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}, // pangalawang antas, pang-anim na eksena {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}, // pangalawang antas, ikapitong eksena {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}, // pangalawang antas ng ikawalong eksena {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}, // third level, unang eksena {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}, // third level, pangalawang eksena {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}, // ikatlong antas, pangatlong eksena {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}, // third level, pang-apat na eksena {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}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // third level, ikalimang eksena {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}, // third level, ika-anim na eksena {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}, // ikatlong antas, ikapitong eksena {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}, // ikatlong antas, ikawalong eksena { 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}}}};

At yun lang! handa ka na upang subukang kumpletuhin ang Worlds Hardest Game. Gayundin ang buong Arduino code ay nakakabit sa ibaba.

Inirerekumendang: