Obsah:

Reckless Racer Arduino OLED Game, AdafruitGFX a Bitmaps Základy: 6 kroků
Reckless Racer Arduino OLED Game, AdafruitGFX a Bitmaps Základy: 6 kroků

Video: Reckless Racer Arduino OLED Game, AdafruitGFX a Bitmaps Základy: 6 kroků

Video: Reckless Racer Arduino OLED Game, AdafruitGFX a Bitmaps Základy: 6 kroků
Video: Arduino Star Wars Game - how to make 2024, Listopad
Anonim
Reckless Racer Arduino OLED Game, AdafruitGFX a bitmapy Základy
Reckless Racer Arduino OLED Game, AdafruitGFX a bitmapy Základy
Reckless Racer Arduino OLED Game, AdafruitGFX a bitmapy Základy
Reckless Racer Arduino OLED Game, AdafruitGFX a bitmapy Základy

V tomto tutoriálu se podíváme na to, jak používat bitmapy pomocí knihovny Adafruit_GFX.c jako jakési skřítky ve hře. Nejjednodušší hrou, kterou jsme si mohli představit, je auto s bočním posouváním jízdního pruhu, nakonec se náš beta tester a asistent kodéru rozhodli pro název „Reckless Racer“, protože je docela lehkomyslné jet špatnou cestou po dálnici !!.

Návrh našeho obvodu je na výše uvedených obrázcích a je podrobně popsán v našem posledním projektu/tutoriálu zde Snake Instructables, který popisuje, jak obvod funguje.

budeme požadovat

Adafruit_GFX

Paint.net

Arduino IDE windowslinux

a prosím, podívejte se na výukový program Snake pro ostatní vybavení.

Zásoby

Hadová hra

Krok 1: Instalace Paint.net

Instalace Paint.net
Instalace Paint.net
Instalace Paint.net
Instalace Paint.net
Instalace Paint.net
Instalace Paint.net

Používáme paint.net, protože software je zdarma, takže zcela zdarma k použití si můžete stáhnout Paint. Net zde.

Chcete -li nainstalovat paint.net, dvakrát klikněte na stažený program a odpovězte kladně, například ano, ok, souhlasím a obrázky nahoře vám poskytnou pokyny.

Krok 2: Nakreslení jednoduché úvodní obrazovky

Kreslení jednoduché úvodní obrazovky
Kreslení jednoduché úvodní obrazovky
Kreslení jednoduché úvodní obrazovky
Kreslení jednoduché úvodní obrazovky
Kreslení jednoduché úvodní obrazovky
Kreslení jednoduché úvodní obrazovky

Když jste v paint.net, vytvořte nový obrázek kliknutím na Soubor a poté na nový, nastavte velikost obrázku na 1260x620 (viz první obrázek) klikněte na ok, když máte novou stránku, nakreslete úvodní obrazovku pouze pomocí 2 barev černé a bílé pomocí tužky nástroj (obr.2), když nakreslíte (nebo vložíte) obrázek úvodní obrazovky, klikněte na obrázek a poté změňte velikost (obrázek 4), ve vyskakovacím okně změňte velikost z 1260x620 na 126x62 (o 2 pixely menší než váš displej) (obrázek5) Klikněte na OK.

dále klikněte na nabídku Soubor a poté uložte jako (obr. 6).

když se v rozevírací nabídce typu souboru objeví vyskakovací okno, vyberte BMP (bitmapa). (obr.).

Krok 3: Převod bitmapového souboru BMP na C

Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor
Převod BMP na C bitmapový soubor

Nyní musíme převést náš obrázek do formátu, kterému arduino rozumí, že k tomu je k dispozici spousta nástrojů, ale moje místo „přejít“je nástroj pro převádění bitmap na webových stránkách is marlin…

marlinfw.org/tools/u8glib/converter.html

Tuto sekci tedy spustíme pomocí výše uvedeného odkazu k otevření webové stránky, která je zobrazena na obrázku 1

klikněte na vybrat soubor a vyberte bitmapu, kterou jste vytvořili dříve (obr.2)

marlin bitmapový konvertor automaticky převede váš obrázek na kód c levým dvojitým kliknutím na kód, který by měl kód zvýraznit, poté pravým kliknutím a kliknutím na kopírovat (obr. 3)

další Vytvoříme pravé tlačítko a vytvoříme nový textový dokument (obr.

poklepejte na nový dokument, po otevření klikněte pravým tlačítkem a vložte kód (obr. 5)

dále musíme přidat řádek v horní části kódu #zahrnout toto nám umožňuje uložit bitmapová data do flash paměti na arduino, poté přejmenujeme #define width, height and name na něco jednoduššího použití tyto jsou zvýrazněny na obrázku 6, přejmenujeme je z náhodně generovaných znaků přejmenujeme je na podtržený příklad níže

#define LOGOWIDTH

#definovat LOGOHEIGHT

konst. nepodepsaný znak LOGOPICKÝ PROGMEM

dále klikněte na soubor, poté uložte jako, uložte soubor jako logo.c zavřete poznámkový blok, klikněte pravým tlačítkem na logo.c a klikněte na kopírovat.

Krok 4: Zobrazení LOGA pomocí DrawBitmap

Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap
Zobrazení LOGA pomocí DrawBitmap

Nyní načteme arduino IDE a vytvoříme nový náčrt a uložíme jej pojmenovaný jako logoexample.ino, dále jako cheat v arduino ide klikněte na nabídku souboru, poté uložte jako, vraťte se zpět do složky projektu klikněte pravým tlačítkem a vložte do souboru.c (obr.

zadejte následující kód do arduino IDE nebo si stáhněte ino.

(doporučujeme psát, ne kopírovat a vkládat nebo používat níže uvedené soubory, což je nejlepší způsob, jak se to naučit)

#include /* toto se bude lišit v závislosti na tom, kde skladujete

ino obvykle ve složce C: / Users / ~ uživatelské jméno / Documents / Arduino / project ~ name

a takto odkazujeme na naši bitmapu */

#zahrnout

#zahrnout

uint8_t bmpX, bmpY = 0; /* rezervujte paměť pro 2 x 8bitová celá čísla, potřebujeme pouze 8bitové inty

protože hodnota nikdy není vyšší než 128 (pixelů), takže můžeme ušetřit místo pomocí 8 bitů ints (což má maximální hodnotu 255) */

neplatné nastavení ()

{zpoždění (100); // dát zobrazení atd. čas na zapnutí displeje.begin (SSD1306_SWITCHCAPVCC, 0x3C); // toto má inicializovat displej display.clearDisplay (); // začněte s prázdnou obrazovkou}

/* upozorňujeme, že tyto komentáře nemusíte psát, jsou pouze referenční …………..

příkaz, na který se zaměříme, je display.drawBitmap, to je to, co kreslí naši úvodní obrazovku. (bmpX, je hodnota osy X na obrazovce, kde bude kotevní bod X bitmapy a bmpX a bmpY jsou hodnoty, které nás zajímají k vytvoření pohybu (bmpY, je hodnota osy Y na obrazovce, kde je kotva Y bodem bitmapy bude, že získáme referenční názvy, jak jsme je definovali v logu. c (LOGOPIC, je název bitmapy v #zahrnutém logu souboru. c (LOGOWIDTH, je počet pixelů napříč (X) k vykreslení bitmapa z kotevního bodu (LOGOHEIGHT, je počet pixelů dolů (Y) k vykreslení bitmapy z kotevního bodu, pixely X a Y napříč lze zadat ručně, ale je jednodušší použít ty předdefinované, než si je všechny pamatovat (1, poslední hodnota je barva, protože obrazovka je mono 0 černá 1 bílá. dobře začněte psát z dalšího řádku: ¬D lol*/ void loop () {display.clearDisplay (); // vyprázdnění obrazovky // bitmapa nakreslená z vlevo nahoře, x, y, název bitmapy, šířka X, výška Y, barevný displej.drawBitmap (bmpX, bmpY, LOGOPIC, LOGOWIDTH, LOGOHEIGHT, 1); display.display (); // toto ve skutečnosti vykreslí vyrovnávací paměť na displej}

nahrajte kód arduino a potvrďte, že funguje (obr. 3).

Krok 5: Přesun bitmapového skřítka

Image
Image
Přesun bitmapového skřítka
Přesun bitmapového skřítka
Přesun bitmapového skřítka
Přesun bitmapového skřítka

podle dřívějších instrukcí použijte paint.net a vytvořte nový soubor o rozměrech 30 x 15 pixelů (obr. 1) a nakreslete drsné auto, které náš mladý designér začíná nejprve na čelním skle (obrázky 2 a 3).

opět uložte jako soubor bmp systému Windows (jako v kroku 2), převeďte na bitmapu C (krok 3) a umístěte soubor car.c (nebo cokoli, pro co se rozhodnete) do stejné složky jako nově vytvořený arduino ino (skica) soubor.

(P.s. nezapomeňte přidat řádek #include do auta. c to nás často chytilo)

Nejprve propojte svůj ekvivalent s autem. C

#zahrnout

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

Displej Adafruit_SSD1306 (128, 64); // nastavení rozlišení displeje

/* bmpX/bmpY potřebujeme, aby to byly proměnné při změně těchto hodnot a překreslení

na obrazovce vytváříme efekt pohybové animace. hitSide a hitTop je způsob, jakým udržujeme sprite na obrazovce */ uint8_t bmpX, bmpY = 0; // rezerva paměti na 2 8 bitů ints (0-255) nepotřebujeme větší 128 bude největší počet použitých bool hitSide = 0; bool hitTop = 0;

neplatné nastavení ()

{zpoždění (100); // dát zobrazení atd. čas na zapnutí display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // toto má inicializovat displej display.clearDisplay (); // začněte prázdnou obrazovkou

}

prázdná smyčka ()

{display.clearDisplay (); // vyprázdnění obrazovky // bitmapa nakreslená zleva nahoře, x, y, název bitmapy, šířka X, výška Y, barevný displej.drawBitmap (bmpX, bmpY, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // display.display (); // toto vlastně vykreslí vyrovnávací paměť na displej vůbec/ * takto sledujeme okraj obrazovky a rozhodujeme, zda přidat pixel posunutí shora dolů) nebo odebrání pixelu (pohyb zdola nahoru) */ přepínač (hitSide) // toto zvolí směr auta na základě boole {případ 0: bmpX ++; přestávka;

případ 1:

bmpX--; přestávka; } // tyto 2 if příkazy nastaví bool na true nebo false if (bmpX == 0) {hitSide = 0; } if (bmpX == 96) // šířka obrazovky minus auto {hitSide = 1; } // stejné jako výše pro osu Y if (bmpY == 0) {hitTop = 0; } if (bmpY == 49) // výška obrazovky minus výška auta {hitTop = 1; } switch (hitTop) {case 0: bmpY ++; přestávka; případ 1: bmpY--; přestávka; }

}

program můžete vidět v přiloženém videu

Krok 6: Vytvoření hry pro řízení

Image
Image

Nejprve začneme tím, že nakreslíme několik různých aut nebo překážek, jako v předchozích fázích tutoriálu, a vytvoříme z nich 30x15 pixelů. Poté je převedeme na c bitmapy a propojíme v kódu.

#include // tyto cesty se budou muset změnit v závislosti

// kam ukládáte soubory // edit: právě jsem zjistil, jestli nahradíte // za "" nevyžadujete úplnou cestu // s vlastními knihovnami #include

#zahrnout

#include #include

#zahrnout

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

Displej Adafruit_SSD1306 (128, 64); // definujte parametry zobrazení

definujte proměnné a pevné hodnoty

// definujte vstupní piny to jsou piny na Arduinu, které se nikdy nezmění, takže #definujte #definujte INTPIN 3 // pouze piny 2 a 3 mohou být přerušovací piny na UNO #definovat UPPIN 4 // to jsou piny připojené tp relevantní přepínač #definovat DWNPIN 5 #define LFTPIN 6 #define RHTPIN 7 #define SND 9 // definovat směry

#define DIRUP 1 // podle těchto hodnot se „had“dívá, aby se rozhodl-

#definovat DIRDOWN 2 // směr, kterým se had bude pohybovat #definovat DIRLEFT 3 #define DIRRIGHT 4

uint8_t dirPressed = 0; // hodnota pro registraci směru k pohybu, na kterém kolíku šel vysoko

// booleovský obchod, jehož pin se zvýšil

bool BUTUP = 0; bool BUTDWN = 0; bool BUTLFT = 0; bool BUTRHT = 0; // vars pro polohu auta uint8_t carPosX = 1; uint8_t carPosY = {0, 16, 32, 48}; // potřebuje hodnotu cahnging pole

uint8_t lanePosArr = {0, 16, 32, 48}; // pole k uložení, kde je každý pruh

uint8_t carPosYCnt = 0; uint8_t carYTmp = 0; // proměnné pro čáry na silnici uint8_t roadLineX1 = 51; // tyto jsou předdefinovány na začátku, pak se čáry jeví jako bezproblémové uint8_t roadLineX2 = 102; uint8_t roadLineX3 = 153; uint8_t roadLineX4 = 254; uint8_t roadLineX5 = 200;

// to je počet pixelů, ve kterých se hrací plocha pohybuje současně

uint8_t drawSpeed = 4;

// vars pro nepřítele0

uint8_t nepřátel0PosX = 255; uint8_t nepřátel0PosY = 0; uint8_t nepřátel1PosX = 255; uint8_t nepřátelský1PosY = 0; uint8_t nepřátel2PosX = 255; uint8_t nepřátel2PosY = 0;

// proměnná k náhodnému přiřazení čísla pruhu překážkám

uint8_t laneGen = 0;

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

// počítadlo skóre

dlouhé skóre = 0; // toto je skóre:/ lol dlouhé porovnání = 0; // toto uloží skóre na poslední úrovni nahoru pro porovnání zpět k dlouhému highScore = 25; uint8_t metreCnt = 0;

zde začínáme funkce

// toto je sada příkazů, pokud je aktivováno přerušení void interruptressed () {delay (150); updateDirection (); } // aktualizujte, která hodnota je ve směru var, kontrolou boolů DIR // -------------------------- UPDATE DIRECTION (player)- ------------------------- neplatná aktualizaceDirection () {//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; }

}

// ------------------------------- MOVE CAR --------------- -------------------------

// tím se aktualizuje obrazovka pohyblivého vozu

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); přestávka; případ DIRDOWN: carPosYCnt ++; tón (SND, 100, 100); if (carPosYCnt == 4) {carPosYCnt = 3; } // Serial.println ("carPosY"); // Serial.println (carPosYCnt); carYTmp = carPosY [carPosYCnt]; dirPressed = 0; přestávka; // komentované auto schopné pohybu vlevo a vpravo detekce kolize zatím není tak dobrá /* případ DIRLEFT: carPosX--; if (carPosX == 0) {carPosX = 1; } // Serial.println ("carPosX"); // Serial.println (carPosX); dirPressed = 0; přestávka; */ case DIRRIGHT: // jen pro zábavu, pokud stisknete správně, hra vydá hluk (SND, 100, 50); // carPosX ++; // if (carPosX == 128) // {// carPosX = 127; //} // Serial.println ("carPosX"); // Serial.println (carPosX); // dirPressed = 0; přestávka; } updateDisplay (); }

// -------------------------- NÁHODNÝ POS X ------------------- -----------

uint8_t randomPosX () // tyto 2 rutiny pouze generují náhodnou polohu překážek

{uint8_t posValTmp = 0; posValTmp = náhodný (129, 230); //Serial.println("raddom x "); //Serial.println(posValTmp); return (posValTmp); }

// --------------------------- NÁHODNÝ POS Y ------------------ ------------------

uint8_t randomPosY ()

{uint8_t laneVal = 0; laneVal = náhodný (0, 4); // přidejte další pruh pro náhodnost, tj. žádný objekt na obrazovce, když jste v tomto pruhu //Serial.println("RandomY "); //Serial.println(lanePosArr[laneVal]); return (lanePosArr [laneVal]); }// ------------------------------- NASTAVIT RYCHLOST HRY -------------- -------------- void setGameSpeed () // tím se zastaví úroveň vyšší než 20, takže hra nebude hratelná {if (drawSpeed <21) {drawSpeed = drawSpeed+2; }}// ------------------------------------ DETEKCE ZRUŠENÍ ---------- ----------------------- neplatné detectCrash () {

if (nepřátel0PosX = 0 && nepřátel0PosY == carYTmp)

{// Serial.println ("Hra přes CRAASSSSHHHHHHEEEEEDDD do provozu 0"); konec hry(); } if (nepřátelský1PosX = 0 && konec hry(); } if (nepřátel2PosX = 0 && nepřátel2PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHHEEEEEDDD do provozu 2 "); konec hry(); }}

to jsou rutiny, které kreslí displej.

// ------------------------------- NAKRESLTE CESTU --------------- --------------------- neplatné drawRoad () // X, Y, délka, šířka {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 (); } // ----------------------------------------- DRAW enemys ---- --------------------------------------- neplatné enemysDraw () {// X, Y, název bmp, šířka, výška, barevný displej.drawBitmap (nepřátelský0PosX, nepřátelský0PosY, ENEMY0, ENEMY0_WIDTH, ENEMY0_HEIGHT, 1); nepřítel0PosX = nepřátel0PosX-drawSpeed; display.drawBitmap (nepřítel1PosX, nepřítel1PosY, ENEMY1, ENEMY1_WIDTH, ENEMY1_HEIGHT, 1); nepřátelské1PosX = nepřátelské1PosX-drawSpeed; display.drawBitmap (nepřátelské2PosX, nepřátelské2PosY, ENEMY2, ENEMY2_WIDTH, ENEMY2_HEIGHT, 1); nepřátelské2PosX = nepřátelské2PosX-drawSpeed; display.display (); if (nepřátelský0PosX> 231 && nepřátelský0PosX231 && nepřátelský1PosX <255) {nepřátel1PosX = randomPosX (); nepřítel1PosY = randomPosY (); checkDuplicate (); }

if (nepřátelský2PosX> 231 && nepřátelský2PosX <255) {nepřátel2PosX = randomPosX (); nepřítel2PosY = randomPosY (); }} // ------------------------------------ UPDATE DISPLAY -------- ---------------------------------------- neplatná aktualizaceDisplay () {display.clearDisplay (); display.drawBitmap (carPosX, carPosY [carPosYCnt], CARSPRITE, 30, 15, 1); display.fillRect (100, 0, 28, 10, ČERNÝ); display.setCursor (100, 0); display.setTextColor (BÍLÁ, ČERNÁ); display.println (skóre); display.display ();

}

// ------------------------- počkejte na smyčku lisů ------------------- ------

// toto je kód domovské obrazovky neplatný waitForPress () {splashScreen (); bool čekání = 0; // smyčka končí, když je to pravda display.clearDisplay (); zatímco (čeká == 0) {

display.fillRect (19, 20, 90, 32, ČERNÝ); // prázdné pozadí pro text

display.setTextColor (BÍLÁ); display.setCursor (23, 24); display.setTextSize (0); display.println („Bezohledný“); display.setCursor (36, 34); display.println („závodník“); display.drawBitmap (74, 24, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // x y w h r col display.drawRoundRect (21, 21, 86, 23, 4, WHITE); // ohraničení Snake display.drawRect (19, 20, 90, 33, WHITE); // rámeček ohraničení - 3 display.setCursor (25, 43); display.setTextSize (0); // písmo zpět na normální zobrazení.println ("stiskněte libovolnou klávesu"); display.fillRect (0, 0, 127, 8, ČERNÝ); display.setCursor (10, 0); display.print ("High Score:"); // zobrazení nejvyššího skóre display.print (highScore); display.display (); čekání = digitalRead (INTPIN); // zkontrolujte, zda se čekání při stisknutí klávesy změní na 1 končící při dirPressed = 0; // tlačítko reset stiskněte bez směru}} // -------------------------------------- ----- UPDATE GAME ----------------------------------------- neplatná aktualizační hra () {moveCar (); drawRoad (); enemysDraw (); // nepřátelský1Draw (); // nepřátelský2Draw (); metreCnt ++; detectCrash (); if (metreCnt == 5) // přidává bod za každých 10 cyklů za účelem navýšení skóre {metreCnt = 0; skóre ++; } if (skóre == porovnat+5) // zrychlí hru každých 5 bodů na maximálně 20 rychlostí {porovnání = skóre; setGameSpeed (); } noTone (SND); updateDisplay ();

}

// ------------------------------ KONEC HRY---------------- ------------------------------

// tato rutina nakreslí čáry kolem auta mrtvého hrdiny a poté zobrazí hru přes obrazovku

neplatná hraOver ()

{tón (SND, 200, 200); // přehrávání zvuku uint8_t linePosX, linePosY, pixwidth, pixheight = 0; // set vars to draw boxes around car linePosX = carPosY; linePosY = carYTmp; šířka 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élnících simulujících výbuch {linePosX = linePosX-2; linePosY = linePosY-2; pixwidth = šířka 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); zpoždění (10); } display.setTextSize (2); display.setTextColor (BÍLÁ, ČERNÁ); display.setCursor (10, 23); tón (SND, 50, 500); display.print („HRA“); display.display (); zpoždění (500); tón (SND, 40, 500); display.print („NAD“); display.setTextSize (0); display.display (); zpoždění (3000); restartGame (); waitForPress (); }

// ----------------------------------------- RESTARTOVÁ HRA ----- ---------------------------------------------------------- -----

void restartGame () // toto zkopíruje vysoké skóre a vynuluje všechny statistiky a vygeneruje náhodné pozice

{if (score> = highScore) // check to see if score higher than high score {highScore = score; // single if statment pro aktualizaci vysokého skóre}

skóre = 0;

drawSpeed = 4; metreCnt = 0; carPosYCnt = 0; nepřítel0PosX = randomPosX (); nepřítel0PosY = randomPosY (); nepřátelský1PosX = randomPosX (); nepřítel1PosY = randomPosY (); nepřítel2PosX = randomPosX (); nepřítel2PosY = randomPosY (); noTone (SND);

checkDuplicate ();

}

// ------------------------------------------------ -ZKONTROLUJTE DUPLIKÁT ----------------------------------------------- ------ void checkDuplicate () // zkontrolují, zda překážky nezabírají stejný herní prostor {// Serial.println ("duplikát zkontrolován"); if (nepřátelský2PosX> 230 && nepřátelský2PosX <255) {while (nepřátelský2PosY == nepřátelský1PosY || nepřátelský2PosY == nepřátel0PosY) {nepřátel2PosY = náhodnýPosY (); }}

if (nepřátelský0PosX> 230 &&

//------------------------------------------- ÚVODNÍ OBRAZOVKA --- --------------------------------

void splashScreen ()

{display.clearDisplay (); display.drawBitmap (0, 0, CRASH, CRASHWIDTH, CRASHHEIGHT, 1); display.display (); zpoždění (2000); } // ----------------------------------------------- ZALOŽIT ------------------------------------------------- ----------- neplatné nastavení () {zpoždění (100); // ať se věci spustí // Serial.begin (9600); // odkomentujte toto a všechny Serial. příkazy pro zobrazení diagnostiky poruch.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.setTextColor (BÍLÁ, ČERNÁ); display.setTextWrap (false); display.dim (0); pinMode (INTPIN, INPUT); pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT);

attachInterrupt (digitalPinToInterrupt (INTPIN), přerušované, RISING);

// náhodné umístění překážek nepřátel0PosX = randomPosX (); nepřítel0PosY = randomPosY (); nepřátelský1PosX = randomPosX (); nepřítel1PosY = randomPosY (); nepřítel2PosX = randomPosX (); nepřítel2PosY = randomPosY (); checkDuplicate (); // vyhledejte duplicitní umístění // Serial.println ("nastavení dokončeno"); úvodní obrazovka(); waitForPress (); } // ----------------------------------------------- ----- Smyčka -------------------------------------------- ----------

prázdná smyčka ()

{updateGame (); }

a to je skoro vše, jakékoli úpravy a zpětná vazba budou vítány. Problémy, které musíme řešit při blikání obrazovky, musíme prozkoumat, jak jej zmenšit a nepřátelská auta jsou stále schopna zabírat stejný prostor.

Doporučuje: