Mchezo wa Recelier Racer Arduino OLED, AdafruitGFX na Misingi ya Bitmaps: Hatua 6
Mchezo wa Recelier Racer Arduino OLED, AdafruitGFX na Misingi ya Bitmaps: Hatua 6
Anonim
Mchezo wa Reckless Racer Arduino OLED, AdafruitGFX na Misingi ya Bitmaps
Mchezo wa Reckless Racer Arduino OLED, AdafruitGFX na Misingi ya Bitmaps
Mchezo wa Reckless Racer Arduino OLED, AdafruitGFX na Misingi ya Bitmaps
Mchezo wa Reckless Racer Arduino OLED, AdafruitGFX na Misingi ya Bitmaps

Katika mafunzo haya tutaangalia jinsi ya kutumia bitmaps kutumia maktaba ya Adafruit_GFX.c kama aina ya sprites kwenye mchezo. Mchezo rahisi zaidi ambao tunaweza kufikiria ni njia inayosonga upande inayobadilisha mchezo wa gari, mwishowe mchunguzi wetu wa beta na msaidizi msaidizi aliamua "Reckless Racer" kama jina, kama ujinga wake wa kuendesha njia mbaya chini ya barabara !!.

Ubunifu wa mzunguko wetu uko kwenye picha zilizojumuishwa hapo juu na imeelezewa katika mradi / mafunzo yetu ya mwisho hapa Maagizo ya Nyoka ambayo yanaelezea jinsi mzunguko unavyofanya kazi.

tutahitaji

Matunda_GFX

Rangi.net

Arduino IDE windowslinux

na tafadhali angalia mafunzo ya Nyoka kwa vifaa vyote.

Vifaa

Mchezo wa Nyoka

Hatua ya 1: Kufunga Paint.net

Kufunga Paint.net
Kufunga Paint.net
Kufunga Paint.net
Kufunga Paint.net
Kufunga Paint.net
Kufunga Paint.net

Tunatumia paint.net kwani programu ni bure na bure kabisa kutumia unaweza kupakua Paint. Net hapa.

Kusanikisha paint.net bonyeza mara mbili programu iliyopakuliwa na ujibu vyema vile vile ijayo, ndio, sawa, ninakubali na picha hapo juu zitakupa mwelekeo.

Hatua ya 2: Kuchora Screen Rahisi ya Splash

Kuchora Screen rahisi ya Splash
Kuchora Screen rahisi ya Splash
Kuchora Screen rahisi ya Splash
Kuchora Screen rahisi ya Splash
Kuchora Screen rahisi ya Splash
Kuchora Screen rahisi ya Splash

Unapokuwa kwenye paint.net tengeneza picha mpya kwa kubofya Faili kisha mpya, weka saizi ya picha kuwa 1260x620 (angalia picha ya kwanza) bonyeza sawa wakati una ukurasa mpya chora skrini ya Splash ukitumia rangi 2 tu nyeusi na nyeupe ukitumia penseli zana (pic2), wakati umechora (au kubandika) picha yako ya skrini iliyochapishwa, bonyeza picha kisha ubadilishe ukubwa (image4), kwenye pop up badilisha saizi kutoka 1260x620 hadi 126x62 (saizi 2 ndogo kuliko onyesho lako) (pic5) Bonyeza sawa.

bonyeza kitufe cha Faili kisha uhifadhi kama (pic6).

pop pop inapoonekana kwenye menyu ya aina ya faili chagua BMP (bitmap). (pic7), andika jina la faili na ubonyeze kuokoa, wakati ibukizi inaonekana imewekwa kwa 0 na kuweka kwa 8 kidogo, bonyeza sawa (pic8).

Hatua ya 3: Kubadilisha BMP kuwa faili ya C Bitmap

Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap
Kubadilisha BMP kuwa faili ya C Bitmap

Sasa tunahitaji kubadilisha picha yetu kuwa fomati ambayo arduino inaweza kuelewa kuna zana nyingi zinazopatikana kufanya hivyo lakini "nenda" mahali ni tovuti ya ubadilishaji wa wavuti ya marlin bitmap…

marlinfw.org/tools/u8glib/converter.html

Kwa hivyo tunaanza sehemu hii kwa kutumia kiunga hapo juu kufungua wavuti ambayo imeonyeshwa kwenye pic1

bonyeza faili chagua na uchague bitmap uliyoundwa mapema (pic2)

kibadilishaji cha marlin bitmap kitabadilisha picha yako kiotomatiki kuwa c kificho kushoto bonyeza mara mbili nambari ambayo inapaswa kuonyesha nambari hiyo, kisha bonyeza kulia na bonyeza nakala (pic3)

ijayo Tunaunda bonyeza ya kulia na tengeneza hati mpya ya maandishi (pic4)

bonyeza mara mbili hati mpya, wakati inafunguliwa bonyeza kulia na kubandika nambari (pic5)

ijayo lazima tuongeze laini karibu na juu ya nambari # pamoja na hii inatuwezesha kuhifadhi data ya bitmap kwenye kumbukumbu ya flash kwenye arduino, kisha tunapeana jina #ufafanue upana, urefu na jina kwa kitu rahisi kutumia hizi zimeangaziwa. katika picha 6, tunawapeana jina kutoka kwa wahusika wanaozalisha nasibu tunawabadilisha kwa mfano uliopigwa alama hapa chini

#fafanua LOGOWIDTH

#fafanua LOGOHEIGHT

const unsigned char LOGOPIC PROGMEM

bonyeza faili kisha uhifadhi kama, hifadhi faili kama logo.c funga daftari, bonyeza kulia kwenye logo.c na bonyeza nakala.

Hatua ya 4: Kuonyesha LOGO Kutumia DrawBitmap

Kuonyesha LOGO Kutumia DrawBitmap
Kuonyesha LOGO Kutumia DrawBitmap
Kuonyesha LOGO Kutumia DrawBitmap
Kuonyesha LOGO Kutumia DrawBitmap
Kuonyesha LOGO Kutumia DrawBitmap
Kuonyesha LOGO Kutumia DrawBitmap

Sasa tunapakia IDE ya arduino na tunaunda mchoro mpya na kuihifadhi iitwayo logoexample.ino, ijayo kama kudanganya kwenye ideu ya arduino bonyeza menyu ya faili kisha uhifadhi kama, rudi kwenye folda ya mradi bonyeza kulia na ubandike kwenye faili ya.c (pic2) kisha bonyeza kufuta, hii inakuokoa ikibidi uvinjari kwenye folda ili kubandika kwenye faili.

andika nambari ifuatayo kwenye IDE ya arduino au pakua kwenye ino.

(tunapendekeza kuandika badala ya kunakili na kubandika au kutumia faili zilizo chini ya njia bora ya kujifunza)

# pamoja / / hii itatofautiana kulingana na mahali unapohifadhi

kawaida kwenye folda C: Watumiaji ~ jina la mtumiaji / Nyaraka / Arduino / mradi ~ jina

na hivi ndivyo tunavyounganisha na bitmap yetu * /

# pamoja

# pamoja

uint8_t bmpX, bmpY = 0; / * hifadhi kumbukumbu kwa nambari 2 X 8 kidogo, tunahitaji tu ints 8

kwani thamani haijawahi kuwa ya juu kuliko 128 (saizi) kwa hivyo tunaweza kuokoa nafasi kwa kutumia ints 8 (ambayo ina kiwango cha juu cha 255) * /

kuanzisha batili ()

{kuchelewa (100); // toa onyesho nk wakati wa kuwasha kwenye onyesho. kuanza (SSD1306_SWITCHCAPVCC, 0x3C); // hii ni kuanzisha onyesho la onyesho.clearDisplay (); // anza na skrini tupu}

/ * tafadhali kumbuka huna lazima uandike maoni haya kwa kuwa ni kwa kumbukumbu …………..

Amri ambayo tutazingatia ni onyesho.drawBitmap, hii ndio inachora skrini yetu ya Splash. (bmpX, ni thamani ya mhimili wa X kwenye skrini ambapo nukta ya X ya bitmap itakuwa na bmpX na bmpY ndio maadili tunayopenda kuunda harakati (bmpY, ni thamani ya mhimili wa Y kwenye skrini ambapo nanga ya Y hatua ya bitmap tutapata majina ya kumbukumbu kama tulivyoyafafanua katika logo.c (LOGOPIC, ni jina la bitmap kwenye nembo ya faili ya # ikiwa ni pamoja na.c (LOGOWIDTH, ni saizi ngapi zinazoingia (X) kuteka bitmap kutoka kwa nanga (LOGOHEIGHT, ni saizi ngapi chini (Y) kuteka bitmap kutoka kwa nanga nanga saizi za X na Y zinaweza kuingizwa kwa mikono lakini ni rahisi kutumia zile zilizotanguliwa kuliko kuzikumbuka zote (1, thamani ya mwisho ni rangi kwani skrini ni nyeupe 0 nyeusi 1 nyeupe. sawa anza kuandika kutoka kwa mstari unaofuata: lolD lol * / utupu kitupu () {display.clearDisplay (); // tupu skrini // bitmap inayotolewa kutoka kwa juu kushoto, x, y, nameof bitmap, upana X, urefu Y, kuonyesha rangi.drawBitmap (bmpX, bmpY, LOGOPIC, LOGOWIDTH, LOGOHEIGHT, 1); onyesha onyesha (); // hii kweli huvuta bafa kwenye onyesho milele}

pakia nambari yako ya arduino na uthibitishe kuwa inafanya kazi (pic3).

Hatua ya 5: Kuhamisha Sprite ya Bitmap

Image
Image
Kusonga Sprite ya Bitmap
Kusonga Sprite ya Bitmap
Kusonga Sprite ya Bitmap
Kusonga Sprite ya Bitmap

kutumia maagizo ya mapema tumia paint.net na utengeneze faili mpya iwe saizi 30x15 (pic1) na chora gari mbaya mtengenezaji wetu mchanga anaanza na kioo cha mbele kwanza (picha 2 & 3).

ihifadhi tena kama faili ya bmp windows (kama katika hatua ya 2), badili kuwa C bitmap (step3) na uweke faili ya car.c (au kile unachoamua) kwenye folda sawa na mpya ya arduino ino (mchoro) faili.

(p.s. kumbuka kuongeza # pamoja na laini kwenye gari.c hii ilitumika kututoa mara nyingi)

Kwanza unganisha sawa na gari.c

# pamoja

# pamoja na # pamoja na Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library #include Adafruit_SSD1306 //

Maonyesho ya Adafruit_SSD1306 (128, 64); // weka azimio la onyesho

/ * bmpX / bmpY tunahitaji hizi kuwa vigeuzi kama kubadilisha maadili haya na kuunda upya

skrini ni jinsi tunavyounda athari ya uhuishaji wa harakati. hitSide na hitTop ni jinsi tunavyoweka sprite kwenye skrini * / uint8_t bmpX, bmpY = 0; // kumbukumbu ya hifadhi ya 2 8 bit ints (0-255) hatuhitaji kubwa 128 itakuwa nambari kubwa inayotumiwa bool hitSide = 0; bool hitTop = 0;

kuanzisha batili ()

{kuchelewa (100); // toa onyesho nk wakati wa kuwasha kwenye onyesho. kuanza (SSD1306_SWITCHCAPVCC, 0x3C); // hii ni kuanzisha maonyesho. clearDisplay (); // kuanza na skrini tupu

}

kitanzi batili ()

{onyesha. UsafiDisplay (); // tupu skrini // bitmap iliyochorwa kutoka juu kushoto, x, y, jina la bitmap, upana X, urefu Y, kuonyesha rangi.drawBitmap (bmpX, bmpY, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // onyesha.display (); // hii inavuta bafa kwenye onyesho milele / * hivi ndivyo tunafuatilia ukingo wa skrini na kuamua ikiwa tutaongeza pikseli kwenda juu chini) au kuondoa pikseli (songa chini hadi juu) * / switch (hitSide // hii inachagua mwelekeo wa gari kulingana na boole {kesi 0: bmpX ++; kuvunja;

kesi 1:

bmpX -; kuvunja; } // hizi 2 ikiwa taarifa zinaweka bool kuwa kweli au uwongo ikiwa (bmpX == 0) {hitSide = 0; } ikiwa (bmpX == 96) // upana wa skrini unatoa gari {hitSide = 1; } // sawa na hapo juu kwa mhimili Y ikiwa (bmpY == 0) {hitTop = 0; } ikiwa (bmpY == 49) // urefu wa skrini hupunguza urefu wa gari {hitTop = 1; } badilisha (hitTop) {kesi 0: bmpY ++; kuvunja; kesi 1: bmpY--; kuvunja; }

}

unaweza kuona programu inafanya kazi kwenye video iliyoambatanishwa

Hatua ya 6: Kufanya Mchezo wa Kuendesha Gari

Image
Image

Kwanza Tunaanza kwa kuchora magari kadhaa tofauti au vizuizi kama katika hatua za mwanzo za mafunzo na kuzifanya kuwa saizi 30x15. Kisha tunawabadilisha kuwa c bitmaps na unganisha kwenye nambari.

# pamoja na // njia hizi zitabidi zibadilike kuwa tegemezi

// juu ya mahali unapohifadhi faili // hariri: nimegundua tu ikiwa unachukua nafasi ya // na "" hauitaji njia kamili // na maktaba yako mwenyewe # pamoja

# pamoja

#jumuisha #jumuisha

# pamoja

# pamoja # // https://github.com/adafruit/Adafruit-GFX-Library # pamoja # Adafruit_SSD1306 //

Maonyesho ya Adafruit_SSD1306 (128, 64); // fafanua vigezo vya kuonyesha

fafanua anuwai na maadili yaliyowekwa

// fafanua pini za kuingiza hizi ni pini kwenye arduino ambazo hazibadiliki hivyo # fafanua # fafanua INTPIN 3 // pini 2 na 3 tu zinaweza kuwa pini za kuingiliana kwenye UNO #fafanua UPPIN 4 // hizi ni pini zilizounganishwa tp switch husika #fafanua DWNPIN 5 #fafanua LFTPIN 6 #fafanua RHTPIN 7 #fafanua SND 9 // fafanua mwelekeo

#fafanua DIRUP 1 // maadili haya ndio "nyoka" anaangalia kuamua-

#fafanua DIRDOWN 2 // mwelekeo ambao nyoka atasafiri #fafanua DIRLEFT 3 #fafanua DIRRIGHT 4

uint8_t dirPressed = 0; // Thamani ya kusajili mwelekeo ili kuendelea na pini gani iliyoenda juu

// duka la booleans ambayo pini ilikwenda juu

bool BUTUP = 0; bool BUTDWN = 0; bool BUTLFT = 0; bool BUTRHT = 0; // vars kwa nafasi ya gari uint8_t carPosX = 1; uint8_t carPosY = {0, 16, 32, 48}; // inahitaji thamani ya kuchukua safu

uint8_t lanePosArr = {0, 16, 32, 48}; // safu ya kuhifadhi ambapo kila njia iko

uint8_t gariPosYCnt = 0; uint8_t gariYTmp = 0; // vigeuzi vya mistari kwenye barabara uint8_t roadLineX1 = 51; // hizi zimefafanuliwa wakati wa kuanza kisha mistari itaonekana imefumwa uint8_t roadLineX2 = 102; uint8_t barabaraLineX3 = 153; uint8_t barabaraLineX4 = 254; uint8_t barabaraLineX5 = 200;

// hii ni saizi ngapi eneo la kucheza linasonga kwa wakati mmoja

uint8_t chora Kasi = 4;

// vars kwa adui0

uint8_t adui0PosX = 255; uint8_t adui0PosY = 0; uint8_t adui1PosX = 255; uint8_t adui1PosY = 0; uint8_t adui2PosX = 255; uint8_t adui2PosY = 0;

// anuwai ya kugawa nambari ya vizuizi kwa vizuizi

uint8_t laneGen = 0;

uint8_t laneGen0 = 0; uint8_t laneGen1 = 0; uint8_t laneGen2 = 0;

// alama ya kukabiliana

alama ndefu = 0; // hii ndio alama: / lol kulinganisha kwa muda mrefu = 0; // hii inahifadhi alama katika kiwango cha mwisho hadi kulinganisha nyuma na highScore = 25; uint8_t metreCnt = 0;

hapa ndipo tunapoanza kazi

// hii ni seti ya amri ikiwa usumbufu umeamilishwa batili ukatatizwa () {kuchelewesha (150); sasishaMwongozo (); } // sasisha ni thamani gani iliyo katika mwelekeo wa var kwa kuangalia boole za DIR // -------------------------- UPDATE DIRECTION (mchezaji) - ------------------------- batili updateDirection () {//Serial. BUTUP = kusoma kwa dijiti (UPPIN); BUTDWN = kusoma kwa dijiti (DWNPIN); BUTLFT = digitalRead (LFTPIN); BUTRHT = kusoma kwa dijiti (RHTPIN); ikiwa (BUTUP == kweli) {dirPressed = DIRUP; } ikiwa (BUTDWN == kweli) {dirPressed = DIRDOWN; } ikiwa (BUTLFT == kweli) {dirPressed = DIRLEFT; } ikiwa (BUTRHT == kweli) {dirPressed = DIRRIGHT; }

}

// ------------------------------- SONGA GARI --------------- -------------------------

// hii itasasisha skrini mtembezaji wa gari la gari

batili hojaCar ()

{switch (dirPressed) {kesi DIRUP: carPosYCnt--; gariPosY [gariPosYCnt]; toni (SND, 100, 100); ikiwa (carPosYCnt == 255) {carPosYCnt = 0; } gariYTmp = gariPosY [carPosYCnt]; taabu = 0; // Serial.println ("carPosY up"); // Serial.println (carPosYCnt); kuvunja; kesi DIRDOWN: carPosYCnt ++; toni (SND, 100, 100); ikiwa (carPosYCnt == 4) {carPosYCnt = 3; } // Serial.println ("carPosY"); // Serial.println (carPosYCnt); gariYTmp = gariPosY [gariPosYCnt]; taabu = 0; kuvunja; // alitoa maoni juu ya gari inayoweza kusonga kugundua mgongano wa kushoto na kulia sio nzuri bado / * kesi DIRLEFT: carPosX--; ikiwa (carPosX == 0) {carPosX = 1; } // Serial.println ("carPosX"); // Serial.println (carPosX); taabu = 0; kuvunja; * / kesi DIRRIGHT: // kwa kujifurahisha tu ikiwa unabonyeza kulia mchezo utafanya sauti ya kelele (SND, 100, 50); // gariPosX ++; // ikiwa (carPosX == 128) // {// carPosX = 127; //} // Serial.println ("carPosX"); // Serial.println (carPosX); // dirImebandikwa = 0; kuvunja; } sasishaDisplay (); }

// ------------------ -----------

uint8_t randomPosX () // taratibu hizi 2 hutoa nafasi isiyo ya kawaida kwa vizuizi

{uint8_t posValTmp = 0; posValTmp = bila mpangilio (129, 230); //Serial.println ("Random x"); //Serial.println (postValTmp); kurudi (posValTmp); }

// ------------------ ------------------

uint8_t randomPosY ()

{uint8_t laneVal = 0; laneVal = nasibu (0, 4); // ongeza njia ya ziada kwa kubahatisha, hakuna kitu kwenye skrini wakati wa njia hiyo //Serial.println ("RandomY"); //Serial.println (ndegePosArr [ndegeVal]); kurudi (lanePosArr [laneVal]); }// ------------------------------- SET GAME SPEED ---------- -------------- batili setGameSpeed () // hii inasimamisha kiwango kwenda juu zaidi ya 20 na kufanya mchezo usichezewe {ikiwa (kutekaSpeed <21) {drawSpeed = drawSpeed + 2; }}// -------------------------- ------------------

ikiwa (adui0PosX = 0 && adui0PosY == gariYTmp)

{// Serial.println ("Mchezo Juu ya CRAASSSSHHHHHHEEEEDDD ndani ya Trafiki 0"); shindano limekwisha(); } ikiwa (enemy1PosX = 0 && enemy1PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHEEEEDDD ndani ya trafiki 1 "); shindano limekwisha(); } ikiwa (enemy2PosX = 0 && enemy2PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHEEEEDDD ndani ya trafiki 2 "); shindano limekwisha(); }}

hizi ni taratibu ambazo zinaonyesha maonyesho.

// ------------------------------- CHORA BARABARA -------------- ---------- onyesha.fillRect (roadLineX1, 30, 30, 4, WHITE); onyesha.fillRect (roadLineX1, 45, 30, 4, WHITE); onyesha.fillRect (roadLineX2, 15, 30, 4, WHITE); onyesha.fillRect (roadLineX2, 30, 30, 4, WHITE); onyesha.fillRect (roadLineX2, 45, 30, 4, WHITE); onyesha.fillRect (roadLineX3, 15, 30, 4, WHITE); onyesha.fillRect (roadLineX3, 30, 30, 4, WHITE); onyesha.fillRect (roadLineX3, 45, 30, 4, WHITE); onyesha.fillRect (roadLineX4, 15, 30, 4, WHITE); onyesha.fillRect (roadLineX4, 30, 30, 4, WHITE); onyesha.fillRect (roadLineX4, 45, 30, 4, WHITE); onyesha.fillRect (roadLineX5, 15, 30, 4, WHITE); onyesha.fillRect (roadLineX5, 30, 30, 4, WHITE); onyesha.fillRect (roadLineX5, 45, 30, 4, WHITE);

barabaraLineX1 = barabaraLineX1-chora Kasi;

barabaraLineX2 = barabaraLineX2-chora Kasi; barabaraLineX3 = barabaraLineX3-chora Kasi; barabaraLineX4 = barabaraLineX4-chora Kasi; barabaraLineX5 = barabaraLineX5-chora Kasi; onyesha.display (); } // ------------------------------------- ------------------------------- jina la bmp, upana, urefu, onyesho la rangi.drawBitmap (adui0PosX, adui0PosY, ENEMY0, ENEMY0_WIDTH, ENEMY0_HEIGHT, 1); adui0PosX = adui0PosX-drawSpeed; onyesha.drawBitmap (adui1PosX, adui1PosY, ENEMY1, ENEMY1_WIDTH, ENEMY1_HEIGHT, 1); adui1PosX = adui1PosX-drawSpeed; onyesha.drawBitmap (adui2PosX, adui2PosY, ENEMY2, ENEMY2_WIDTH, ENEMY2_HEIGHT, 1); adui2PosX = adui2PosX-drawSpeed; onyesha.display (); ikiwa (adui0PosX> 231 && adui0PosX231 && adui1PosX <255) {enemy1PosX = randomPosX (); adui1PosY = nasibuPosY (); angaliaDuplicate (); }

ikiwa (adui2PosX> 231 && adui2PosX <255) {enemy2PosX = randomPosX (); adui2PosY = nasibuPosY (); }} // ------------------------------ ------------------------------; onyesha.drawBitmap (carPosX, carPosY [carPosYCnt], CARSPRITE, 30, 15, 1); onyesha.fillRect (100, 0, 28, 10, NYEUSI); Onyesha Mshale (100, 0); onyesha.setTextColor (NYEUPE, NYEUSI); onyesha.println (alama); onyesha.display ();

}

// ------------------------- subiri kitanzi cha waandishi ------------------- ------

// hii ndio msimbo wa skrini ya nyumbani batili ya kusubiriForPress () {splashScreen (); kusubiri bool = 0; // kitanzi kinamalizika wakati hii ni kweli onyesho. waziDisplay (); wakati (kusubiri == 0) {

onyesha.fillRect (19, 20, 90, 32, BLACK); // msingi wazi wa maandishi

onyesha.setTextColor (NYEUPE); Kuweka Mshale (23, 24); onyesha.setTextSize (0); onyesha.println ("Wazembe"); Onyesha Mshale (36, 34); onyesha.println ("Racer"); onyesha.drawBitmap (74, 24, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // x y w h r col onyesha.drawRoundRect (21, 21, 86, 23, 4, NYEUPE); // onyesho la Nyoka mpaka. RrawRect (19, 20, 90, 33, WHITE); // kisanduku cha mpaka - onyesho 3. Seti Mshale (25, 43); onyesha.setTextSize (0); // font kurudi kwenye onyesho la kawaida.println ("bonyeza kitufe chochote"); onyesha.fillRect (0, 0, 127, 8, NYEUSI); onyesha.setCursor (10, 0); onyesho.print ("Alama ya Juu:"); // onyesha onyesho la alama ya juu.print (highScore); onyesha.display (); kusubiri = digitalRead (INTPIN); // angalia kuona ikiwa kitufe cha kusubiri kitabadilika kitabadilika kuwa 1 kinachoisha wakati dirPressed = 0; kitufe cha kuweka upya // bonyeza kwa mwelekeo wowote}} // ------------------------------------------ ----- UPDATE MCHEZO ------------------------------------------- batili sasishoGame () {hojaCar (); DrawRoad (); enemysDraw (); // adui1Chora (); // adui2Draw (); metreCnt ++; detectCrash (); ikiwa (metreCnt == 5) // inaongeza hatua kwa kila mizunguko 10 ili kuongeza alama {metreCnt = 0; alama ++; } ikiwa (alama == linganisha + 5) // inaharakisha mchezo kila alama 5 hadi kiwango cha juu cha kasi 20 {linganisha = alama; kuwekaGameSpeed (); } hakuna Sauti (SND); sasishaDisplay ();

}

// ------------------------------ SHINDANO LIMEKWISHA---------------- ------------------------------

// utaratibu huu huchota mistari karibu na gari la shujaa aliyekufa kisha huonyesha mchezo juu ya skrini

mchezo batiliOver ()

{toni (SND, 200, 200); // kucheza sauti uint8_t linePosX, linePosY, pixwidth, pixheight = 0; // kuweka vars kuteka masanduku karibu na laini ya gariPosX = carPosY; linePosY = gariYTmp; pixwidth = 30; pixheight = 15; onyesha.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); onyesha.display (); kwa (int i = 0; i <= 26; i ++) // hii inazunguka gari katika mistatili inayoiga mlipuko {linePosX = linePosX-2; linePosY = mstariPosY-2; pixwidth = pixwidth + 4; pixheight = urefu wa pixhe + 4; onyesha.drawRect (linePosX, linePosY, pixwidth, pixheight, BLACK); onyesha.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); onyesha.display (); toni (SND, i * 20, 50); kuchelewesha (10); } onyesha.setTextSize (2); onyesha.setTextColor (NYEUPE, NYEUSI); Kuweka Mshale (10, 23); toni (SND, 50, 500); onyesho.print ("MCHEZO"); onyesha.display (); kuchelewesha (500); toni (SND, 40, 500); onyesho.print ("OVER"); onyesha.setTextSize (0); onyesha.display (); kuchelewesha (3000); kuanzisha upyaGame (); subiri kwa habari (); }

// --------------------------------- -------------------------------------------------- -----

restartGame batili () // hii inanakili alama ya juu na inabadilisha takwimu zote na inazalisha nafasi za nasibu

{if (alama> = highScore) // angalia ikiwa alama ya juu kuliko alama ya juu {highScore = alama; // moja ikiwa sheria ya kusasisha alama za juu}

alama = 0;

Chora Kasi = 4; metreCnt = 0; gariPosYCnt = 0; adui0PosX = randomPosX (); adui0PosY = nasibuPosY (); adui1PosX = randomPosX (); adui1PosY = nasibuPosY (); adui2PosX = nasibuPosX (); adui2PosY = nasibuPosY (); hakuna Tone (SND);

angaliaDuplicate ();

}

// ------------------------------------------------ - ANGALIA DUPLICATE -------------------------------------- ------ batili checkDuplicate () // hizi angalia ikiwa vizuizi vinachukua nafasi sawa ya mchezo {// Serial.println ("duplicate checked"); ikiwa (adui2PosX> 230 && adui2PosX <255) {wakati (adui2PosY == adui1PosY }}

ikiwa (adui0PosX> 230 && aduiPosX230 && adui2PosXenemy1PosX && adui2PosX230 && adui

// ------------------------------------- --------------------------------

SplashScreen tupu ()

{onyesha. UsafiDisplay (); onyesha.drawBitmap (0, 0, CRASH, CRASHWIDTH, CRASHHEIGHT, 1); onyesha.display (); kuchelewa (2000); } // ------------------------------------------- KUWEKA ------------------------------------------ ----------- usanidi batili () {kuchelewesha (100); // acha mambo yaanze // Serial.begin (9600); // ondoa hii na Serial yote. amri za kuonyesha kosa la diag. kuanza (SSD1306_SWITCHCAPVCC, 0x3C); onyesha wazi Cleplay (); onyesha.setTextColor (NYEUPE, NYEUSI); onyesha.setTextWrap (uwongo); onyesha.dim (0); pinMode (INTPIN, INPUT); pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT);

ambatishaKukatisha (digitalPinToInterrupt (INTPIN), kukatizwa, KUPANDA);

// nasibu kuweka vizuizi adui0PosX = nasibuPosX (); adui0PosY = nasibuPosY (); adui1PosX = randomPosX (); adui1PosY = nasibuPosY (); adui2PosX = nasibuPosX (); adui2PosY = nasibuPosY (); angaliaDuplicate (); // angalia maeneo ya duplicate // Serial.println ("kuanzisha kamili"); SplashScreen (); subiri kwa habari (); } // ------------------------------------------- ----- MTANDAO ------------------------------------------------ ----------

kitanzi batili ()

{sasishoGame (); }

na hiyo ni nzuri sana, marekebisho yoyote na maoni yatakaribishwa. Masuala tunayohitaji kushughulikia hali ya skrini tunahitaji kuangalia jinsi ya kuipunguza na gari za adui bado zina uwezo wa kuchukua nafasi sawa.

Ilipendekeza: