Reckless Racer Arduino OLED Game, AdafruitGFX and Bitmaps Basics: 6 trinn
Reckless Racer Arduino OLED Game, AdafruitGFX and Bitmaps Basics: 6 trinn
Anonim
Reckless Racer Arduino OLED Game, AdafruitGFX og Bitmaps Basics
Reckless Racer Arduino OLED Game, AdafruitGFX og Bitmaps Basics
Reckless Racer Arduino OLED Game, AdafruitGFX og Bitmaps Basics
Reckless Racer Arduino OLED Game, AdafruitGFX og Bitmaps Basics

I denne opplæringen vil vi se på hvordan du bruker bitmaps ved hjelp av Adafruit_GFX.c bibliotek som en slags sprites i et spill. Det enkleste spillet vi kunne tenke oss er et bilrullebyttespill som ruller rundt i siden, til slutt bestemte vår beta -tester og assistentkoder seg for "Reckless Racer" som et navn, da det er ganske hensynsløst å kjøre feil vei nedover motorveien !!.

Utformingen av kretsen vår er på bildene inkludert ovenfor og er detaljert i vårt siste prosjekt/opplæring her Snake Instructables som beskriver hvordan kretsen fungerer.

vi vil kreve

Adafruit_GFX

Paint.net

Arduino IDE windowslinux

og ta en titt på Snake -opplæringen for resten av utstyret.

Rekvisita

Snake Game

Trinn 1: Installere Paint.net

Installere Paint.net
Installere Paint.net
Installere Paint.net
Installere Paint.net
Installere Paint.net
Installere Paint.net

Vi bruker paint.net ettersom programvaren er gratis, så helt gratis å bruke kan du laste ned Paint. Net her.

For å installere paint.net dobbeltklikker du på det nedlastede programmet og svarer positivt slik neste, ja, ok, jeg er enig og bildene ovenfor vil gi deg en veibeskrivelse.

Trinn 2: Tegn en enkel sprutskjerm

Tegne en enkel sprutskjerm
Tegne en enkel sprutskjerm
Tegne en enkel sprutskjerm
Tegne en enkel sprutskjerm
Tegne en enkel sprutskjerm
Tegne en enkel sprutskjerm

Når du er i paint.net, lag et nytt bilde ved å klikke på Fil deretter nytt, sett bildestørrelsen til 1260x620 (se første bilde) klikk ok når du har den nye siden, tegne en sprutskjerm med bare 2 farger svart og hvitt med blyanten verktøy (bilde 2), når du har tegnet (eller limt inn) sprutskjermbildet ditt, klikker du på bildet og deretter endrer størrelsen (image4), i popup -vinduet endrer du størrelsen fra 1260x620 til 126x62 (2 piksler mindre enn skjermen) (pic5) Klikk OK.

klikk deretter på Fil -menyen og lagre som (pic6).

Når popup -vinduet vises i rullegardinmenyen for filtype, velg BMP (bitmap). (pic7), skriv inn et filnavn og klikk på lagre, når popup -vinduet vises satt dithering til 0 og satt til 8 bit, klikker du ok (pic8).

Trinn 3: Konvertering av BMP til C Bitmap -fil

Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil
Konvertering av BMP til C Bitmap -fil

Nå må vi konvertere bildet vårt til et format som arduinoen kan forstå. Det er mange verktøy tilgjengelig for å gjøre dette, men mitt "gå til" -sted er marlin websides bitmap -konverteringsverktøy …

marlinfw.org/tools/u8glib/converter.html

Så vi starter denne delen med å bruke lenken ovenfor for å åpne nettstedet som vises på bilde 1

klikk på velg fil og velg bitmap du opprettet tidligere (pic2)

marlin bitmap converter vil automatisk konvertere bildet ditt til c -kode venstre dobbeltklikk på koden som skal markere koden, høyreklikk og klikk på copy (pic3)

neste Vi oppretter høyreklikk og lager et nytt tekstdokument (pic4)

dobbeltklikk på det nye dokumentet, når det åpnes, høyreklikk og lim inn koden (pic5)

neste må vi legge til linjen nær toppen av koden #inkludere dette tillater oss å lagre bitmapdataene til flashminnet på arduinoen, så omdøper vi #define bredde, høyde og navn til noe enklere å bruke. disse er uthevet på bilde 6, vi omdøper dem fra de tilfeldig genererte tegnene, vi omdøper dem til eksemplet nedenfor

#define LOGOWIDTH

#define LOGOHEIGHT

const unsigned char LOGOPISK PROGMEM

neste klikk fil og lagre som, lagre filen som logo. c Lukk notisblokk, høyreklikk på logo.c og klikk på kopier.

Trinn 4: Visning av en LOGO ved hjelp av DrawBitmap

Vise en LOGO ved hjelp av DrawBitmap
Vise en LOGO ved hjelp av DrawBitmap
Vise en LOGO ved hjelp av DrawBitmap
Vise en LOGO ved hjelp av DrawBitmap
Vise en LOGO ved hjelp av DrawBitmap
Vise en LOGO ved hjelp av DrawBitmap

Nå laster vi inn arduino IDE og lager en ny skisse og lagrer den som logoexample.ino, deretter som en juks i arduino -ideen, klikk på filmenyen og lagre som, gå tilbake til prosjektmappen og høyreklikk og lim inn.c -filen (pic2) og klikk deretter på Avbryt, dette sparer deg for å måtte bla til mappen for å lime inn i filen.

skriv inn følgende kode i arduino IDE eller last ned ino.

(vi anbefaler å skrive i stedet for å kopiere og lime inn eller bruke filene under, det er den beste måten å lære)

#include /* dette vil variere avhengig av hvor du lagrer

ino vanligvis i mappen C: / Users / ~ brukernavn / Documents / Arduino / project ~ navn

og dette er hvordan vi lenker til vårt bitmap */

#inkludere

#inkludere

uint8_t bmpX, bmpY = 0; /* reserve minne for 2 X 8 biters heltall, vi trenger bare 8 bit ints

ettersom verdien aldri er høyere enn 128 (piksler), slik at vi kan spare plass ved å bruke 8 bits ints (som har en maksimal verdi på 255) */

ugyldig oppsett ()

{forsinkelse (100); // gi display etc tid til å slå på displayet. begynner (SSD1306_SWITCHCAPVCC, 0x3C); // dette er å initialisere displayet display.clearDisplay (); // begynn med en tom skjerm}

/* Vær oppmerksom på at du ikke trenger å skrive disse kommentarene i de er til referanse …………..

kommandoen vi skal fokusere på er display.drawBitmap, dette er det som trekker vår sprutskjerm. (bmpX, er X -aksens verdi på skjermen der X -forankringspunktet i bitmappen vil være, og bmpX og bmpY er verdiene vi er interessert i for å skape bevegelse (bmpY, er Y -aksens verdi på skjermen der Y -ankeret punktet i bitmap vil være at vi får referansenavnene slik vi definerte dem i logo.c (LOGOPIC, er navnet på bitmapet i #included file logo. c (LOGOWIDTH, er hvor mange piksler på tvers (X) for å tegne bitmap fra ankerpunktet (LOGOHEIGHT, er hvor mange piksler ned (Y) for å trekke bitmap fra ankerpunktet X og Y piksler på tvers kan angis manuelt, men det er bare lettere å bruke de forhåndsdefinerte enn å huske dem alle (1, den siste verdien er fargen ettersom skjermen er mono 0 svart 1 hvit. ok begynn å skrive fra neste linje: ¬D lol*/ void loop () {display.clearDisplay (); // blank skjermen // bitmap tegnet fra øverst til venstre, x, y, bitmapnavn, bredde X, høyde Y, fargedisplay.drawBitmap (bmpX, bmpY, LOGOPIC, LOGOWIDTH, LOGOHEIGHT, 1); display.display (); // dette trekker faktisk bufferen til skjermen noensinne}

last opp koden du arduino og bekreft at den fungerer (pic3).

Trinn 5: Flytte en Bitmap Sprite

Image
Image
Flytte en Bitmap Sprite
Flytte en Bitmap Sprite
Flytte en Bitmap Sprite
Flytte en Bitmap Sprite

ved å bruke de tidligere instruksjonene, bruk paint.net og lag en ny fil på 30x15 piksler (pic1) og tegne en grov bil, den unge designeren starter med frontruten først (bilder 2 og 3).

lagre den igjen som en Windows bmp -fil (som i trinn 2), konverter til en C -bitmap (trinn 3) og plasser car.c -filen (eller hva du bestemmer deg for) i samme mappe som en nyopprettet arduino ino (skisse) fil.

(p.s. husk å legge til #include -linjen i bilen. c dette pleide å fange oss ofte)

Først kobler du til bilen din. C

#inkludere

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

Adafruit_SSD1306 -skjerm (128, 64); // angi oppløsningen på skjermen

/* bmpX/bmpY vi trenger disse for å være variabler som endrer disse verdiene og tegner om

skjermen er hvordan vi lager bevegelsesanimasjonseffekt. hitSide og hitTop er hvordan vi holder sprite på skjermen */ uint8_t bmpX, bmpY = 0; // reserve minne for 2 8 bit ints (0-255) vi trenger ikke større 128 vil være det største antallet som brukes bool hitSide = 0; bool hitTop = 0;

ugyldig oppsett ()

{forsinkelse (100); // gi display etc tid til å slå på displayet. begynner (SSD1306_SWITCHCAPVCC, 0x3C); // dette er å initialisere displayet display.clearDisplay (); // start med en tom skjerm

}

hulrom ()

{display.clearDisplay (); // blank skjermen // bitmap tegnet øverst til venstre, x, y, navn på bitmap, bredde X, høyde Y, farge display.drawBitmap (bmpX, bmpY, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // display.display (); // Dette trekker faktisk bufferen til skjermen noensinne) // dette velger retningen på bilen basert på boole {case 0: bmpX ++; gå i stykker;

sak 1:

bmpX--; gå i stykker; } // disse 2 if -setningene setter bool til true eller false hvis (bmpX == 0) {hitSide = 0; } hvis (bmpX == 96) // bredden på skjermen minus bilen {hitSide = 1; } // samme som ovenfor for Y -aksen hvis (bmpY == 0) {hitTop = 0; } hvis (bmpY == 49) // skjermhøyde minus bilhøyden {hitTop = 1; } switch (hitTop) {case 0: bmpY ++; gå i stykker; sak 1: bmpY--; gå i stykker; }

}

du kan se programmet fungere i vedlagte video

Trinn 6: Gjør Driving Game

Image
Image

Først starter vi med å tegne noen forskjellige biler eller hindringer som i de tidligere stadiene av opplæringen, noe som gjør dem til 30x15 piksler. Deretter konverterer vi dem til c -bitmaps og kobler til koden.

#include // disse banene må endres avhengig

// på hvor du lagrer filene // rediger: jeg har nettopp funnet ut om du erstatter // med "" du trenger ikke hele banen // med dine egne biblioteker #include

#inkludere

#include #include

#inkludere

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

Adafruit_SSD1306 -skjerm (128, 64); // definere skjermparametrene

definere variabler og faste verdier

// definere inngangspinner dette er pinnene på arduinoen de endrer seg aldri, så #definere #definere INTPIN 3 // bare pinner 2 og 3 kan være avbruddsstift på UNO #definere OPPIN 4 // disse er pinner koblet tp relevant bryter #definere DWNPIN 5 #define LFTPIN 6 #define RHTPIN 7 #define SND 9 // definere retninger

#define DIRUP 1 // disse verdiene er det "slangen" ser på for å bestemme-

#define DIRDOWN 2 // retningen slangen vil bevege seg #define DIRLEFT 3 #define DIRRIGHT 4

uint8_t dirPressed = 0; // verdi for å registrere retning for å flytte på hvilken pinne som gikk høyt

// booleans lagre hvilken pin gikk høyt

bool BUTUP = 0; bool BUTDWN = 0; bool BUTLFT = 0; bool BUTRHT = 0; // vars for posisjonen til bilen uint8_t carPosX = 1; uint8_t carPosY = {0, 16, 32, 48}; // trenger verdi for å matche matrisen

uint8_t lanePosArr = {0, 16, 32, 48}; // array for å lagre hvor hver kjørefelt er

uint8_t carPosYCnt = 0; uint8_t carYTmp = 0; // variabler for linjene i veien uint8_t roadLineX1 = 51; // disse er forhåndsdefinerte i begynnelsen, så ser linjene ut sømløs uint8_t roadLineX2 = 102; uint8_t roadLineX3 = 153; uint8_t roadLineX4 = 254; uint8_t roadLineX5 = 200;

// dette er hvor mange piksler avspillingsområdet beveger seg om gangen

uint8_t drawSpeed = 4;

// vars for fiende0

uint8_t fiende0PosX = 255; uint8_t fiende0PosY = 0; uint8_t fiende1PosX = 255; uint8_t fiende1PosY = 0; uint8_t fiende2PosX = 255; uint8_t fiende2PosY = 0;

// variabel til tilfeldig tilordne et banenummer til hindringer

uint8_t laneGen = 0;

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

// poengsum

lang poengsum = 0; // dette er poengsummen:/ lol long compar = 0; // dette lagrer poengsummen på siste nivå opp for å sammenligne tilbake til lang highScore = 25; uint8_t metreCnt = 0;

det er her vi starter funksjonene

// dette er settet med kommandoer hvis avbruddet er aktivert tomrummet avbrutt () {forsinkelse (150); updateDirection (); } // oppdater hvilken verdi som er i retningen var ved å sjekke DIR bools // -------------------------- UPDATE DIRECTION (spiller)- ------------------------- void updateDirection () {//Serial.println("updateDirection Called "); BUTUP = digitalRead (UPPIN); BUTDWN = digitalRead (DWNPIN); BUTLFT = digitalRead (LFTPIN); BUTRHT = digitalRead (RHTPIN); hvis (BUTUP == true) {dirPressed = DIRUP; } hvis (BUTDWN == true) {dirPressed = DIRDOWN; } hvis (BUTLFT == true) {dirPressed = DIRLEFT; } hvis (BUTRHT == true) {dirPressed = DIRRIGHT; }

}

// ------------------------------- FLYTTE BIL --------------- -------------------------

// Dette vil oppdatere skjermen når motoren sprite

void moveCar ()

{switch (dirPressed) {case DIRUP: carPosYCnt--; carPosY [carPosYCnt]; tone (SND, 100, 100); hvis (carPosYCnt == 255) {carPosYCnt = 0; } carYTmp = carPosY [carPosYCnt]; dirPressed = 0; // Serial.println ("carPosY up"); // Serial.println (carPosYCnt); gå i stykker; sak DIRDOWN: carPosYCnt ++; tone (SND, 100, 100); hvis (carPosYCnt == 4) {carPosYCnt = 3; } // Serial.println ("carPosY"); // Serial.println (carPosYCnt); carYTmp = carPosY [carPosYCnt]; dirPressed = 0; gå i stykker; // kommenterte bilen i stand til å bevege kollisjonsdeteksjon til venstre og høyre ikke så bra enda /* sak DIRLEFT: carPosX--; hvis (carPosX == 0) {carPosX = 1; } // Serial.println ("carPosX"); // Serial.println (carPosX); dirPressed = 0; gå i stykker; */ case DIRRIGHT: // bare for moro skyld hvis du trykker til høyre, vil spillet lage en støytone (SND, 100, 50); // carPosX ++; // hvis (carPosX == 128) // {// carPosX = 127; //} // Serial.println ("carPosX"); // Serial.println (carPosX); // dirPressed = 0; gå i stykker; } updateDisplay (); }

// -------------------------- RANDOM POS X ------------------- -----------

uint8_t randomPosX () // disse 2 rutinene genererer bare tilfeldig posisjon for hindringene

{uint8_t posValTmp = 0; posValTmp = tilfeldig (129, 230); //Serial.println("random x "); //Serial.println(posValTmp); retur (posValTmp); }

// --------------------------- RANDOM POS Y ------------------ ------------------

uint8_t randomPosY ()

{uint8_t laneVal = 0; laneVal = tilfeldig (0, 4); // legg til en ekstra kjørefelt for tilfeldighet, dvs. ingen gjenstander på skjermen mens du er i den kjørefeltet //Serial.println("RandomY "); //Serial.println(lanePosArr [laneVal]); retur (lanePosArr [laneVal]); }// ------------------------------- SETT SPILLHASTIGHET -------------- -------------- void setGameSpeed () // dette stopper nivået til å gå høyere enn 20, noe som gjør spillet uspillbart {hvis (drawSpeed <21) {drawSpeed = drawSpeed+2; }}// ------------------------------------ DETECT CRASH ---------- ----------------------- void detectCrash () {

hvis (fiende0PosX = 0 && fiende0PosY == carYTmp)

{// Serial.println ("Game Over CRAASSSSHHHHHHEEEEEDDD into Traffic 0"); spillet er over(); } hvis (fiende1PosX = 0 && fiende1PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHEEEEEDDD til trafikk 1 "); spillet er over(); } hvis (fiende2PosX = 0 && fiende2PosY == carYTmp) {//Serial.println("Game Over CRAASSSSHHHHHHEEEEEDDD til trafikk 2 "); spillet er over(); }}

dette er rutinene som tegner displayet.

// ------------------------------- TREKK VEI --------------- --------------------- void drawRoad () // X, Y, lengde, bredde {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 (); } // ----------------------------------------- TEKNE fiender ---- --------------------------------------- ugyldige fienderDraw () {// X, Y, bmp navn, bredde, høyde, fargedisplay.drawBitmap (fiende0PosX, fiende0PosY, ENEMY0, ENEMY0_WIDTH, ENEMY0_HEIGHT, 1); fiende0PosX = fiende0PosX-drawSpeed; display.drawBitmap (fiende1PosX, fiende1PosY, ENEMY1, ENEMY1_WIDTH, ENEMY1_HEIGHT, 1); fiende1PosX = fiende1PosX-drawSpeed; display.drawBitmap (fiende2PosX, fiende2PosY, ENEMY2, ENEMY2_WIDTH, ENEMY2_HEIGHT, 1); fiende2PosX = fiende2PosX-drawSpeed; display.display (); hvis (fiende0PosX> 231 && fiende0PosX231 && fiende1PosX <255) {fiende1PosX = randomPosX (); fiende1PosY = randomPosY (); checkDuplicate (); }

hvis (fiende2PosX> 231 && fiende2PosX <255) {fiende2PosX = randomPosX (); fiende2PosY = randomPosY (); }} // ------------------------------------ UPDATE DISPLAY -------- ---------------------------------------- void updateDisplay () {display.clearDisplay (); display.drawBitmap (carPosX, carPosY [carPosYCnt], CARSPRITE, 30, 15, 1); display.fillRect (100, 0, 28, 10, SVART); display.setCursor (100, 0); display.setTextColor (HVIT, SVART); display.println (poengsum); display.display ();

}

// ------------------------- vent på trykkløkke ------------------- ------

// dette er hjemmeskjermkoden void waitForPress () {splashScreen (); bool venter = 0; // loop slutter når dette er sant display.clearDisplay (); mens (venter == 0) {

display.fillRect (19, 20, 90, 32, SVART); // tom bakgrunn for tekst

display.setTextColor (HVIT); display.setCursor (23, 24); display.setTextSize (0); display.println ("hensynsløs"); display.setCursor (36, 34); display.println ("Racer"); display.drawBitmap (74, 24, CARSPRITE, CARWIDTH, CARHEIGHT, 1); // x y w h r col display.drawRoundRect (21, 21, 86, 23, 4, WHITE); // border Snake display.drawRect (19, 20, 90, 33, WHITE); // kantboks - 3 display.setCursor (25, 43); display.setTextSize (0); // font tilbake til normal display.println ("trykk på hvilken som helst tast"); display.fillRect (0, 0, 127, 8, SVART); display.setCursor (10, 0); display.print ("High Score:"); // vise høy score display.print (highScore); display.display (); venter = digitalRead (INTPIN); // sjekk om tasten som trykkes venter vil endres til 1 slutt mens dirPressed = 0; // tilbakestill knapp trykk til ingen retning}} // -------------------------------------- ----- OPPDATER SPILL ----------------------------------------- ugyldig oppdateringsspill () {moveCar (); drawRoad (); enemysDraw (); // fiende1Draw (); // fiende2Draw (); metreCnt ++; detectCrash (); hvis (metreCnt == 5) // legger til et poeng for hver 10. syklus for å slå opp poengsummen {metreCnt = 0; score ++; } hvis (score == sammenligne+5) // fremskynder spillet hvert 5. poeng til maksimalt 20 hastigheter {sammenlign = poengsum; setGameSpeed (); } noTone (SND); updateDisplay ();

}

// ------------------------------ SPILLET ER OVER---------------- ------------------------------

// denne rutinen trekker linjene rundt den døde heltebilen og viser deretter spillet over skjermen

void gameOver ()

{tone (SND, 200, 200); // spill lyd uint8_t linePosX, linePosY, pixwidth, pixheight = 0; // sett vars til å tegne bokser rundt bil linePosX = carPosY; linePosY = carYTmp; pixwidth = 30; pixheight = 15; display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); for (int i = 0; i <= 26; i ++) // dette omgir bilen i rektangler som simulerer eksplosjon {linePosX = linePosX-2; linePosY = linePosY-2; pixwidth = pixwidth+4; pixheight = pixheight+4; display.drawRect (linePosX, linePosY, pixwidth, pixheight, BLACK); display.drawRect (linePosX, linePosY, pixwidth, pixheight, WHITE); display.display (); tone (SND, i*20, 50); forsinkelse (10); } display.setTextSize (2); display.setTextColor (HVIT, SVART); display.setCursor (10, 23); tone (SND, 50, 500); display.print ("GAME"); display.display (); forsinkelse (500); tone (SND, 40, 500); display.print ("OVER"); display.setTextSize (0); display.display (); forsinkelse (3000); restartGame (); waitForPress (); }

// ----------------------------------------- GENSTART SPILL ----- -------------------------------------------------- -----

void restartGame () // denne kopierer høy score og tilbakestiller all statistikk og genererer tilfeldige posisjoner

{if (score> = highScore) // sjekk om score er høyere enn høy score {highScore = score; // singel hvis uttalelse for å oppdatere høy score}

poengsum = 0;

drawSpeed = 4; metreCnt = 0; carPosYCnt = 0; fiende0PosX = randomPosX (); fiende0PosY = randomPosY (); fiende1PosX = randomPosX (); fiende1PosY = randomPosY (); fiende2PosX = randomPosX (); fiende2PosY = randomPosY (); noTone (SND);

checkDuplicate ();

}

// ------------------------------------------------ -KONTROLLER DUPLIKAT ----------------------------------------------- ------ void checkDuplicate () // disse sjekker om hindringer opptar det samme spillområdet {// Serial.println ("duplikat kontrollert"); if (fiende2PosX> 230 && fiende2PosX <255) {while (fiende2PosY == fiende1PosY || fiende2PosY == fiende0PosY) {fiende2PosY = randomPosY (); }}

hvis (fiende0PosX> 230 && fiende0PosX230 && fiende2PosXenemy1PosX && fiende2PosX230 && fiende0PosXenemy1PosX && fiende0PosX

// ------------------------------------------- SPLASH SCREEN --- --------------------------------

void splashScreen ()

{display.clearDisplay (); display.drawBitmap (0, 0, CRASH, CRASHWIDTH, CRASHHEIGHT, 1); display.display (); forsinkelse (2000); } // ----------------------------------------------- OPPSETT ------------------------------------------------- ----------- ugyldig oppsett () {forsinkelse (100); // la ting starte opp // Serial.begin (9600); // kommenter dette og alt det serielle. kommandoer for feildiagvisning. begynner (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.setTextColor (HVIT, SVART); display.setTextWrap (false); display.dim (0); pinMode (INTPIN, INPUT); pinMode (UPPIN, INPUT); pinMode (DWNPIN, INPUT); pinMode (LFTPIN, INPUT); pinMode (RHTPIN, INPUT);

attachInterrupt (digitalPinToInterrupt (INTPIN), interruptressed, RISING);

// tilfeldig plassere hindringer fiende0PosX = tilfeldigPosX (); fiende0PosY = randomPosY (); fiende1PosX = randomPosX (); fiende1PosY = randomPosY (); fiende2PosX = randomPosX (); fiende2PosY = randomPosY (); checkDuplicate (); // se etter dupliserte steder // Serial.println ("oppsettet fullført"); splashScreen (); waitForPress (); } // ----------------------------------------------- ----- LØKKE -------------------------------------------- ----------

hulrom ()

{updateGame (); }

og det er stort sett det, eventuelle modifikasjoner og tilbakemeldinger mottas med takk. Problemer vi trenger for å løse skjermflimmer, vi må se på hvordan vi kan redusere det, og fiendens biler kan fremdeles ta den samme plassen.

Anbefalt: