Flappy Bird on Arduino (dengan Gambar)

Flappy Bird on Arduino (dengan Gambar)

Isi kandungan:

Anonim

Touchscreen TFT adalah antara muka grafis yang luar biasa yang boleh digunakan dengan mikrokontroler seperti Atmel, PIC, STM, kerana ia mempunyai julat warna yang luas, dan kemampuan grafik yang baik dan pemetaan piksel yang baik.

Hari ini, kami akan menggunakan Peranti LCD TFT 2.4 inci dengan Arduino.

Perisai ini adalah untuk Arduino UNO, tetapi saya akan mengajar cara menggunakannya dengan Arduino Mega untuk alasan yang sangat logik, "Memory Program".

Dengan menggunakan perisai warna TFT LCD ini kita boleh menunjukkan aksara, rentetan, interfacing butang, imej bitmap, dan lain-lain pada warna TFT LCD.

Bekalan:

Langkah 1: Flappy Bird

#include

#include #include

// ==== Mencipta Objek UTFT myGLCD (SSD1289,38,39,40,41); // Parameter harus dilaraskan ke model Display / Schield anda UTouch myTouch (6, 5, 4, 3, 2);

// ==== Menetapkan fon extern uint8_t SmallFont; extern uint8_t BigFont; extern uint8_t SevenSegNumFont;

extern unsigned int bird01 0x41A; // Burung Bitmap

int x, y; // Pembolehubah untuk koordinat di mana paparan telah ditekan

// Floppy Bird int xP = 319; int yP = 100; int yB = 50; int movingRate = 3; int fallRateInt = 0; float fallRate = 0; skor int = 0; int lastSpeedUpScore = 0; int tertinggiScore; boolean screenPressed = false; boolean gameStarted = false;

