- Plano ng Laro:
- Diagram ng Circuit:
- Paunang mga kinakailangan:
- Programming Arduino para sa Space Race Game:
- Gumagana ang Arduino Space Racer Game:
Palaging masaya ang pagprograma at napabuti ito sa mga platform ng pag-unlad tulad ng Arduino. Halos lahat ng programmer dito ay susubukan na bumuo ng isang uri ng laro gamit ang wikang natutunan / ginagawa nila. Tinutulungan sila na maiayos ang kanilang mga kasanayan sa pagprogram sa isang masaya ngunit produktibong paraan. Ako ay naging isang malaking tagahanga ng Arduino mula pa nang napakilala ako rito at palaging nais na subukan ang isang bagay na cool dito, nang malaman ko kung gaano ito ka cool makukuha sa isang Graphical LCD tulad ng Nokia 5110 kasama ang Arduino ang aking ideya na bumuo ng isang laro kicked in. Ito ay isang nakawiwiling paraan upang maiayos ang ilang mga kasanayan sa programa at magsaya sa parehong oras, kaya't kahit na kayo ay maaaring interesado sa pagbuo din ng iyong laro. Samakatuwid Sa tutorial na ito matututunan natin kung paano tayo makakalikha ng Desent Game gamit ang Arduino at Graphical LCDs.
Naitayo na namin ang luma na larong Ahas na iyon gamit ang Arduino kaya sa oras na ito sumusubok kami ng bago at pinangalanan namin ang larong ito bilang Space Race Game kung saan kailangan mong panatilihing ligtas ang iyong barko mula sa mga barkong kaaway na gumagamit ng joystick.
Plano ng Laro:
Bago kami magsimula, napakahalaga na planuhin kung paano ka talaga gagana. Nagpunta ako sa Nokia5110 Graphical LCD at Joystick para sa aking pagpili ng hardware. Ipinapalagay ko sa tutorial na ito na pinili mo rin ang pareho. Dahil ang Nokia 5110 ay hindi dumating sa maraming puwang mayroon kaming plano sa aming buong laro sa loob ng resolusyon na 84 * 48 pixel ng aming display. Gumawa na kami ng mga tutorial sa kung paano i-interface ang Nokia 5110 LCD sa Arduino at Joystick sa Arduino.
Sa loob ng puwang na ito kailangan nating mahigpit na magkasya sa lugar ng paglalaro at ang lugar ng iskor ng board na magpapakita ng mga bagay tulad ng iskor at mga bagay-bagay. Napakahalagang malaman ang lokasyon ng pixel kung saan ka naglalagay ng mga bagay upang subaybayan ang mga lokasyon ng pixel at i-update ang mga ito sa screen.
Kapag napagpasyahan ang hitsura ng screen ng laro kailangan naming magpasya ang mga character sa aming laro. Para sa aking laro mayroon lamang kaming dalawa, ang character ng manlalaro na isang space ship at isang character ng kaaway na dapat magmukhang isang alien spacehip. Ang Nokia LCD ay maaaring magpakita ng mga imahe ng bitmap, kaya't nagpasya akong gamitin ang opsyong iyon upang maipakita ang aking space ship at mga kalaban.
Sa gayon magkakaroon kami ng isang sasakyang panghimpapawid na karera sa mga alien sasakyang pangalangaang, ang sasakyang panghimpapawid na ito ay magkakaroon ng tatlong mga linya sa mga pagbabago upang maiwasan ang isang hit sa mga dayuhan. Sa lahat ng oras ang mga dayuhan ay maaaring sakupin lamang ng dalawang mga track at ang player ay dapat na maaaring humimok sa pamamagitan ng libreng track. Kapag natapos ang mga ideyang ito maaari tayong magpatuloy sa Hardware at pagkatapos ay ang pag-program.
Diagram ng Circuit:
Ang circuit para sa larong Arduino na ito ay napaka-simple; kailangan lang nating i-interface ang module ng Nokia 5110 LCD at ang Joystick na may Arduino. Ang kumpletong diagram ng circuit ay ipinapakita sa ibaba
Gumagana ang Nokia 5110 LCD sa 3.3V at ang module ng Joystick na anak na 5V ang gumagana, kaya tiyaking ikinonekta mo ang LCD na may 3.3V lamang, dahil maaaring permanenteng masira ito ng 5V. Nakikipag-usap ang LCD kay Arduino sa pamamagitan ng SPI protocol at binasa lamang ng Joystick ang ADC upang mabasa ang pagbabago sa boltahe. Ang set-up ng koneksyon ay magmumukhang ganito sa ibaba
Paunang mga kinakailangan:
Bago kami sumisid sa bahagi ng programa mahalaga para sa iyo na mga tao na maging maginhawa sa module ng Display at Joystick, upang magamit mo ang mga sumusunod na tutorial upang malaman ang tungkol sa kanila at pagkatapos ay bumalik dito upang matiyak na gumagana ang mga bagay sa paraang kailangan mo to!
- Nokia 5110 LCD Interfacing kasama si Arduino
- Ang module ng Joystick na nakikipag-ugnay sa Arduino
Programming Arduino para sa Space Race Game:
Ang kumpletong programa para sa laro ay matatagpuan sa dulo ng pahinang ito; maaari mo itong gamitin nang direkta sa iyong Arduino IDE at i-upload ito sa iyo ng Lupon. Ngunit kung nais mong malaman kung ano talaga ang nangyayari sa loob ng code pagkatapos basahin ang karagdagang.
Tulad ng lagi naming sinisimulan ang aming programa sa pagdaragdag ng aming mga file ng header ng library, kailangan namin ng tatlong mga aklatan para sa proyektong ito kung saan idinagdag ang library ng SPI sa iyong IDE bilang default. Ang iba pang dalawang silid-aklatan ay kailangang ma-download mula sa pahina ng Adafruit Github. Sundin ang tutorial sa interfacing ng LCD na nabanggit sa seksyon ng paunang mga hinihingi kung hindi ka sigurado kung paano idaragdag ang library.
# isama
Kung sinundan mo ang tutorial dapat mong malaman na posible na ipakita ang mga imahe ng bitmap sa LCD. Kaya kailangan nating i- convert ang kinakailangang imahe sa bitmap code sa pamamagitan ng paggamit ng software na nabanggit sa tutorial, maaari kang pumili ng anumang imahe mula sa internet at gamitin ito sa pamamagitan ng pag-convert sa kanila sa bitmap code. Tiyaking ang imahe ay sapat na simple upang maipakita sa aming LCD screen, suriin ang preview bago talagang subukan ang LCD screen. Sa aming programa ay gumamit kami ng dalawang character na bitmap ang isa ay ang space ship at ang isa pa ay ang ship ship, ang bitmap code para sa pareho ay idinagdag sa aming code tulad ng ipinakita sa ibaba.
// Bitmap Data para sa SpaceShip static Const unsigned char PROGMEM ship = { B00000000, B00000000, B00000001, B00000000, B00000011, B10000000, B00000010, B10000000, B00000010, B11000000, B00000111, B11000000, B00001101, B11100000, B00011111, B1111111, B1111111, B1111111, B1111111, B1101, B1101, B10001, B10001, B10001, B10001, B10001101 B01111111, B11111100, B01111111, B11111100, B01111111, B11111100, B00011111, B11110000, B00000111, B11100000, B00000000, B00000000, }; // Bitmap Data for enemyship static const unsigned char PROGMEM kaaway = { B00000101, B11000000, B00001011, B11100000, B00000011, B11100000, B00110011, B11111000, B01111111, B11111100, B10111111, B11111010, B01110111, B11011100, B01111110, B11111100, B00111111, B11111100, B11101111, B11101110, B11000001, B00000110, B10000001, B00000010, B10000000, B00000010, B00000000, B00000000, };
Kailangan nating tukuyin ang mga pin kung saan nakakonekta ang display ng Nokia LCD 5110. Ang display ay naiugnay sa paggamit ng pakikipag-usap sa SPI, kung sinundan mo ang circuit diagram sa itaas, ang code upang maipakilala ang LCD ay ang mga sumusunod na hindi mo kailangang baguhin ito.
Display ng Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3); // Tukoy ang mga pin kung saan nakakonekta ang LCD
Sa loob ng pag- andar ng pag- set up sinisimulan lamang namin ang Serial monitor sa 9600 baud rate upang maaari naming i-debug ang mga bagay at pagkatapos ay simulan ang LCD display. Kailangan din naming itakda ang kaibahan ng LCD display, ang bawat display ay gagana ng pinakamahusay sa isang iba't ibang antas ng kaibahan, kaya't maglaro kasama ang halaga upang suriin kung alin ang nababagay sa iyo. Sa wakas nililinaw din namin ang display screen upang magsimulang sariwa.
void setup () { Serial.begin (9600); // Serial Monitor para sa display ng Pag- debug. Simula (); // Simulan ang display ng komunikasyon sa LCD.setContrast (30); // Itakda ang kaibahan ng display display.clearDisplay (); // nililimas ang screen at nagsisimulang bago }
Sa sandaling ang screen ay nalinis namin tumalon sa loop function at doon namin ipakita ang laro screen. Ang screen ng laro ay walang anuman ngunit nagpapakita ng isang pangunahing balangkas para sa laro kasama ang iskor at antas ng bilis. Ginamit namin ang pagpapaandar ng linya upang gumuhit ng tatlong mga linya bilang mga hangganan at sa kanan ay ipinapakita namin ang marka ng teksto at bilis tulad ng mga lumang aparato sa paglalaro ng retro na kamay.
void gamescreen () { // Iguhit ang Border for Screen display.drawLine (0, 0, 0, 47, BLACK); display.drawLine (50, 0, 50, 47, BLACK); display.drawLine (0, 47, 50, 47, BLACK); // Enter Default TeXT display.setTextSize (1); display.setTextColor (BLACK); display.setCursor (52,2); display.println ("Bilis"); display.setCursor (54,12); display.println (game_speed); display.setCursor (52,25); display.println ("Kalidad"); display.setCursor (54,35); display.println (puntos); }
Susunod kailangan nating makuha ang input mula sa gumagamit upang payagan siyang kontrolin ang barko sa kalawakan. Ang input ay matatanggap mula sa Joystick module na konektado sa pin A1. Ang halaga ng analog mula sa sensor ay 512 kung hindi ito inilipat at tataas at babawasan kapag inilipat kasama ang X-axis. Ginagamit namin ang mga halagang ito upang matukoy kung ang gumagamit ay nais na lumipat sa kaliwa o sa kanan. Dapat mong basahin ang Joystick na nakikipag-ugnay sa Arduino tutorial na nabanggit sa paunang mga kinakailangan kung nahihirapan kang maunawaan ang program sa ibaba.
// Kumuha ng input mula sa gumagamit na Joy_X = analogRead (A1); // Basahin ang X vaue mula sa Joystick kung (Joy_X <312 && POS! = 1 && control == totoo) // Kung ang galaw ng stick ay kumikilos nang tama {POS--; control = false;} // Posisyon ng pagbawas ng sasakyang pangalangaang iba pa kung (Joy_X> 712 && POS! = 3 && control == totoo) // Kung ang galaw ng stick ay kumikilos nang tama {POS ++; control = false;} // Pagtaas ng posisyon ng sasakyang pangalangaang iba pa kung (Joy_X> 502 && Joy_X <522) // Kung ang joystick bumalik sa paunang kontrol sa posisyon = totoo; // Ihanda ito para sa susunod na paglipat // Input mula sa natanggap ng gumagamit
Matapos makuha ang posisyon ng sasakyang pangalangaang mula sa gumagamit kailangan naming ilagay ang space ship sa partikular na lugar. Ginagamit namin ang pagpapaandar sa ibaba at ipasa ang halaga ng posisyon bilang isang parameter, pagkatapos ay batay sa posisyon na inilagay ang space ship sa kani-kanilang track.
void player_car (char pos) // Ilagay ang sasakyang pangalangaang batay sa posisyon na pinili ng gumagamit { kung (pos == 1) display.drawBitmap (2, 32, barko, 15, 15, BLACK); kung (pos == 2) display.drawBitmap (18, 32, barko, 15, 15, BLACK); kung (pos == 3) display.drawBitmap (34, 32, barko, 15, 15, BLACK); }
Ngayon na ang aming sasakyang pangalangaang ay nakalagay sa screen at handa na para sa karera kailangan naming ipakilala ang mga barkong kaaway na nakikipagkumpitensya kasama ang manlalaro. Sa bawat oras na ang isang kaaway na barko ay tumawid sa screen ipinapalagay namin na siya ay patay na at kapag siya ay patay na kailangan naming lumikha ng isang bagong barko sa kalawakan. Ang pag-andar sa ibaba ay pareho lamang. Lumilikha ito ng isang bagong posisyon para sa dalawang mga barkong kaaway at inilalagay ang mga ito sa tuktok ng screen.
kung (kaaway_dead) // Suriin ang mga barko ng kaaway ay patay na {// Kung sila ay patay na kaaway_0_pos = POS; // lumikha ng unang kaaway sa itaas ng space ship kaaway_1_pos = random (0,4); // create secound kaaway sa ilang iba pang mga random na lugar ng fili_phase = 0; // Dalhin ang kaaway na bumubuo sa tuktok na kaaway_dead = false; // Ang Kaaway ay nilikha upang hindi na sila patay }
Matapos mailagay ang mga barko ng kaaway sa tuktok ng screen kailangan nating ibaba ito upang ito ay sibat na parang ang aming manlalaro ay karera paitaas, upang gawin iyon kailangan lang nating madagdagan ang yugto (ang lugar kung saan ipinakita ang imahe) upang dahan-dahang bumababa. Ang pareho ay ginagawa para sa parehong mga barko ng kaaway tulad ng ipinakita sa ibaba
kaaway_ship (kaaway_0_pos, kaaway_phase); kaaway_phase ++; // Ilagay ang unang kaaway sa screen at itaboy siya sa kaaway_ship (kaaway_1_pos, kaaway_phase); kaaway_phase ++; // Ilagay ang secound na kaaway sa screen at ihatid siya pababa
Ang pag-andar ng kaaway_ship ay ipinapakita sa ibaba, ito ay halos kapareho sa pagpapaandar ng kotse ng manlalaro ngunit narito mayroon kaming dalawang mga parameter. Ang isa ay para sa paglalagay ng kaaway sa isang track at ang isa pa ay para sa paglipat ng kaaway patungo sa ilalim.
walang bisa ang kaaway_ship (int lugar, int phase) // Ilagay ang kaaway_ sa bagong lugar at yugto { kung (lugar == 1) display.drawBitmap (2, yugto, kaaway, 15, 15, BLACK); kung (lugar == 2) display.drawBitmap (18, yugto, kaaway, 15, 15, BLACK); kung (lugar == 3) display.drawBitmap (34, phase, kaaway, 15, 15, BLACK); }
Dapat suriin ng susunod na piraso ng code kung naiwasan ng space ship ang kaaway ship. Upang suriin ito kailangan nating malaman ang posisyon ng mga barkong kaaway at ang ship ship ng manlalaro. Dahil alam namin ang lahat na kailangan lamang nating suriin kung ang posisyon ng space ship ay kapareho ng ship ng kaaway. Susuriin lamang namin ito kung nakarating na ang barko ng kaaway malapit sa space ship. Kung ang player ay hindi maiwasan ang kaaway nangangahulugan ito ng laro sa paglipas.
kung (kaaway_phase> 22 && ((kaaway_0_pos == POS) - (kaaway_1_pos == POS))) // Kung ang Spaceship ay hawakan ang alinman sa mga game_over ng kaaway (); // Ipakita ang laro sa paglipas
Kung ang manlalaro ay naiwasang matagumpay ang kaaway dapat nating patayin ang kaaway at bigyan ang manlalaro ng isang punto. Upang magawa ito suriin lamang natin kung ang kaaway ay umabot sa ilalim ng screen at kung papatayin natin ito gamit ang code sa ibaba
kung (kaaway_phase> 40) // Kung ang barko ng espasyo ay makatakas sa mga kaaway {kaaway_dead = totoo; puntos ++;} // Taasan ang iskor at patayin ang mga kaaway
Ano ang magiging kasiyahan nito, kung hindi natin nadaragdagan ang kahirapan ng laro habang nakakakuha tayo ng mataas na marka. Kaya gumagamit kami ng isa pang pag-andar kung saan sinusubaybayan ang iskor ng manlalaro at batay sa iskor ay madaragdagan nito ang bilis ng laro. Ang bilis ay talagang kinokontrol ng paggamit ng pagpapaandar na pagpapaandar na makokontrol nito ang agwat ng pag-refresh ng laro kaya't ginagawa itong mabilis o mabagal.
walang bisa Level_Controller () // Taasan ang bilis ng laro batay sa iskor. { if (score> = 0 && iskor <= 10) // Kung iskor 0-10 { game_speed = 0; pagkaantala (80); // mabagal ang laro ng 80ms } kung (iskor> 10 && iskor <= 20) // Kung iskor 10-40 { game_speed = 1; pagkaantala (70); // mabagal ang laro ng 70ms } kung (iskor> 20 && iskor <= 30) // Kung iskor 20-40 { game_speed = 2; pagkaantala (60); // mabagal ang laro ng 60ms } kung (iskor> 30 && iskor <= 40) // Kung iskor 30-40 { game_speed = 3; antala (50); // pabagalin ang laro ng 50ms } }
Gumagana ang Arduino Space Racer Game:
Matapos matiyak na nauunawaan ang hardware at programa, buuin lamang ang circuit at i-upload ang code sa Arduino Board. Dapat mong mapansin ang pagsisimula ng laro tulad ng ipinakita sa ibaba
Gamitin ang joystick upang makatakas sa barko ng kaaway sa pamamagitan ng paglipat pakaliwa o pakanan. Para sa pag-iwas sa bawat kaaway makakakuha ka ng iyong iskor na nadagdagan ng isa. Kapag mataas ang iskor ang bilis ng laro ay tataas din, iyon ang pagtaas ng bilis ng 10ms para sa bawat 10 puntos na iyong na-iskor. Maaari kang magpatuloy at bumuo sa larong ito upang ipakilala ang mga bagong antas o bawat gumawa ng ilang mga pagbabago sa hardware upang makontrol ito kahit na paggalaw gamit ang isang accelerometer. Ang pagkamalikhain lamang ang limitasyon. Para sa iyong sanggunian natutunan mong gamitin ang Accelerometer kasama ang Arduino dito.
Inaasahan kong naintindihan mo ang proyekto at nasiyahan sa pagbuo nito. Kung naharap mo ang anumang problema sa pagtatrabaho nito, mangyaring huwag mag-atubiling i-post ang problema sa seksyon ng komento sa ibaba o gamitin ang mga forum para sa panteknikal na tulong. Maligayang paglalaro !!
Suriin ang kumpletong code at ang Demonstration Video sa ibaba.