Obsah:
- Zásoby
- Krok 1: Inštalácia programu Paint.net
- Krok 2: Nakreslenie jednoduchej úvodnej obrazovky
- Krok 3: Konverzia bitmapového súboru BMP na C
- Krok 4: Zobrazenie LOGA pomocou DrawBitmap
- Krok 5: Presunutie bitmapového skřítka
- Krok 6: Vytvorenie hry pre vodiča
Video: Reckless Racer Arduino OLED Game, AdafruitGFX a Bitmaps Základy: 6 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:56
V tomto tutoriále sa pozrieme na to, ako používať bitmapy pomocou knižnice Adafruit_GFX.c ako druhu škriatkov v hre. Najjednoduchšia hra, ktorú by sme si mohli predstaviť, je hra s automatickým striedaním jazdných pruhov a nakoniec sa náš beta tester a asistent kodéra rozhodli pre názov „Reckless Racer“, pretože je celkom bezohľadné, ak idete zlou cestou po diaľnici !!.
Dizajn nášho obvodu je na vyššie uvedených obrázkoch a je podrobne popísaný v našom poslednom projekte/návode tu Snake Instructables, ktorý popisuje, ako obvod funguje.
budeme požadovať
Adafruit_GFX
Paint.net
Arduino IDE windowslinux
a pozrite sa na návod na had pre ostatné vybavenie.
Zásoby
Hra s hadom
Krok 1: Inštalácia programu Paint.net
Používame paint.net, pretože softvér je bezplatný, takže používanie úplne zadarmo si môžete stiahnuť pomocou programu Paint. Net tu.
Ak chcete nainštalovať paint.net, dvakrát kliknite na stiahnutý program a odpovedzte kladne, napríklad ďalej, áno, ok, súhlasím a obrázky vyššie vám poskytnú návod.
Krok 2: Nakreslenie jednoduchej úvodnej obrazovky
Keď ste na webe paint.net, vytvorte nový obrázok kliknutím na položku Súbor a potom na nový, nastavte veľkosť obrázka na 1260 x 620 (pozri prvý obrázok) kliknite na tlačidlo OK, keď máte novú stránku, nakreslite úvodnú obrazovku pomocou iba 2 farieb čiernobielej farby pomocou ceruzky nástroj (obr. 2), keď nakreslíte (alebo prilepíte) obrázok úvodnej obrazovky, kliknite na obrázok a potom zmeňte veľkosť (obrázok 4), v rozbaľovacom zozname zmeňte veľkosť z 1260 x 620 na 126 x 62 (o 2 pixely menšia ako obrazovka) (obr. 5) Kliknite na tlačidlo OK.
potom kliknite na ponuku Súbor a potom uložte ako (obr. 6).
akonáhle sa v rozbaľovacej ponuke typu súboru zobrazí rozbaľovacie okno, vyberte položku BMP (bitmapa). (obr. 7), zadajte názov súboru a kliknite na tlačidlo uložiť, keď sa rozbaľovacie okno zobrazí ako nastavená hodnota dithering na 0 a nastavená na 8 bitov, kliknite na tlačidlo ok (obr.).
Krok 3: Konverzia bitmapového súboru BMP na C
Teraz musíme previesť náš obrázok do formátu, ktorému arduino rozumie, že je na to k dispozícii množstvo nástrojov, ale moje miesto „ísť na“je nástroj na prevod bitmapových webových stránok je marlin web…
marlinfw.org/tools/u8glib/converter.html
Túto časť teda spustíme pomocou vyššie uvedeného odkazu na otvorenie webovej stránky, ktorá je zobrazená na obrázku 1
kliknite na vybrať súbor a vyberte bitmapu, ktorú ste vytvorili predtým (obr. 2)
marlin bitmapový prevodník automaticky prevedie váš obrázok na kód c ľavým dvojitým kliknutím na kód, ktorý by mal kód zvýrazniť, potom pravým tlačidlom myši a kliknutím kliknite na skopírovať (obr. 3)
ďalej Vytvoríme pravé kliknutie a vytvoríme nový textový dokument (obr. 4)
dvakrát kliknite na nový dokument, pri otvorení kliknite pravým tlačidlom myši a vložte kód (obr. 5)
Ďalej musíme pridať riadok v hornej časti kódu #zahrnúť, čo nám umožňuje uložiť údaje bitmapy do pamäte flash na arduino, potom premenujeme #definovať šírku, výšku a názov na niečo jednoduchšie na používanie. tieto sú zvýraznené na obrázku 6, premenujeme ich z náhodne generovaných znakov premenujeme ich na podčiarknutý príklad nižšie
#define LOGOWIDTH
#define LOGOHEIGHT
konšt. nepodpísaný znak LOGOPICKÝ PROGMEM
potom kliknite na súbor, potom ho uložte ako, uložte súbor ako logo.c zatvorte poznámkový blok, kliknite pravým tlačidlom na logo.c a kliknite na skopírovať.
Krok 4: Zobrazenie LOGA pomocou DrawBitmap
Teraz načítame arduino IDE a vytvoríme nový náčrt a uložíme ho pomenovaný ako logoexample.ino, ďalej ako cheat v arduino ide kliknite na ponuku súborov a potom uložte ako, vráťte sa do priečinka projektu pravým tlačidlom myši a vložte do súboru.c (obr. 2), potom kliknite na tlačidlo Zrušiť. Vďaka tomu budete musieť prejsť do priečinka, ktorý chcete vložiť do súboru.
zadajte nasledujúci kód do IDE arduino alebo ho stiahnite do ino.
(najlepšie je naučiť sa písať, než kopírovať a vkladať alebo používať súbory uvedené nižšie)
#include /* toto sa líši v závislosti od toho, kde skladujete
ino zvyčajne v priečinku C: / Users / ~ užívateľské meno / Documents / Arduino / project ~ názov
a takto odkazujeme na našu bitmapu */
#zahrnúť
#zahrnúť
uint8_t bmpX, bmpY = 0; /* rezervujte pamäť na 2 x 8 bitové celé čísla, potrebujeme iba 8 bitov
pretože hodnota nikdy nie je vyššia ako 128 (pixelov), takže môžeme ušetriť miesto pomocou 8 bitových intov (ktoré majú maximálnu hodnotu 255) */
neplatné nastavenie ()
{oneskorenie (100); // dajte displeju atď. čas na zapnutie displeja.begin (SSD1306_SWITCHCAPVCC, 0x3C); // toto má inicializovať zobrazenie displeja.clearDisplay (); // začnite s prázdnou obrazovkou}
/* upozorňujeme, že tieto komentáre nemusíte písať, pretože slúžia na referenciu …………..
príkaz, na ktorý sa zameriame, je display.drawBitmap, to je to, čo kreslí našu úvodnú obrazovku. (bmpX, je hodnota osi X na obrazovke, kde bude kotviaci bod X bitmapy a bmpX a bmpY sú hodnoty, ktoré nás zaujímajú na vytvorenie pohybu (bmpY, je hodnota osi Y na obrazovke, kde je kotva Y bodom bitmapy bude, že získame referenčné názvy, ako sme ich definovali v logu.c (LOGOPIC, je názov bitmapy v #zahrnutom súbore logo.c (LOGOWIDTH, je počet pixelov naprieč (X), aby sa nakreslil bitmapa z bodu ukotvenia (LOGOHEIGHT, je počet pixelov nadol (Y) na vykreslenie bitmapy z bodu ukotvenia, že pixely X a Y naprieč je možné zadať ručne, ale je jednoduchšie použiť preddefinované pixely, ako si ich všetky zapamätať (1, posledná hodnota je farba, pretože obrazovka je mono 0 čierna 1 biela. v poriadku, začnite písať z nasledujúceho riadku: ¬D lol*/ void loop () {display.clearDisplay (); // vyprázdnite obrazovku // bitmapu nakreslenú z vľavo hore, x, y, názov bitmapy, šírka X, výška Y, farebný displej.drawBitmap (bmpX, bmpY, LOGOPIC, LOGOWIDTH, LOGOHEIGHT, 1); display.display (); // v skutočnosti sa tým vykreslí vyrovnávacia pamäť na obrazovku}
nahrajte kód arduino a potvrďte, že funguje (obr. 3).
Krok 5: Presunutie bitmapového skřítka
podľa predchádzajúcich pokynov použite paint.net a vytvorte nový súbor s rozmermi 30 x 15 pixelov (obr. 1) a nakreslite hrubé auto, ktoré náš mladý dizajnér začína najskôr na prednom skle (obrázky 2 a 3).
znova ho uložte ako súbor bmp systému Windows (ako v kroku 2), preveďte na bitmapu C (krok 3) a umiestnite súbor car.c (alebo čokoľvek, pre čo sa rozhodnete) do rovnakého priečinka ako novovytvorené arduino ino (skica) súbor.
(p.s., nezabudnite pridať riadok #include do auta. c, čo nás často chytilo)
Najprv prepojte svoj ekvivalent automobilu.c
#zahrnúť
#include #include Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library #include Adafruit_SSD1306 //
Displej Adafruit_SSD1306 (128, 64); // nastavenie rozlíšenia displeja
/* bmpX/bmpY potrebujeme, aby to boli premenné pri zmene týchto hodnôt a prekreslení
obrazovka je spôsob, akým vytvárame efekt pohybovej animácie. hitSide a hitTop je spôsob, akým udržujeme sprite na obrazovke */ uint8_t bmpX, bmpY = 0; // rezervná pamäť na 2 8 bitové palce (0-255) nepotrebujeme väčšiu 128 bude najväčší počet použitých bool hitSide = 0; bool hitTop = 0;
neplatné nastavenie ()
{oneskorenie (100); // dajte displeju atď. čas na zapnutie displeja.begin (SSD1306_SWITCHCAPVCC, 0x3C); // toto má inicializovať zobrazenie displeja.clearDisplay (); // začnite s prázdnou obrazovkou
}
prázdna slučka ()
{display.clearDisplay (); // vyprázdnenie obrazovky // bitmapa nakreslená zľava hore, x, y, názov bitmapy, šírka X, výška Y, farebné zobrazenie.drawBitmap (bmpX, bmpY, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // display.display (); // toto vlastne čerpá vyrovnávaciu pamäť na displej vždy/ * takto sledujeme okraj obrazovky a rozhodujeme, či pridať pixel posunúť zhora nadol) alebo odstrániť pixel (posunúť zdola nahor) */ prepnúť (hitSide) // toto vyberie smer auta na základe boole {prípad 0: bmpX ++; prestávka;
prípad 1:
bmpX--; prestávka; } // tieto 2 if príkazy nastavia bool na true alebo false if (bmpX == 0) {hitSide = 0; } if (bmpX == 96) // šírka obrazovky mínus auto {hitSide = 1; } // to isté ako vyššie pre os Y, ak (bmpY == 0) {hitTop = 0; } if (bmpY == 49) // výška obrazovky mínus výška auta {hitTop = 1; } prepínač (hitTop) {prípad 0: bmpY ++; prestávka; prípad 1: bmpY--; prestávka; }
}
program, ktorý funguje, môžete vidieť na priloženom videu
Krok 6: Vytvorenie hry pre vodiča
Najprv začneme kreslením niekoľkých rôznych áut alebo prekážok, ako v predchádzajúcich fázach tutoriálu, a vytvoríme ich s rozmermi 30 x 15 pixelov. Potom ich skonvertujeme na c bitmapy a prepojíme v kóde.
#include // tieto cesty sa budú musieť zmeniť v závislosti od toho
// kde ukladáte súbory // edit: práve som zistil, či nahradíte // za "" nevyžadujete úplnú cestu // s vašimi vlastnými knižnicami #include
#zahrnúť
#include #include
#zahrnúť
#include // https://github.com/adafruit/Adafruit-GFX-Library #include <Adafruit_SSD1306 //
Displej Adafruit_SSD1306 (128, 64); // definujte parametre zobrazenia
definovať premenné a pevné hodnoty
// definujte vstupné piny toto sú piny na Arduine, ktoré sa nikdy nezmenia #definujte #definujte INTPIN 3 // iba piny 2 a 3 môžu byť prerušovacími kolíkmi na UNO #definujte UPPIN 4 // toto sú piny spojené tp relevantný prepínač #definovať DWNPIN 5 #define LFTPIN 6 #define RHTPIN 7 #define SND 9 // definovať smery
#define DIRUP 1 // na tieto hodnoty sa pozerá „had“, aby sa rozhodol-
#define DIRDOWN 2 // smer, ktorým sa bude had uberať #define DIRLEFT 3 #define DIRRIGHT 4
uint8_t dirPressed = 0; // hodnota pre registráciu smeru pohybu, na ktorom kolíku bol vysoký
// booleovský obchod, ktorého kolík sa zvýšil
bool BUTUP = 0; bool BUTDWN = 0; bool BUTLFT = 0; bool BUTRHT = 0; // vars pre polohu auta uint8_t carPosX = 1; uint8_t carPosY = {0, 16, 32, 48}; // potrebuje hodnotu uloženú v poli
uint8_t lanePosArr = {0, 16, 32, 48}; // pole na uloženie tam, kde je každý pruh
uint8_t carPosYCnt = 0; uint8_t carYTmp = 0; // premenné pre čiary na ceste uint8_t roadLineX1 = 51; // tieto sú preddefinované na začiatku, potom sa čiary javia ako plynulé uint8_t roadLineX2 = 102; uint8_t roadLineX3 = 153; uint8_t roadLineX4 = 254; uint8_t roadLineX5 = 200;
// toto je počet pixelov, v ktorých sa hracia plocha pohybuje súčasne
uint8_t drawSpeed = 4;
// vars pre nepriateľa0
uint8_t nepriateľ0PosX = 255; uint8_t nepriateľ0PosY = 0; uint8_t nepriateľ1PosX = 255; uint8_t nepriateľ1PosY = 0; uint8_t nepriateľ2PosX = 255; uint8_t nepriateľ2PosY = 0;
// premenná na náhodné priradenie čísla jazdného pruhu prekážkam
uint8_t laneGen = 0;
uint8_t laneGen0 = 0; uint8_t laneGen1 = 0; uint8_t laneGen2 = 0;
// počítadlo skóre
dlhé skóre = 0; // toto je skóre:/ lol dlhé porovnanie = 0; // toto uloží skóre na poslednú úroveň nahor na porovnanie späť k dlhému highScore = 25; uint8_t metreCnt = 0;
tu začíname funkcie
// toto je sada príkazov, ak je prerušenie aktivované neplatné prerušené () {delay (150); updateDirection (); } // aktualizujte, ktorá hodnota je v smere var, kontrolou boolov DIR // -------------------------- UPDATE DIRECTION (prehrávač)- ------------------------- neplatná aktualizáciaDirection () {//Serial.println("updateDirection Called "); BUTUP = digitalRead (UPPIN); BUTDWN = digitalRead (DWNPIN); BUTLFT = digitalRead (LFTPIN); BUTRHT = digitalRead (RHTPIN); if (BUTUP == true) {dirPressed = DIRUP; } if (BUTDWN == true) {dirPressed = DIRDOWN; } if (BUTLFT == true) {dirPressed = DIRLEFT; } if (BUTRHT == true) {dirPressed = DIRRIGHT; }
}
// ------------------------------- PRESUNUTIE AUTA --------------- -------------------------
// tým sa aktualizuje obrazovka pohybovača automobilového škriatka
void moveCar ()
{switch (dirPressed) {case DIRUP: carPosYCnt--; carPosY [carPosYCnt]; tón (SND, 100, 100); if (carPosYCnt == 255) {carPosYCnt = 0; } carYTmp = carPosY [carPosYCnt]; dirPressed = 0; // Serial.println ("carPosY up"); // Serial.println (carPosYCnt); prestávka; prípad DIRDOWN: carPosYCnt ++; tón (SND, 100, 100); if (carPosYCnt == 4) {carPosYCnt = 3; } // Serial.println ("carPosY"); // Serial.println (carPosYCnt); carYTmp = carPosY [carPosYCnt]; dirPressed = 0; prestávka; // komentované auto schopné pohybu vľavo a vpravo detekcia kolízií ešte nie je taká dobrá /* prípad DIRLEFT: carPosX--; if (carPosX == 0) {carPosX = 1; } // Serial.println ("carPosX"); // Serial.println (carPosX); dirPressed = 0; prestávka; */ case DIRRIGHT: // len pre zábavu, ak stlačíte pravé tlačidlo, hra vydá zvuk (SND, 100, 50); // carPosX ++; // if (carPosX == 128) // {// carPosX = 127; //} // Serial.println ("carPosX"); // Serial.println (carPosX); // dirPressed = 0; prestávka; } updateDisplay (); }
// -------------------------- NÁHODNÝ POS X ------------------- -----------
uint8_t randomPosX () // tieto 2 rutiny len generujú náhodnú pozíciu pre prekážky
{uint8_t posValTmp = 0; posValTmp = náhodný (129, 230); //Serial.println("raddom x "); //Serial.println(posValTmp); návrat (posValTmp); }
// --------------------------- NÁHODNÝ POS Y ------------------ ------------------
uint8_t randomPosY ()
{uint8_t laneVal = 0; laneVal = náhodný (0, 4); // pridanie extra pruhu pre náhodnosť, t.j. žiadny objekt na obrazovke, keď sa v tomto pruhu //Serial.println("RandomY "); //Serial.println(lanePosArr[laneVal]); návrat (lanePosArr [laneVal]); }// ------------------------------- NASTAVTE RÝCHLOSŤ HRY -------------- -------------- void setGameSpeed () // toto zastaví úroveň vyššiu ako 20, čím sa stane hra nehratelná {if (drawSpeed <21) {drawSpeed = drawSpeed+2; }}// ------------------------------------ DETEKCIA ZRUŠENIA ---------- ----------------------- neplatné detectCrash () {
if (nepriatel0PosX = 0 && nepriatel0PosY == carYTmp)
{// Serial.println ("Hra cez CRAASSSSHHHHHHEEEEEDDD do návštevnosti 0"); koniec hry(); } if (nepriatel1PosX = 0 && nepriatel1PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHHEEEEEDDD do prevádzky 1 "); koniec hry(); } if (nepriatel2PosX = 0 && nepriatel2PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHHEEEEEDDD do prevádzky 2 "); koniec hry(); }}
toto sú rutiny, ktoré kreslia displej.
// ------------------------------- NAKRESLI CESTU --------------- --------------------- neplatné drawRoad () // X, Y, dĺžka, šírka {display.fillRect (roadLineX1, 15, 30, 4, WHITE); display.fillRect (roadLineX1, 30, 30, 4, WHITE); display.fillRect (roadLineX1, 45, 30, 4, WHITE); display.fillRect (roadLineX2, 15, 30, 4, WHITE); display.fillRect (roadLineX2, 30, 30, 4, WHITE); display.fillRect (roadLineX2, 45, 30, 4, WHITE); display.fillRect (roadLineX3, 15, 30, 4, WHITE); display.fillRect (roadLineX3, 30, 30, 4, WHITE); display.fillRect (roadLineX3, 45, 30, 4, WHITE); display.fillRect (roadLineX4, 15, 30, 4, WHITE); display.fillRect (roadLineX4, 30, 30, 4, WHITE); display.fillRect (roadLineX4, 45, 30, 4, WHITE); display.fillRect (roadLineX5, 15, 30, 4, WHITE); display.fillRect (roadLineX5, 30, 30, 4, WHITE); display.fillRect (roadLineX5, 45, 30, 4, WHITE);
roadLineX1 = roadLineX1-drawSpeed;
roadLineX2 = roadLineX2-drawSpeed; roadLineX3 = roadLineX3-drawSpeed; roadLineX4 = roadLineX4-drawSpeed; roadLineX5 = roadLineX5-drawSpeed; display.display (); } // ----------------------------------------- NAKRESLI nepriateľov ---- --------------------------------------- neplatné enemysDraw () {// X, Y, názov bmp, šírka, výška, farebný displej.drawBitmap (nepriateľ0PosX, nepriateľ0PosY, ENEMY0, ENEMY0_WIDTH, ENEMY0_HEIGHT, 1); nepriateľ0PosX = nepriateľ0PosX-drawSpeed; display.drawBitmap (nepriatel1PosX, nepriatel1PosY, ENEMY1, ENEMY1_WIDTH, ENEMY1_HEIGHT, 1); nepriateľ1PosX = nepriateľ1PosX-drawSpeed; display.drawBitmap (nepriateľ2PosX, nepriateľ2PosY, ENEMY2, ENEMY2_WIDTH, ENEMY2_HEIGHT, 1); nepriateľ2PosX = nepriateľ2PosX-drawSpeed; display.display (); if (nepriatel0PosX> 231 && nepriatel0PosX231 && nepriatel1PosX <255) {nepriatel1PosX = randomPosX (); nepriateľ1PosY = randomPosY (); checkDuplicate (); }
if (nepriatel2PosX> 231 && nepriatel2PosX <255) {nepriatel2PosX = randomPosX (); nepriateľ2PosY = randomPosY (); }} // ------------------------------------ UPDATE DISPLAY -------- ---------------------------------------- neplatná aktualizáciaDisplay () {display.clearDisplay (); display.drawBitmap (carPosX, carPosY [carPosYCnt], CARSPRITE, 30, 15, 1); display.fillRect (100, 0, 28, 10, ČIERNY); display.setCursor (100, 0); display.setTextColor (BIELA, ČIERNA); display.println (skóre); display.display ();
}
// ------------------------- počkajte na stlačenie slučky ------------------- ------
// toto je kód domovskej obrazovky neplatný waitForPress () {splashScreen (); bool čakanie = 0; // slučka končí, keď je to pravda display.clearDisplay (); počas (čakania == 0) {
display.fillRect (19, 20, 90, 32, ČIERNY); // prázdne pozadie textu
display.setTextColor (BIELY); display.setCursor (23, 24); display.setTextSize (0); display.println („Bezohľadný“); display.setCursor (36, 34); display.println („pretekár“); display.drawBitmap (74, 24, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // x y w h r col display.drawRoundRect (21, 21, 86, 23, 4, WHITE); // orámovanie Snake display.drawRect (19, 20, 90, 33, WHITE); // ohraničovací rámček - 3 display.setCursor (25, 43); display.setTextSize (0); // písmo späť na normálne zobrazenie.println ("stlačte ľubovoľné tlačidlo"); display.fillRect (0, 0, 127, 8, ČIERNY); display.setCursor (10, 0); display.print („High Score:“); // zobrazenie vysokého skóre display.print (highScore); display.display (); čakanie = digitalRead (INTPIN); // skontrolujte, či sa čakanie pri stlačení klávesu zmení na 1 končiac pri dirPressed = 0; // tlačidlo reset stlačte bez smerovania}} // -------------------------------------- ----- UPDATE GAME ----------------------------------------- neplatná aktualizačná hra () {moveCar (); drawRoad (); enemysDraw (); // nepriateľ1Draw (); // nepriateľ2Draw (); metreCnt ++; detectCrash (); if (metreCnt == 5) // pripočíta bod za každých 10 cyklov, aby sa dosiahlo skóre {metreCnt = 0; skóre ++; } if (skóre == porovnať+5) // zrýchli hru každých 5 bodov na maximálne 20 rýchlostí {porovnanie = skóre; setGameSpeed (); } noTone (SND); updateDisplay ();
}
// ------------------------------ KONIEC HRY---------------- ------------------------------
// táto rutina nakreslí čiary okolo auta mŕtveho hrdinu a potom zobrazí hru na obrazovke
prázdna hraOver ()
{tón (SND, 200, 200); // prehrávanie zvuku uint8_t linePosX, linePosY, pixwidth, pixheight = 0; // set vars to draw boxes around car linePosX = carPosY; linePosY = carYTmp; šírka pixelu = 30; pixheight = 15; display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); for (int i = 0; i <= 26; i ++) // toto obklopuje auto v obdĺžnikoch simulujúcich výbuch {linePosX = linePosX-2; linePosY = linePosY-2; pixwidth = šírka pixelu+4; pixheight = pixheight+4; display.drawRect (linePosX, linePosY, pixwidth, pixheight, BLACK); display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); tón (SND, i*20, 50); oneskorenie (10); } display.setTextSize (2); display.setTextColor (BIELA, ČIERNA); display.setCursor (10, 23); tón (SND, 50, 500); display.print („HRA“); display.display (); oneskorenie (500); tón (SND, 40, 500); display.print („NAD“); display.setTextSize (0); display.display (); oneskorenie (3000); restartGame (); waitForPress (); }
// ----------------------------------------- Reštartujte hru ----- ---------------------------------------------------------- -----
void restartGame () // toto skopíruje najvyššie skóre a vynuluje všetky štatistiky a vygeneruje náhodné pozície
{if (score> = highScore) // check to see if score higher than high score {highScore = score; // single if statment na aktualizáciu vysokého skóre}
skóre = 0;
drawSpeed = 4; metreCnt = 0; carPosYCnt = 0; nepriateľ0PosX = randomPosX (); nepriateľ0PosY = randomPosY (); nepriateľ1PosX = randomPosX (); nepriateľ1PosY = randomPosY (); nepriateľ2PosX = randomPosX (); nepriateľ2PosY = randomPosY (); noTone (SND);
checkDuplicate ();
}
// ------------------------------------------------ -SKONTROLUJTE DUPLIKÁT ----------------------------------------------- ------ void checkDuplicate () // tieto kontrolujú, či prekážky nezaberajú rovnaký herný priestor {// Serial.println ("duplikát začiarknutý"); if (nepriatel2PosX> 230 && nepriatel2PosX <255) {pricom (nepriatel2PosY == nepriatel1PosY || nepriatel2PosY == nepriatel0PosY) {nepriatel2PosY = nahodnyPosY (); }}
if (nepriatel0PosX> 230 && nepriatel0PosX230 && nepriatel2PosXenemy1PosX && nepriatel2PosX230 && nepriatel0PosXenemy1PosX && nepriatel0PosX
//------------------------------------------- ÚVODNÁ OBRAZOVKA --- --------------------------------
void splashScreen ()
{display.clearDisplay (); display.drawBitmap (0, 0, CRASH, CRASHWIDTH, CRASHHEIGHT, 1); display.display (); oneskorenie (2000); } // ----------------------------------------------- NASTAVIŤ ------------------------------------------------- ----------- neplatné nastavenie () {oneskorenie (100); // nech sa veci začnú // Serial.begin (9600); // odkomentujte toto a všetko sériové číslo. príkazy pre zobrazenie diagnostiky porúch.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.setTextColor (BIELA, ČIERNA); display.setTextWrap (false); display.dim (0); pinMode (INTPIN, INPUT); pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT);
attachInterrupt (digitalPinToInterrupt (INTPIN), prerušované, RISING);
// náhodne umiestnite prekážky nepriateľ0PosX = randomPosX (); nepriateľ0PosY = randomPosY (); nepriateľ1PosX = randomPosX (); nepriateľ1PosY = randomPosY (); nepriateľ2PosX = randomPosX (); nepriateľ2PosY = randomPosY (); checkDuplicate (); // vyhľadanie duplicitných miest // Serial.println ("nastavenie dokončené"); Úvodná obrazovka(); waitForPress (); } // ----------------------------------------------- ----- SLUČKA -------------------------------------------- ----------
prázdna slučka ()
{updateGame (); }
a to je skoro všetko, akékoľvek úpravy a spätná väzba budú vítané. Problémy, ktoré musíme riešiť pri blikaní obrazovky, musíme preskúmať, ako ho zmierniť a nepriateľské autá môžu stále zaberať rovnaký priestor.
Odporúča:
Komponenty na povrchovú montáž na spájkovanie - Základy spájkovania: 9 krokov (s obrázkami)
Spájkovacie súčiastky na povrchovú montáž | Základy spájkovania: Doteraz som vo svojej sérii Základy spájkovania diskutoval o základoch spájkovania dosť na to, aby ste mohli začať cvičiť. V tomto návode je to, o čom budem diskutovať, o niečo pokročilejšie, ale je to jeden zo základov spájkovania Surface Mount Compo
Spájkovanie súčiastkami cez dieru - Základy spájkovania: 8 krokov (s obrázkami)
Spájkovanie súčiastkami cez dieru | Základy spájkovania: V tomto návode budem diskutovať o niektorých základoch o spájkovaní komponentov s otvorom na dosky plošných spojov. Budem predpokladať, že ste si už vyskúšali prvé 2 návody pre moju sériu Základy spájkovania. Ak ste si nepozreli môj In
Spájkovacie drôty na drôty - Základy spájkovania: 11 krokov
Spájkovacie drôty na drôty | Základy spájkovania: V tomto návode budem diskutovať o bežných spôsoboch spájkovania drôtov s inými drôtmi. Budem predpokladať, že ste si už vyskúšali prvé 2 návody pre moju sériu Základy spájkovania. Ak ste si neprečítali moje návody na používanie
Drobní vodiči mostíka H Základy: 6 krokov (s obrázkami)
Drobné ovládače mosta H Základy: Dobrý deň, vitajte späť pri inom pokyne! V predchádzajúcom som vám ukázal, ako som v KiCade vytvoril cievky pomocou pythonového skriptu. Potom som vytvoril a testoval niekoľko variácií cievok, aby som zistil, ktorá z nich funguje najlepšie. Mojím cieľom je nahradiť obrovský
Základy rozhrania TFT Arduino: 10 krokov (s obrázkami)
Základy rozhrania TFT Arduino TFT: Dotykové obrazovky TFT sú úžasné grafické rozhranie, ktoré je možné použiť s mikrokontrolérmi, ako sú Atmel, PIC, STM, pretože má široký rozsah farieb a dobré grafické schopnosti a dobré mapovanie pixelov. Dnes ideme na rozhranie 2,4 palca TFT