Orodha ya maudhui:

Kuunda tena Mchezo Mgumu wa Ulimwengu kwenye Arduino: Hatua 7
Kuunda tena Mchezo Mgumu wa Ulimwengu kwenye Arduino: Hatua 7

Video: Kuunda tena Mchezo Mgumu wa Ulimwengu kwenye Arduino: Hatua 7

Video: Kuunda tena Mchezo Mgumu wa Ulimwengu kwenye Arduino: Hatua 7
Video: 28 панфиловцев. Самая полная версия. Panfilov's 28 Men (English subtitles) 2024, Julai
Anonim
Image
Image

Mradi huu unatokana na mchezo wa kompyuta ambao unaweza kupata mkondoni. Jina lake ni, "Ulimwengu Mgumu Mchezo." Niliweza kuunda tena kwenye Arduino kwa kutumia moduli nne ya LED Matrix. Katika hii inaweza kufundisha jinsi ya kuijenga mwenyewe. Kabla hatujaingia kwenye maelezo mengi nataka kutoa muhtasari wa haraka wa hatua nilizopitia kuunda mchezo huu.

  1. Nilikusanya sehemu zote zinazohitajika.
  2. Niliunganisha sehemu hizo pamoja.
  3. Niliandika mchoro ambao ulitumia kiboreshaji cha kusogeza wachezaji wa LED kwenye moduli zote.
  4. Niliunda vizuizi vya kwanza na nikaongeza kwenye mchoro ili waiga Mchezo Mgumu zaidi wa Ulimwengu.
  5. Kisha nikaongeza nambari kugundua mgongano na vizuizi, ambavyo vitaanza tena mchezo.
  6. Na kisha nikabuni viwango vingine viwili vya vizuizi.

Hatua ya 1: Sehemu zote

Sehemu Zote
Sehemu Zote
Sehemu Zote
Sehemu Zote

Hapa kuna orodha ya sehemu zote unayohitaji:

  1. Kiunga cha Arduino UNO na kiunganishi cha usb:
  2. Moduli nne 8x8: Tumbo la LED https://www.banggood.com/MAX7219-Dot-Matrix-Module..
  3. Joystick:
  4. Waya 10 wa kiume hadi wa kike:

Hatua ya 2: Jinsi ya Kuunganisha Sehemu kwenye Arduino

Jinsi ya Kuunganisha Sehemu kwenye Arduino
Jinsi ya Kuunganisha Sehemu kwenye Arduino

Jinsi ya Kuunganisha Matrix ya LED kwa Arduino

  1. GND huenda kwa GND
  2. VCC huenda kwa 5V
  3. DataIn huenda kwa pini ya dijiti 12
  4. CLK huenda kwa pini ya dijiti 11
  5. CS au LOAD huenda kwa pini ya dijiti 10

Jinsi ya Kuunganisha fimbo ya furaha

  1. GND huenda kwa GND
  2. 5V huenda kwa 5V
  3. VRx huenda kwa pini ya Analog A0
  4. VRy huenda kwa pini ya Analog A1
  5. SW haitumiki

Betri huunganisha kwenye jack 9v ili kutoa nguvu ya Arduino

Hatua ya 3: Chati ya mtiririko wa Programu

Chati ya Mtiririko wa Programu
Chati ya Mtiririko wa Programu

Mviringo unaonyesha mwanzo wa programu.

Hatua ya kwanza ni kufafanua vizuizi vyote.

Hatua mbili zifuatazo zinaonyesha kuweka vigeuzi na kuwasha moduli zote.

Hatua inayofuata, ni kuweka LED kwenye kiwango cha kwanza na anuwai zingine.

Ifuatayo onyesha kiwango ambacho mchezaji yuko sasa.

Rhombus inaonyesha kusoma Joystick ili kuona ni mwelekeo gani unasukumwa.

Kisha songa mchezaji kwa mwelekeo wowote ule Joystick ilisukumwa.

Angalia na uone ikiwa mchezaji aligongana na kikwazo.

Ikiwa mchezaji atagonga kikwazo, rudi kwenye kiwango cha kwanza. Ikiwa sivyo angalia ikiwa mchezaji alifikia mwisho wa kiwango.

Ikiwa mchezaji yuko mwisho wa kiwango, weka ngazi inayofuata kisha urudi kwenye, "Onyesha Kiwango cha Sasa.". Ikiwa hayako mwishoni, songa vizuizi na urudi kwa, "Soma Joystick."

Hatua ya 4: Kuweka programu ya Joystick