void setup () {// Initiate display myGLCD.InitLCD (); myGLCD.clrScr (); myTouch.InitTouch (); myTouch.setPrecision (PREC_MEDIUM); tertinggiScore = EEPROM.read (0); // Baca skor tertinggi dari EEPROM initiateGame (); // Memulakan permainan}

kekosongan gelung () {xP = xP-movingRate; / / xP - x koordinat pilars; pelbagai: 319 - (-51) drawPilars (xP, yP); // Menggambarkan koordinat tiang // yB - y burung yang bergantung pada nilai variabel jatuh jatuh yB + = fallRateInt; fallRate = fallRate + 0.4; / / Setiap penetapan kenaikan kadar jatuh supaya kita dapat kesan percepatan / graviti fallRateInt = int (fallRate); // Cek untuk perlanggaran jika (yB> = 180 || yB <= 0) {// permainan atas dan bawahOver (); } jika ((xP <= 85) && (xP> = 5) && (yB <= yP-2)) {// upper pillar gameOver (); } jika ((xP <= 85) && (xP> = 5) && (yB> = yP + 60)) {// lower pillar gameOver (); } // Menarik lukisan burungBird (yB);

// Selepas tiang melewati skrin jika (xP <= - 51) {xP = 319; // Menetapkan xP kepada 319 yP = rand ()% 100 + 20; // Nombor rawak untuk skor ketinggian tiang ++; // Meningkatkan skor oleh satu} // ==== Mengawal burung jika (myTouch.dataAvailable () &&! ScreenPressed) {fallRate = -6; // Menetapkan negatif jatuhRat akan membuat skrin lompat burungTekan = benar; } // Tidak membenarkan memegang skrin / anda mesti mengetuknya lagi jika (! MyTouch.dataAvailable () & & screenPressed) {screenPressed = false; } // Selepas setiap lima mata, tambahkan kadar bergerak tiang jika ((skor - lastSpeedUpScore) == 5) {lastSpeedUpScore = skor; movingRate ++; }} // ===== initiateGame - Fungsi Khusus batal initiateGame () {myGLCD.clrScr (); / // latar belakang myGLCD.setColor biru (114, 198, 206); myGLCD.fillRect (0,0,319,239); // Ground myGLCD.setColor (221,216,148); myGLCD.fillRect (0, 215, 319, 239); myGLCD.setColor (47,175,68); myGLCD.fillRect (0, 205, 319, 214); // Tekan myGLCD.setColor (0, 0, 0); myGLCD.setBackColor (221, 216, 148); myGLCD.setFont (BigFont); myGLCD.print ("Markah:", 5,220); myGLCD.setFont (SmallFont); myGLCD.print ("HowToMechatronics.com", 140, 220); myGLCD.setColor (0, 0, 0); myGLCD.setBackColor (114, 198, 206); myGLCD.print ("Markah Tertinggi:", 5,5); myGLCD.printNumI (tertinggi, 120, 6); myGLCD.print ("> RESET <", 255,5); myGLCD.drawLine (0,23,319,23); myGLCD.print ("TAP TO START", CENTER, 100); drawBird (yB); // Menarik burung // Tunggu sehingga kita mengetuk sreen sementara (! GameStarted) {if (myTouch.dataAvailable ()) {myTouch.read (); x = myTouch.getX (); y = myTouch.getY (); // Reset skor tertinggi jika ((x> = 250) && (x <= 319) && (y> = 0) && (y <= 28)) {tertinggiScore = 0; myGLCD.setColor (114, 198, 206); myGLCD.fillRect (120, 0, 150, 22); myGLCD.setColor (0, 0, 0); myGLCD.printNumI (tertinggi, 120, 5); } jika ((x> = 0) && (x <= 319) && (y> = 30) && (y <= 239)) {gameStarted = true; myGLCD.setColor (114, 198, 206); myGLCD.fillRect (0, 0, 319, 32); }}} // Hapus teks "TAP TO START" sebelum permainan mula myGLCD.setColor (114, 198, 206); myGLCD.fillRect (85, 100, 235, 116); } // ===== drawPlillars - Fungsi Tersuai tidak sah drawPilars (int x, int y) {if (x> = 270) {myGLCD.setColor (0, 200, 20); myGLCD.fillRect (318, 0, x, y-1); myGLCD.setColor (0, 0, 0); myGLCD.drawRect (319, 0, x-1, y);

myGLCD.setColor (0, 200, 20); myGLCD.fillRect (318, y + 81, x, 203); myGLCD.setColor (0, 0, 0); myGLCD.drawRect (319, y + 80, x-1, 204); } else if (x <= 268) {// Draw kanan segiempat biru kanan myGLCD.setColor (114, 198, 206); myGLCD.fillRect (x + 51, 0, x + 60, y); // Menggambar pillar myGLCD.setColor (0, 200, 20); myGLCD.fillRect (x + 49, 1, x + 1, y-1); // Menggambar bingkai hitam tiang myGLCD.setColor (0, 0, 0); myGLCD.drawRect (x + 50, 0, x, y); // Lukiskan segi empat tepat biru dari tiang myGLCD.setColor (114, 198, 206); myGLCD.fillRect (x-1, 0, x-3, y);

/ // Tiang bawah myGLCD.setColor (114, 198, 206); myGLCD.fillRect (x + 51, y + 80, x + 60, 204); myGLCD.setColor (0, 200, 20); myGLCD.fillRect (x + 49, y + 81, x + 1, 203); myGLCD.setColor (0, 0, 0); myGLCD.drawRect (x + 50, y + 80, x, 204); myGLCD.setColor (114, 198, 206); myGLCD.fillRect (x-1, y + 80, x-3, 204); } // Menggambar skor myGLCD.setColor (0, 0, 0); myGLCD.setBackColor (221, 216, 148); myGLCD.setFont (BigFont); myGLCD.printNumI (skor, 100, 220); }

// ====== drawBird () - Fungsi Tersuai tidak sah drawBird (int y) {// Menggambar burung - bitmap myGLCD.drawBitmap (50, y, 35, 30, bird01); // Lukiskan segi empat tepat biru di atas dan di bawah burung untuk menghapuskan keadaan previus myGLCD.setColor (114, 198, 206); myGLCD.fillRoundRect (50, y, 85, y-6); myGLCD.fillRoundRect (50, y + 30,85, y + 36); } // ======== gameOver () - Fungsi Custom void gameOver () {delay (3000); // 1 second // Membersihkan skrin dan mencetak teks myGLCD.clrScr (); myGLCD.setColor (255, 255, 255); myGLCD.setBackColor (0, 0, 0); myGLCD.setFont (BigFont); myGLCD.print ("GAME OVER", CENTER, 40); myGLCD.print ("Score:", 100, 80); myGLCD.printNumI (skor, 200, 80); myGLCD.print ("Restarting …", CENTER, 120); myGLCD.setFont (SevenSegNumFont); myGLCD.printNumI (2, CENTER, 150); kelewatan (1000); myGLCD.printNumI (1, CENTER, 150); kelewatan (1000); // Menulis skor tertinggi dalam EEPROM jika (skor> tertinggiScore) {tertinggiScore = skor; EEPROM.write (0, tertinggi); } // Menetapkan semula pembolehubah untuk memulakan kedudukan kedudukan xP = 319; yB = 50; fallRate = 0; skor = 0; lastSpeedUpScore = 0; movingRate = 3; gameStarted = false; // Mulakan semula inisiasi permainan (); }

Langkah 2: Kerja Projek

Berikan ibu jari jika ia benar-benar membantu anda dan ikuti saluran saya untuk projek yang menarik:)

Kongsi video ini jika anda suka.

Selamat untuk anda melanggan:

Terima kasih untuk membaca!

Runner Up dalam

Petua & Cabaran Elektronik