Kwa kweli ili kusonga nukta ndogo ambayo ni mchezaji, tunahitaji fimbo ya kufurahisha. na ili kuruhusu kifurushi kusonga kweli mchezaji tunahitaji kuisimbo katika IDE ya Arduino. Unahitaji kujumuisha maktaba ya LedControl ambayo unaweza kupata kwa kwenda kwenye menyu ya mchoro> Jumuisha Maktaba> dhibiti maktaba, na utafute LedControl. Hapa ndivyo nambari ya kifurushi inavyoonekana.

# pamoja na "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Inaunda kitu kwa moduli nne za muda wa kuchelewesha = 50; // kasi ambayo mchezo huendesha int joystick_RtLt, joystick_UpDn; int players_x = 0; // wachezaji nafasi ya usawa kutoka 0 hadi 31 int players_y = 3; // wachezaji wima msimamo kutoka 0 hadi 7 safu ya safu, safu, moduli; kuanzisha batili () {initialize_modules (); // washa na weka moduli zote nne zilizoongozwa} kitanzi batili () {move_player (); // anza kitanzi kwa kuangalia ikiwa mchezaji anasonga kuchelewa (muda wa kuchelewesha); } batili initialize_modules () {lc. kuzima (0, uwongo); // kuanza moduli 0 lc.setIntensity (0, 1); lc kuzima (1, uwongo); // kuanza moduli ya 1 lc. Kuweka Nguvu (1, 1); lc kuzima (2, uwongo); // kuanza moduli ya 2 lc. Usongamano (2, 1); lc kuzima (3, uwongo); // kuanza moduli ya 3 lc. Usongamano (3, 1); lc Onyesha wazi (0); // inafuta moduli 0} batili move_player () {module = players_x / 8; // inafafanua moduli gani mchezaji yuko kwenye safu = players_x% 8; // inafafanua safu ambapo mchezaji yuko kwenye safu ya moduli = players_y; lc.setLed (moduli, safu, safu, uwongo); // kuzima kuongozwa kwenye nafasi ya sasa ya mchezaji joystick_RtLt = analogRead (A0) / 204 - 2; // soma X-joystick na ramani anuwai kutoka 2 hadi -2 ikiwa (joystick_RtLt> 0) // wakati joystick iko kwa wachezaji wa kulia_x ++; // nenda kulia pengine ikiwa (joystick_RtLt 0) // ikiwa fimbo ya kufurahisha iko kushoto na sio mwanzoni wachezaji_x--; // hoja kushoto joystick_UpDn = analogSoma (A1) / 204 - 2; // soma Y-joystick na ramani anuwai kutoka 2 hadi -2 ikiwa (joystick_UpDn 0) // ikiwa fimbo ya kufurahisha iko chini na mchezaji hayuko chini wachezaji_y--; // songa chini kwingine ikiwa (joystick_UpDn> 0 && players_y <7) // ikiwa kiboreshaji cha furaha kiko juu na mchezaji hayuko kwenye wachezaji wa juu_y ++; // kwenda juu moduli = players_x / 8; // seti moduli kwa wachezaji safu mpya ya nafasi = players_x% 8; // kuweka safu kwa wachezaji safu mpya ya nafasi = players_y; // seti safu kwa wachezaji nafasi mpya lc.setLed (moduli, safu, safu, kweli); // washa ikiongozwa katika nafasi mpya ya mchezaji}

Sasa kwa kuwa umeongeza kitanda cha kufurahisha hebu tushughulikie kikwazo cha kwanza!

Hatua ya 5: Kiwango cha Kwanza

Sawa, kwa hivyo sasa ni wakati wa kuingia kwenye sehemu kuu ya programu, vizuizi! Vizuizi ndivyo kweli hufanya hii kuwa, "Mchezo Mgumu Ulimwenguni." Kwa hivyo ikiwa unataka kweli kucheza mchezo basi unahitaji kuongeza hii kwa nambari yako:

kikwazo cha baiti [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// ngazi tatu, viwambo 8, nguzo 8, safu 8

{{{1, 1, 1, 1, 1, 1, 0, 0}, // kiwango cha kwanza, onyesho la kwanza {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}, // kiwango cha kwanza, eneo la pili {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}, // kiwango cha kwanza, cha tatu eneo la {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}, // kwanza kiwango, eneo la nne {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}, // kiwango cha kwanza, eneo la tano {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}, // kiwango cha kwanza, eneo la sita {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}, // kiwango cha kwanza, eneo la saba {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}, // kiwango cha kwanza, cha nane mandhari {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}}}, usanidi batili () {initialize_modules (); // washa na weka moduli zote nne zilizoongozwa start_level (0); kitanzi batili () {move_player (); // anza kitanzi kwa kuangalia ikiwa mchezaji anasonga ikiwa (mgongano ()) {// angalia kiwango cha mgongano = 0; // ikiwa mgongano ni wa kweli, weka kiwango cha kuanza_level (kiwango); // kuanza tena mchezo} mwingine ikiwa (delay_count == kikwazo_chelewesha) {// ikiwa hakuna kizuizi cha kusonga kwa mgongano kila kichocheo kingine cha kuchelewesha (); delay_count = 0; } mwingine delay_count ++; kuchelewesha (muda wa kuchelewesha); // kuchelewa kwa kasi ya mchezo}

Na hicho ndicho kikwazo cha kwanza! Ukichoshwa na hii kama kiwango chako cha kwanza basi unaweza kubadilisha ka kila wakati, kumbuka tu unahitaji kuwa na pazia nane tofauti! Wacha tuendelee na hatua inayofuata, kugundua mgongano!

Hatua ya 6: Kugundua Mgongano

Hatua hii ni sehemu nyingine muhimu ya mchezo, na nje yake hakungekuwa na changamoto nyingi! unaweza kusuka njia yako kupitia vizuizi bila matokeo yoyote! hiyo haitakuwa ya kufurahisha sana? basi hebu tufanye mchezo kuwa mgumu zaidi (na burudani zaidi!) kwa kuongeza sehemu hii ya programu:

kitanzi batili () {

mchezaji_mchezaji (); // anza kitanzi kwa kuangalia ikiwa mchezaji anasonga ikiwa (mgongano ()) {// angalia kiwango cha mgongano = 0; // ikiwa mgongano ni wa kweli, weka kiwango cha kuanza_level (kiwango); // kuanza tena mchezo} mwingine ikiwa (delay_count == kikwazo_chelewesha) {// ikiwa hakuna kizuizi cha kusonga kwa mgongano kila kichocheo kingine cha kuchelewesha (); delay_count = 0; } mwingine delay_count ++; kuchelewesha (muda wa kuchelewesha); // kuchelewa kwa kasi ya mchezo} mgongano wa int () {// angalia ikiwa mchezaji amepiga kikwazo katika moduli ya eneo = players_x / 8; safu = players_x% 8; safu = wachezaji_y; ikiwa (moduli> 0) ikiwa (kikwazo [kiwango] [eneo] [safu] [safu] [safu] == 1) // ikiwa nafasi ya mchezaji ni sawa na kurudi kwa kikwazo (1); // mgongano umegundua kurudi kweli (0); // hakuna mgongano kurudi uongo}

Na hapo unaenda! sasa unaweza kufurahiya mchezo zaidi! Sasa nitakuonyesha jinsi ya kupanga viwango viwili vya mwisho vya mchezo! yako karibu umemaliza na hii inayoweza kufundishwa, na nina hakika uko tayari kuijaribu!

Hatua ya 7: Ngazi Mbili za Mwisho

Walikuwa wanafika mwisho wa kufundisha, ngazi hizi mbili za mwisho ndizo zote unahitaji kumaliza mchezo huu. Basi unaweza kujaribu mwenyewe! nambari ni hii:

kikwazo cha baiti [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// ngazi ya pili na ya tatu, pazia 8, safu 8, safu 8

{{{1, 0, 0, 0, 0, 0, 0, 1}, // ngazi ya pili, onyesho la kwanza {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}, // ngazi ya pili, eneo la pili {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}, // ngazi ya pili, eneo la tatu {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}, // ngazi ya pili eneo la nne {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}, // kiwango cha pili, tano eneo la {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}, // ngazi ya pili, eneo la sita {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}, // ngazi ya pili, eneo la saba {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}, // kiwango cha pili eneo la nane {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}, // ngazi ya tatu, onyesho la kwanza {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}, // ngazi ya tatu, eneo la pili {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}, // ngazi ya tatu, eneo la tatu {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}, // ngazi ya tatu, eneo la nne {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}, // ngazi ya tatu, eneo la tano {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}, // ngazi ya tatu, eneo la sita {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}, // ngazi ya tatu, eneo la saba {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 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}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // kiwango cha tatu, eneo la nane { 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}}}};

Na ndio hivyo! mmekuwa tayari kujaribu kumaliza Mchezo Mgumu zaidi Ulimwenguni. Pia nambari kamili ya Arduino imeambatanishwa hapa chini.

Ilipendekeza: