Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Serangan UFO!

Komponen dan persediaan

Arduino UNO
× 1
MAX7219 Modul Dot Matrix 4 dalam Satu Tampilan
× 1
Konektor Mur Sekrup Konektor Pria DB9-G1-01 Terminal 9 Pin Papan Breakout
× 1
NPN Transistor Serbaguna
× 1
Breadboard (generik)
× 1
Buzzer piezo pasif Adafruit
× 1
Kabel Jumper Pria/Wanita
× 5
Kabel jumper (generik)
× 10
Resistor 1k ohm
× 1
Atari Kompatibel Joystick 9Pin
× 1

Tentang proyek ini

Saya membuat game ini menggunakan Arduino UNO, kumpulan matriks dan komponen MAXX7219 "4 in 1" dari Arduino Starter Kit.

Kode ini ditulis oleh saya dan menggunakan perpustakaan Max72xxPanel, Adafruit GFX, dan SPI.

Cobalah dan ledakkan beberapa UFO! :-)

Setiap level memiliki target jumlah UFO untuk dibunuh sebelum bos muncul.

Game membutuhkan joystick 9-pin yang kompatibel dengan Atari. Jadi jika Anda memiliki yang lama tergeletak di sekitar Anda dapat meletakkannya kembali untuk digunakan. Atau Anda bisa membuatnya sendiri. Saya sedang berupaya membuat ini menjadi perangkat genggam di versi mendatang.

Kode

  • Kode Serangan UFO
Kode Serangan UFOC/C++
/*SERANGAN UFO! - Ditulis oleh Anthony Clarke. *//*Beberapa baris kode tertentu diambil dari program contoh sumber terbuka. Ini diberi label dalam komentar.*/#include #include #include const int pinCS =10; // Lampirkan CS ke pin ini, DIN ke MOSI dan CLK ke SCK (cf http://arduino.cc/en/Reference/SPI )const int numberOfHorizontalDisplays =4;const int numberOfVerticalDisplays =1;Max72xxPanel matrix =Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);// 'ship', 8x8pxconst unsigned char ship [] PROGMEM ={ 0x80, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};// 'UFO', 8x8pxconst unsigned char ={ 0x40, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};// 'explosion', 8x8pxconst unsigned char ledakan [] PROGMEM ={ 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00};// 'Bouncer', 8x8pxconst unsigned char bouncer [] PROGMEM ={ 0x60, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00};// 'Boss1', 8x8pxconst unsigned char boss [] PROGMEM ={ 0x18, 0x24, 0x42, 0xff, 0x24, 0xff, 0x7e, 0x3c};// 'Faller', 8x8pxconst unsigned char faller [] PROGMEM ={ 0x80, 0xc0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00};// ' Riser', 8x8pxconst unsigned char riser [] PROGMEM ={ 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00};// 'LT', 8x8pxconst unsigned char LT [] PROGMEM ={ 0x78, 0xfc, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00};// 'UFO laser', 8x8pxconst unsigned char ufoLaser [] PROGMEM ={ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};// 'BossBoom', 8x8pxconst unsigned char bossBoom1 [] PROGMEM ={ 0xaa, 0x55, 0xa2, 0x51, 0x45, 0xaa, 0xaa , 0x55};// 'BossBoom2', 8x8pxconst unsigned char bossBoom2 [] PROGMEM ={ 0x55, 0xaa, 0x45, 0x8a, 0x51, 0xa2, 0x55, 0xaa};//Game dimulai variabelbool gameStart =false;// Mendefinisikan kontrol joystick pinsint up =2;int down =3;int left =4;int right =5;int trigger =6;//Variabel ticker judul..Dicuri tanpa malu dari contoh ticker :PString tape ="UFO ATTACK! - Tekan api untuk memulai ";int wait =40; // Dalam milidetik spacer =1;int lebar =5 + spacer; // Lebar font adalah 5 piksel//Variabel posisi kapal dan laserint shipx =0;int shipy =0;int lasx;int lasy;//Lives counterint live =5;//variabel keberadaan laserbool lasExist;//Variabel posisi laser UFOint ufoLas1x;int ufoLas1y;int ufoLas2x;int ufoLas2y;int ufoLas3x;int ufoLas3x;int ufoLas3x;//Variabel keberadaan laser UFObool ufoLasExist1 =false;bool ufoLasExist2 =false;bool ufoLasExist3 =false;bool ufoLasExist4 =false;//variabel pemilihan laser UFOint seleksi;int lastSelection;//Variabel pemilihan minion bosint minionSelection;//UFO variabel posisi ufo1x;int ufo1y;int ufo2x;int ufo2y;int ufo3x;int ufo3y;//Variabel posisi bouncerint bouncer1x;int bouncer1y;int bouncer2x;int bouncer2y;int bouncer3x;int bouncer3y;int bouncer4x;int bouncer4y;int faller1x;int faller1y;int faller2x;int faller2y;int faller3x;int faller3y;int faller4x;i nt faller4y;//Variabel kecepatan Fallerint faller1Speedx;int faller1Speedy;int faller2Speedx;int faller2Speedy;int faller3Speedx;int faller3Speedy;int faller4Speedx;int faller4Speedy;int fallerxSpeedTarget =2;int fallerySpeedTarget =2;//Variabel posisi riserint riser1x;;int riser2x;int riser2y;int riser3x;int riser3y;int riser4x;int riser4y;//Variabel kecepatan riserint riser1Speedx;int riser1Speedy;int riser2Speedx;int riser2Speedy;int riser3Speedx;int riser3Speedy;int riser4Speedy;/int riser4 variabel posisiint ltx;int lty;//LT variabel kesehatanint ltKesehatan =3;//Variabel kecepatan LTint ltxKecepatan =0;int ltxSpeedTarget =2;//Variabel posisi bosint bossx =34;int bossy =0;//Variabel kecepatan gerakan bosint bossxSpeed ​​=0;int bossySpeed ​​=0;int bossxSpeedTarget =3;int bossySpeedTarget =1; //Variabel keberadaan UFObool ufo1Exist =false;bool ufo2Exist =false;bool ufo3Exist =false;//Variabel keberadaan bouncerbool bouncer1Exist =false;bool bouncer2Exist =false;bool bouncer3Exist =false;bool bouncer4Exist =false;//Variabel keberadaan fallerbool faller1 false;bool faller2Exist =false;bool faller3Exist =false;bool faller4Exist =false;//Variabel keberadaan Riserbool riser1Exist =false;bool riser2Exist =false;bool riser3Exist =false;bool riser4Exist =false;//LT variabel keberadaanbool ltExist =false; //Boss1 Variabel keberadaanbool boss1Exist =false;//Variabel kesehatan bosint bossHealth;//Variabel atas atau bawah bouncerint bouncerOrigin;//Variabel ruang celah bouncerint bouncerGap =6;//Variabel arah bouncerbool bouncer1Arah;bool bouncer2Arah;bool bouncer4Direction;;int bouncer1xSpeed;int bouncer2xSpeed;int bouncer3xSpeed;int bouncer4xSpeed;int bouncer1ySpeed;int bouncer2ySpeed;int bouncer3ySpeed;int bouncer4ySpeed;int ySpee d =1;int xSpeed ​​=2;//variabel waktu spawn dan spawn time untuk musuh UFOunsigned long startTime;//set up timer variableunsigned long currentTime;unsigned long spawnTime =3000; //Spawn timer untuk UFO//spawn timer dan waktu spawn untuk musuh bouncerunsigned long startTime2;unsigned long currentTime2;unsigned long spawnTime2 =10000; //Spawn timer untuk bouncer//Spawn timer untuk LT mini bossunsigned long startTime3;unsigned long currentTime3;unsigned long spawnTime3; //Spawn timer untuk LT//spawn timer untuk laser UFOsunsigned long bossStartTime;unsigned long bossCurrentTime;unsigned long bossStartTime2;unsigned long bossCurrentTime2;unsigned long bossLaserTimer =1000;unsigned long bossMinionTimer =6000;//Spawn variabel enabler, diperlukan untuk berhenti sementara spawning for boss battlebool spawnEnabled;//Variabel levelint levelNumber =1;//Variabel skorint skor =0;//Variabel perkembangan levelint kills;int killsTarget;//Variabel pertarungan bos terlibatbool bossBattleStarted =false;//Variabel pendeteksi tabrakan kapal pemainDeteksi tabrakan =true;//Coin flip for UFOLaser 4 selectionint coinFlip;//Variabel suaraint buzzerPin =9;//Variabel sirene bosfloat sinVal; // Tentukan variabel untuk menyimpan nilai sinus int toneVal; // Tentukan variabel untuk menyimpan frekuensi suara void setup() { //Serial.begin(9600); //Mengatur pinMode pin suara(buzzerPin, OUTPUT); // Setel pin buzzer ke mode keluaran //set up spawntimer //setel mode pin untuk operasi joystick pinMode(naik, INPUT_PULLUP); //UP pinMode pin(bawah, INPUT_PULLUP); //BAWAH pinMode pin(kiri, INPUT_PULLUP); //pinMode pin KIRI(kanan, INPUT_PULLUP); //KANAN pinMode pin(pemicu, INPUT_PULLUP); //FIRE pin //setting led intensitas matrix.setIntensity(0);// Sesuaikan dengan kebutuhan anda matrix.setPosition(0, 3, 0); // Tampilan pertama di <0, 0> matrix.setPosition(1, 2, 0); // Tampilan kedua berada di <1, 0> matrix.setPosition(2, 1, 0); // Tampilan ketiga berada di <2, 0> matrix.setPosition(3, 0, 0); // Dan tampilan terakhir ada di <3, 0>// ... matrix.setRotation(0, 3); // Tampilan pertama adalah posisi terbalik matrix.setRotation(1, 3); matrix.setRotation(2, 3); matrix.setRotation(3, 3); // Tahan yang sama untuk tampilan terakhir matrix.fillScreen(LOW);}void loop() { if (gameStart ==false) { Ticker(true); } SpawnTimer(); Kontrol Joystick(); Kontrol Ufo(); Kontrol Penjaga(); Kontrol Laser(); Batas Layar(); Pertarungan Bos(); Kontrol Bos(); UFOLaserControl(); LTKontrol(); FallerKontrol(); RiserKontrol(); Tabrakan Kapal(); //Serial.println(ufoLas1x); matrix.write();//draw the screen delay(50);//speed delay matrix.fillScreen(LOW);//clear screen, harus dilakukan setiap frame. }Void Level(int level){ if (level ==1) { spawnEnabled =true; //Aktifkan spawningTime =3000; //Spawn timer untuk UFO'a spawnTime2 =10000000; //Spawn timer untuk bouncer disetel begitu tinggi sehingga tidak akan pernah muncul spawnTime3 =10000000; //Spawn timer untuk LT disetel begitu tinggi sehingga tidak akan pernah muncul killsTarget =10; //Menetapkan target pembunuhan. Ketika target tercapai bos harus melahirkan bossHealth =10; bosLaserTimer =1000; } if (level ==2) { spawnEnabled =true; spawnTime =3000; spawnTime2 =8000; spawnTime3 =10000000; membunuhTarget =20; bosKesehatan =15; bosLaserTimer =900; } if (level ==3) { spawnEnabled =true; spawnTime =2000; spawnTime2 =6000; spawnTime3 =8000; membunuhTarget =30; bosKesehatan =20; bosLaserTimer =800; } if (level ==4) { spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; membunuhTarget =40; bosKesehatan =25; bosLaserTimer =700; bossMinionTimer =6000; } if (level ==5) { spawnEnabled =true; spawnTime =1800; spawnTime2 =4500; spawnTime3 =6000; membunuhTarget =50; bosKesehatan =30; bosLaserTimer =600; bossMinionTimer =5500; } if (level ==6) { spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; membunuhTarget =60; bosKesehatan =35; bosLaserTimer =500; bossMinionTimer =5000; } if (level ==7) { spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; membunuhTarget =70; bosKesehatan =40; bosLaserTimer =400; bossMinionTimer =4000; } if (level ==8) { spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; membunuhTarget =80; bosKesehatan =45; bosLaserTimer =300; bossMinionTimer =3000; } if (level ==9) { spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; membunuhTarget =90; bosKesehatan =50; bosLaserTimer =200; bossMinionTimer =2000; } if (level ==10) { spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; membunuh Target =100; bosKesehatan =55; bosLaserTimer =100; bosMinionTimer =1000; } //Perlu menambahkan pesan ucapan selamat karena telah melewati level 10}void Ticker(bool resetKills) //Kode ticker dicuri tanpa malu-malu dari contoh Ticker. Digunakan untuk Judul dan skor dan gameover{ while (gameStart ==false) { for ( int i =0; i =0 &&letter>=0 ) { if ( letter  29) { shipx =29; } if (shipy <0) { shipy =0; } if (shipy> 6) { shipy =6; } if (lasExist ==true) //Saat layar mati, berhenti menggambarnya dan tandai sebagai tidak ada { if (lasx> 31) { lasExist=false; } if (lasy <0) { lasy =0; } if (lasy> 7) { lasy =7; } } //Kontrol batas layar laser UFO jika (ufoLas1x <-2) { ufoLasExist1 =false; } if (ufoLas2x <-2) { ufoLasExist2 =false; } if (ufoLas3x <-2) { ufoLasExist3 =false; } if (ufoLas4x <-2) { ufoLasExist4 =false; } //Kontrol batas layar UFO. Secara otomatis memunculkan kembali UFO pada koordinat Y acak di sisi kanan jika mereka keluar dari sisi kiri if (ufo1Exist ==true &&ufo1x <-3) { ufo1x =33; //jika UFO keluar dari sisi kiri maka akan dipindahkan ke sisi kanan lagi ufo1y =random(0,7); // akan membutuhkan semacam kode pengurutan untuk menghentikan ufo yang tumpang tindih } if (ufo2Exist ==true &&ufo2x <-3) { ufo2x =33; //jika UFO keluar dari sisi kiri maka akan dipindahkan ke sisi kanan lagi ufo2y =random(0,7); // akan membutuhkan semacam kode pengurutan untuk menghentikan ufo yang tumpang tindih } if (ufo3Exist ==true &&ufo3x <-3) { ufo3x =33; //jika UFO keluar dari sisi kiri maka akan dipindahkan ke sisi kanan lagi ufo3y =random(0,7); // akan membutuhkan semacam kode pengurutan untuk menghentikan ufo yang tumpang tindih } //Kontrol batas layar bouncer. Saat penjaga mencapai bagian atas atau bawah, variabel arah berubah. Ketika di sebelah kiri mereka dihapus dari keberadaan dan muncul kembali di lain waktu. if (bouncer1Exist ==true &&bouncer1y> 5) { bouncer1Direction =false; } else if (bouncer1Exist ==true &&bouncer1y <0) { bouncer1Direction =true; } if (bouncer2Exist ==true &&bouncer2y> 5) { bouncer2Direction =false; } else if (bouncer2Exist ==true &&bouncer2y <0) { bouncer2Direction =true; } if (bouncer3Exist ==true &&bouncer3y> 5) { bouncer3Direction =false; } else if (bouncer3Exist ==true &&bouncer3y <0) { bouncer3Direction =true; } if (bouncer4Exist ==true &&bouncer4y> 5) { bouncer4Direction =false; } else if (bouncer4Exist ==true &&bouncer4y <0) { bouncer4Direction =true; } // Jika penjaga keluar dari sisi kiri mereka menghilang sebagai despawned if (bouncer1x <0) { bouncer1Exist =false; } if (bouncer2x <0) { bouncer2Exist =false; } if (bouncer3x <0) { bouncer3Exist =false; } if (bouncer4x <0) { bouncer4Exist =false; } //LT kontrol batas layar if (ltExist ==true &<x <-6) { ltx =33; //jika LT keluar dari sisi kiri maka akan dipindahkan ke sisi kanan lagi lty =random(0,6); } //Kontrol batas layar untuk Riser if (faller1Exist ==true &&faller1y> 7) { faller1Exist =false; } if (faller2Exist ==true &&faller2y> 7) { faller2Exist =false; } if (faller3Exist ==true &&faller3y> 7) { faller3Exist =false; } if (faller4Exist ==true &&faller4y> 7) { faller4Exist =false; } //Kontrol batas layar untuk Riser if (riser1Exist ==true &&riser1y <-2) { riser1Exist =false; } if (riser2Exist ==true &&riser2y <-2) { riser2Exist =false; } if (riser3Exist ==true &&riser3y <-2) { riser3Exist =false; } if (riser4Exist ==true &&riser4y <-2) { riser4Exist =false; } }void SpawnTimer(){ if (spawnEnabled ==true) { //Counting spawn timer currentTime =millis(); //get the current time in milliseconds currentTime2 =millis();//same again for second timer currentTime3 =millis();//and again if (currentTime - startTime>=spawnTime) //Uses the currentTime, startTime and spawnTime variables to spawn enemies on set times { //spawn UFO SpawnUFO(); //reset timer startTime =currentTime; //Saves the start time of the spawn so the if statement works } if (currentTime2 - startTime2>=spawnTime2) { //spawn bouncer squad SpawnBouncer(); //reset timer startTime2 =currentTime2; //Saves the start time of the spawn so the if statement works } if (currentTime3 - startTime3>=spawnTime3) { //spawn LT SpawnLT(); //reset timer startTime3 =currentTime3; //Saves the start time of the spawn so the if statement works } } }void SpawnUFO(){ if (ufo1Exist ==false) { ufo1x =32; //Spawn off the right side of the screen ufo1y =random(0,7); //Spawn at a random Y coord ufo1Exist =true; } else if (ufo2Exist ==false) { ufo2x =32; //Spawn off the right side of the screen ufo2y =random(0,7); //Spawn at a random Y coord ufo2Exist =true; } else if (ufo3Exist ==false) { ufo3x =32; //Spawn off the right side of the screen ufo3y =random(0,7); //Spawn at a random Y coord ufo3Exist =true; } }void UfoControl(){ //If the UFO exists then draw its bitmap if (ufo1Exist ==true) { ufo1x--; matrix.drawBitmap(ufo1x,ufo1y,ufo,3,2,1); } if (ufo2Exist ==true) { ufo2x--; matrix.drawBitmap(ufo2x,ufo2y,ufo,3,2,1); } if (ufo3Exist ==true) { ufo3x--; matrix.drawBitmap(ufo3x,ufo3y,ufo,3,2,1); }}void SpawnBouncer(){ if (bouncer1Exist ==false &&bouncer2Exist ==false &&bouncer3Exist ==false &&bouncer4Exist ==false) { bouncer1x =32; //Spawn off the right side of the screen bouncer2x =bouncer1x+bouncerGap;//spawn other bouncers spaced out on the x axis bouncer3x =bouncer2x+bouncerGap; bouncer4x =bouncer3x+bouncerGap; bouncerOrigin =random(0,2); if (bouncerOrigin =0) { bouncer1y =0; //Spawn at top of screen bouncer2y =1; bouncer3y =2; bouncer4y =3; } if (bouncerOrigin =1) { bouncer1y =7; //Spawn at bottom bouncer2y =6; bouncer3y =5; bouncer4y =4; } bouncer1Exist =true; bouncer2Exist =true; bouncer3Exist =true; bouncer4Exist =true; }}void BouncerControl(){ //Bouncer move across to the left and up or down depending opn direction variable. That variable is changed in ScreenLimit() if (bouncer1Exist ==true) //If bouncer exists then increment bouncer x and y counters. These are used to slow the movement. { bouncer1xSpeed++; bouncer1ySpeed++; if (bouncer1xSpeed> xSpeed) //When the counter goes above the speed value then IF statement executes { bouncer1x--; bouncer1xSpeed =0; } if (bouncer1Direction ==true) { if (bouncer1ySpeed> ySpeed) { bouncer1y++; bouncer1ySpeed =0; } } else if (bouncer1Direction ==false) { if (bouncer1ySpeed> ySpeed) { bouncer1y--; bouncer1ySpeed =0; } } matrix.drawBitmap(bouncer1x,bouncer1y,bouncer,2,3,1); } if (bouncer2Exist ==true) { bouncer2xSpeed++; bouncer2ySpeed++; if (bouncer2xSpeed> xSpeed) { bouncer2x--; bouncer2xSpeed =0; } if (bouncer2Direction ==true) { if (bouncer2ySpeed> ySpeed) { bouncer2y++; bouncer2ySpeed =0; } } else if (bouncer2Direction ==false) { if (bouncer2ySpeed> 2) { bouncer2y--; bouncer2ySpeed =0; } } matrix.drawBitmap(bouncer2x,bouncer2y,bouncer,2,3,1); } if (bouncer3Exist ==true) { bouncer3xSpeed++; bouncer3ySpeed++; if (bouncer3xSpeed> xSpeed) { bouncer3x--; bouncer3xSpeed =0; } if (bouncer3Direction ==true) { if (bouncer3ySpeed> ySpeed) { bouncer3y++; bouncer3ySpeed =0; } } else if (bouncer3Direction ==false) { if (bouncer3ySpeed> 2) { bouncer3y--; bouncer3ySpeed =0; } } matrix.drawBitmap(bouncer3x,bouncer3y,bouncer,2,3,1); } if (bouncer4Exist ==true) { bouncer4xSpeed++; bouncer4ySpeed++; if (bouncer4xSpeed> xSpeed) { bouncer4x--; bouncer4xSpeed =0; } if (bouncer4Direction ==true) { if (bouncer4ySpeed> 2) { bouncer4y++; bouncer4ySpeed =0; } } else if (bouncer4Direction ==false) { if (bouncer4ySpeed> ySpeed) { bouncer4y--; bouncer4ySpeed =0; } } matrix.drawBitmap(bouncer4x,bouncer4y,bouncer,2,3,1); }}void SpawnFaller(){ if (faller1Exist ==false &&faller2Exist ==false &&faller3Exist ==false &&faller4Exist ==false) { faller1x =15; //Spawn above the boss off the top of the screen faller2x =faller1x+bouncerGap;//spawn other bouncers spaced out on the x axis faller3x =faller2x+bouncerGap; faller4x =faller3x+bouncerGap; faller1y =-1; //Spawn at top of screen faller2y =-2; faller3y =-3; faller4y =-4; faller1Exist =true; faller2Exist =true; faller3Exist =true; faller4Exist =true; }}void FallerControl(){ //Fallers are spawned by the Boss during battle after level 4. Timer for spawning is in the BossControl function. //Control routines for faller 1 if (faller1Exist ==true) //If faller exists then increment fallerSpeed x and y counters. These are used to slow the movement. { faller1Speedx++; faller1Speedy++; if (faller1Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { faller1x--; faller1Speedx =0; } if (faller1Speedy> fallerySpeedTarget) { faller1y++; faller1Speedy =0; } matrix.drawBitmap(faller1x,faller1y,faller,3,3,1); }// Control routines for faller 2 if (faller2Exist ==true) //If faller exists then increment fallerSpeed x and y counters. These are used to slow the movement. { faller2Speedx++; faller2Speedy++; if (faller2Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { faller2x--; faller2Speedx =0; } if (faller2Speedy> fallerySpeedTarget) { faller2y++; faller2Speedy =0; } matrix.drawBitmap(faller2x,faller2y,faller,3,3,1); } // Control routines for faller 3 if (faller3Exist ==true) //If faller exists then increment fallerSpeed x and y counters. These are used to slow the movement. { faller3Speedx++; faller3Speedy++; if (faller3Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { faller3x--; faller3Speedx =0; } if (faller3Speedy> fallerySpeedTarget) { faller3y++; faller3Speedy =0; } matrix.drawBitmap(faller3x,faller3y,faller,3,3,1); } // Control routines for faller 4 if (faller4Exist ==true) //If faller exists then increment fallerSpeed x and y counters. These are used to slow the movement. { faller4Speedx++; faller4Speedy++; if (faller4Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { faller4x--; faller4Speedx =0; } if (faller4Speedy> fallerySpeedTarget) { faller4y++; faller4Speedy =0; } matrix.drawBitmap(faller4x,faller4y,faller,3,3,1); } }void SpawnRiser(){ if (riser1Exist ==false &&riser2Exist ==false &&riser3Exist ==false &&riser4Exist ==false) { riser1x =15; //Spawn above the boss off the top of the screen riser2x =riser1x+bouncerGap;//spawn other bouncers spaced out on the x axis riser3x =riser2x+bouncerGap; riser4x =riser3x+bouncerGap; riser1y =7; //Spawn at Bottom of screen riser2y =8; riser3y =9; riser4y =10; riser1Exist =true; riser2Exist =true; riser3Exist =true; riser4Exist =true; }}void RiserControl(){ //Risers are spawned by the Boss during battle after level 5. Timer for spawning is in the BossControl function. //Control routines for riser 1 if (riser1Exist ==true) //If riser exists then increment riserSpeed x and y counters. These are used to slow the movement. { riser1Speedx++; riser1Speedy++; if (riser1Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { riser1x--; riser1Speedx =0; } if (riser1Speedy> fallerySpeedTarget) { riser1y--; riser1Speedy =0; } matrix.drawBitmap(riser1x,riser1y,riser,3,3,1); } //Control routines for riser 2 if (riser2Exist ==true) //If riser exists then increment riserSpeed x and y counters. These are used to slow the movement. { riser2Speedx++; riser2Speedy++; if (riser2Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { riser2x--; riser2Speedx =0; } if (riser2Speedy> fallerySpeedTarget) { riser2y--; riser2Speedy =0; } matrix.drawBitmap(riser2x,riser2y,riser,3,3,1); } //Control routines for riser 3 if (riser3Exist ==true) //If riser exists then increment riserSpeed x and y counters. These are used to slow the movement. { riser3Speedx++; riser3Speedy++; if (riser3Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { riser3x--; riser3Speedx =0; } if (riser3Speedy> fallerySpeedTarget) { riser3y--; riser3Speedy =0; } matrix.drawBitmap(riser3x,riser3y,riser,3,3,1); } //Control routines for riser 4 if (riser4Exist ==true) //If riser exists then increment riserSpeed x and y counters. These are used to slow the movement. { riser4Speedx++; riser4Speedy++; if (riser4Speedx> fallerxSpeedTarget) //When the counter goes above the speed value then IF statement executes { riser4x--; riser4Speedx =0; } if (riser4Speedy> fallerySpeedTarget) { riser4y--; riser4Speedy =0; } matrix.drawBitmap(riser4x,riser4y,riser,3,3,1); }}void SpawnLT(){ if (ltExist ==false) { ltx =32; //Spawn off the right side of the screen lty =random(0,6); //Spawn at a random Y coord ltExist =true; }}void LTControl(){ //If the UFO exists then draw its bitmap if (ltExist ==true) { ltxSpeed++; if (ltxSpeed ==ltxSpeedTarget) { ltxSpeed =0; ltx--; } matrix.drawBitmap(ltx, lty, LT, 6, 3, 1); } if (ltHealth <=0) { ltExist =false; Boom(ltx,lty,false,3); //Calls Boom() function to add score. Kills are added manually below. kills=kills+3; ltHealth =3; }}void BossBattle()//Sounds the warning siren then spawns boss. Still need to finish movement{ if (kills> killsTarget &&bossBattleStarted ==false) { bossBattleStarted =true; spawnEnabled =false; //Turns off spawning for other UFO types for(int i =5; i> 0; i--) //Play alarm sound { for (int x =0; x <360; x++) // X from 0 degree->360 degree { sinVal =sin(x * (PI / 180)); // Calculate the sine of x toneVal =2000 + sinVal * 500; // Calculate sound frequency according to the sine of x tone(buzzerPin, toneVal); // Output sound frequency to buzzerPin delay(1); } } tone(buzzerPin, 0, 5); //This is to stop the tone sound. It sticks around otherwise. if (boss1Exist ==false) { matrix.drawBitmap(bossx, bossy, boss, 8 ,8 ,1); boss1Exist =true; bossStartTime =millis(); //Set start timer for boss weapons bossStartTime =millis(); //Set start timer for boss minions } }}void BossControl(){ if (boss1Exist ==true) { bossxSpeed++; if (bossxSpeed> bossxSpeedTarget &&bossx> 24) //When the counter goes above the speed value then IF statement executes { bossx--; //Move the boss x cords to the left bossxSpeed =0; } matrix.drawBitmap(bossx, bossy, boss, 8, 8, 1); //Draw the boss bitmap at the new coords if (bossx ==24) { //Counting shoot timer bossCurrentTime =millis(); //get the current time in milliseconds bossCurrentTime2 =millis(); if (bossCurrentTime - bossStartTime>=bossLaserTimer) //startTimer is set in BossBattle function { //shoot laser selection =random(1,5);//Select laser cannon at random while (selection ==lastSelection)//While loop to ensure that the same laser isnt fired twice in a row too quick. Prevents timing gaps { selection =random(1,5); } UFOLaserShoot(selection);//Call UFOLaserShoot function with cannon selection //reset timer bossStartTime =bossCurrentTime; //Saves the start time of the spawn so the if statement works } if (levelNumber>=4) { if (bossCurrentTime2 - bossStartTime2>=bossMinionTimer) //startTimer is set in BossBattle function { //Select minions and spawn them minionSelection =random(1,3); if (minionSelection ==1) { SpawnFaller(); } if (minionSelection ==2) { SpawnRiser(); } //reset timer bossStartTime2 =bossCurrentTime2; //Saves the start time of the spawn so the if statement works } } } //Boss health counter hits zero, trigger boss death and new level if (bossHealth <=0) { boss1Exist =false; //Boss no longer exists Boom(bossx,bossy,false,5);//Calls Boom() function to add score matrix.fillScreen(LOW); //Clear screen for (int i =5; i> 0; i--) { matrix.drawBitmap(bossx, bossy, bossBoom1 ,8 ,8, 1); //Boss explosion first frame tone(buzzerPin, 100,100); //Play sound delay(200); //Wait //matrix.fillScreen(LOW); //Clear screen matrix.drawBitmap(bossx, bossy, bossBoom2 ,8 ,8, 1); //Boss explosion second frame tone(buzzerPin, 200,100); //Play second sound delay(200); //Wait } tone(buzzerPin, 1, 1);//Stop beep bossx=39; //Move bossx back to 32 matrix.fillScreen(LOW); //clear the screen gameStart =false; //Mark game as stopped levelNumber++; //increment level if (levelNumber> 10) { GameOver(1); return; } tape ="Level "; //Prepare new tape for ticker function tape +=levelNumber; //Adding level number to ticker string tape +=" Score:"; tape +=score; ufoLasExist1 =false; ufoLasExist2 =false; ufoLasExist3 =false; ufoLasExist4 =false; faller1Exist =false; faller2Exist =false; faller3Exist =false; faller4Exist =false; riser1Exist =false; riser2Exist =false; riser3Exist =false; riser4Exist =false; ufoLas1x=bossx; ufoLas2x=bossx; ufoLas3x=bossx; ufoLas4x=bossx; Ticker(true); //Call ticker function to show score and new level } }}void UFOLaserShoot(int selection){ if (selection ==1) { if (ufoLasExist1 ==false)//Check to see if the UFO laser already exists { ufoLas1x=bossx+1; //spawn laser in the middle ufoLas1y=bossy+4; ufoLasExist1=true; tone(buzzerPin, 200,100);//play laser sound } } if (selection ==2) { if (ufoLasExist2 ==false) { ufoLas2x=bossx+2; //spawn laser at the top side ufoLas2y=bossy+1; ufoLasExist2=true; tone(buzzerPin, 300,100);//play laser sound } } if (selection ==3) { if (ufoLasExist3 ==false) { ufoLas3x=bossx+2; //spawn laser at the bottom side ufoLas3y=bossy+7; ufoLasExist3=true; tone(buzzerPin, 400,100);//play laser sound } } if (selection ==4) { if (ufoLasExist4 ==false)//Planning to make this one random { coinFlip =random(0,2); if (coinFlip ==0) { ufoLas4x=bossx+2; ufoLas4y=bossy+2; ufoLasExist4=true; tone(buzzerPin, 500,100);//play laser sound } if (coinFlip ==1) { ufoLas4x=bossx+2; ufoLas4y=bossy+6; ufoLasExist4=true; tone(buzzerPin, 500,100);//play laser sound } } } }void UFOLaserControl(){ if (ufoLasExist1 ==true) { ufoLas1x--; matrix.drawBitmap(ufoLas1x, ufoLas1y, ufoLaser, 2, 1, 1); } if (ufoLasExist2 ==true) { ufoLas2x--; matrix.drawBitmap(ufoLas2x, ufoLas2y, ufoLaser, 2, 1, 1); } if (ufoLasExist3 ==true) { ufoLas3x--; matrix.drawBitmap(ufoLas3x, ufoLas3y, ufoLaser, 2, 1, 1); } if (ufoLasExist4 ==true) { ufoLas4x--; matrix.drawBitmap(ufoLas4x, ufoLas4y, ufoLaser, 2, 1, 1); } }void ShipCollision(){ if (gameStart ==true &&collisionDetection ==true) { //Collision detection for line 0 of ship //Collision detection for UFO1. Dont need line 0 of UFO because line 0 of ship cannot touch it anyway. if (ufo1Exist ==true) { for (int a =0; a <2; a++) { if (shipx ==ufo1x+a &&shipy ==ufo1y+1) ///Line 1 { ShipHit(); } } //Collision detection for line 1 of ship.................. //Contains extra for loop to loop through all the ship line 1 pixels //Collision detection for UFO1 for (int b =0; b <1; b++) //Had b <2 and the collision detection worked but looked wonky when moving towards ufos { for (int a =0; a <2; a++) { if (shipx+b ==ufo1x+a &&shipy+1 ==ufo1y+1) //Line 1 { ShipHit(); } } for (int a =1; a <3; a++) { if (shipx+b ==ufo1x+a &&shipy+1 ==ufo1y) //Line 0 { ShipHit(); } } } } //Collision detection for line 0 of ship //collision detection for UFO2 if (ufo2Exist ==true) { for (int a =0; a <2; a++) { if (shipx ==ufo2x+a &&shipy ==ufo2y+1) ///Line 1 { ShipHit(); } } //Collision detection for line 1 of ship //Collision detection for UFO2 for (int b =0; b <1; b++) { for (int a =0; a <2; a++) { if (shipx+b ==ufo2x+a &&shipy+1 ==ufo2y+1) //Line 1 { ShipHit(); } } for (int a =1; a <3; a++) { if (shipx+b ==ufo2x+a &&shipy+1 ==ufo2y) //Line 0 { ShipHit(); } } } } //Collision detection for line 0 of ship //Collision detection for UFO3 if (ufo3Exist ==true) { for (int a =0; a <2; a++) { if (shipx ==ufo3x+a &&shipy ==ufo3y+1) ///Line 1 { ShipHit(); } } //Contains extra for loop to loop through all the ship line 1 pixels //Collision detection for UFO3 for (int b =0; b <1; b++) { for (int a =0; a <2; a++) { if (shipx+b ==ufo3x+a &&shipy+1 ==ufo3y+1) //Line 1 { ShipHit(); } } for (int a =1; a <3; a++) { if (shipx+b ==ufo3x+a &&shipy+1 ==ufo3y) //Line 0 { ShipHit(); } } } } //Collision detection for line 0 of ship //Collision detection for Bouncer1. Don't need line 0 and 1 becuase line 0 and 1 of bouncers and line 0 of ship never meet if (bouncer1Exist ==true) { for (int a =1; a <2; a++) { if (shipx ==bouncer1x+a &&shipy ==bouncer1y+2) //Line 2 { ShipHit(); } } //Collision detection for Bouncer1 and Line 1 of ship for (int b =0; b <1; b++) { for (int a =1; a <2; a++) { if (shipx+b ==bouncer1x+a &&shipy+1 ==bouncer1y) //Line 0 { ShipHit(); } } for (int a =0; a <2; a++) { if (shipx+b ==bouncer1x+a &&shipy+1 ==bouncer1y+1) //Line 1 { ShipHit(); } } for (int a =1; a <2; a++) { if (shipx+b ==bouncer1x+a &&shipy+1 ==bouncer1y+2) //Line 2 { ShipHit(); } } } } //Collision detection for line 0 of ship //Collision detection for Bouncer2. Don't need line 0 and 1 because line 0 and 1 of bouncers and line 0 of ship never meet if (bouncer2Exist ==true) { for (int a =1; a <2; a++) { if (shipx ==bouncer2x+a &&shipy ==bouncer2y+2) //Line 2 { ShipHit(); } } //Collision detection for Bouncer2 and Line 1 of ship for (int b =0; b <1; b++) { for (int a =1; a <2; a++) { if (shipx+b ==bouncer2x+a &&shipy+1 ==bouncer2y) //Line 0 { ShipHit(); } } for (int a =0; a <2; a++) { if (shipx+b ==bouncer2x+a &&shipy+1 ==bouncer2y+1) //Line 1 { ShipHit(); } } for (int a =1; a <2; a++) { if (shipx+b ==bouncer2x+a &&shipy+1 ==bouncer2y+2) //Line 2 { ShipHit(); } } } } //Collision detection for line 0 of ship //Collision detection for Bouncer3. Don't need line 0 and 1 becuase line 0 and 1 of bouncers and line 0 of ship never meet if (bouncer3Exist ==true) { for (int a =1; a <2; a++) { if (shipx ==bouncer3x+a &&shipy ==bouncer3y+2) //Line 2 { ShipHit(); } } //Collision detection for Bouncer3 and Line 1 of ship for (int b =0; b <1; b++) { for (int a =1; a <2; a++) { if (shipx+b ==bouncer3x+a &&shipy+1 ==bouncer3y) //Line 0 { ShipHit(); } } for (int a =0; a <2; a++) { if (shipx+b ==bouncer3x+a &&shipy+1 ==bouncer3y+1) //Line 1 { ShipHit(); } } for (int a =1; a <2; a++) { if (shipx+b ==bouncer3x+a &&shipy+1 ==bouncer3y+2) //Line 2 { ShipHit(); } } } } //Collision detection for line 0 of ship //Collision detection for Bouncer4. Don't need line 0 and 1 becuase line 0 and 1 of bouncers and line 0 of ship never meet if (bouncer4Exist ==true) { for (int a =1; a <2; a++) { if (shipx ==bouncer4x+a &&shipy ==bouncer4y+2) //Line 2 { ShipHit(); } } //Collision detection for Bouncer4 and Line 1 of ship for (int b =0; b <1; b++) { for (int a =1; a <2; a++) { if (shipx+b ==bouncer4x+a &&shipy+1 ==bouncer4y) //Line 0 { ShipHit(); } } for (int a =0; a <2; a++) { if (shipx+b ==bouncer4x+a &&shipy+1 ==bouncer4y+1) //Line 1 { ShipHit(); } } for (int a =1; a <2; a++) { if (shipx+b ==bouncer4x+a &&shipy+1 ==bouncer4y+2) //Line 2 { ShipHit(); } } } } //Dont need collision detection for lines 0 and 1 of LT and line 0 of ship because they cant touch anyway//Collision detection routines for LT if (ltExist ==true) { for (int a =2; a <4; a++) //Line 2 { if (shipx ==ltx+a &&shipy ==lty+2) { ShipHit(); } } //Collision detection routines for LT and Ship line 1 for (int b =0; b <2; b++) { for (int a =1; a <4; a++) //Top line 0 { if (shipx+b ==ltx+a &&shipy+1 ==lty) { ShipHit(); } } for (int a =0; a <5; a++) //Line 1 { if (shipx+b ==ltx+a &&shipy+1 ==lty+1) { ShipHit(); } } for (int a =2; a <4; a++) //Line 2 { if (shipx+b ==ltx+a &&shipy+1 ==lty+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and line 0 and 1 of fallers because they will never touch//Collision detection for Faller 1 if (faller1Exist ==true) { for (int a =0; a <3; a++) //Line 2 { if (shipx ==faller1x+a &&shipy ==faller1y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Faller 1 and ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <2; a++) //Top Line 0 { if (shipx+b ==faller1x+a &&shipy+1 ==faller1y) { ShipHit(); } } for (int a =0; a <3; a++) //Line 1 { if (shipx+b ==faller1x+a &&shipy+1 ==faller1y+1) { ShipHit(); } } for (int a =0; a <3; a++) //Line 2 { if (shipx+b ==faller1x+a &&shipy+1 ==faller1y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and line 0 and 1 of fallers because they will never touch //Collision detection for Faller 2 if (faller2Exist ==true) { for (int a =0; a <3; a++) //Line 2 { if (shipx ==faller2x+a &&shipy ==faller2y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Faller 2 and ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <2; a++) //Top Line 0 { if (shipx+b ==faller2x+a &&shipy+1 ==faller2y) { ShipHit(); } } for (int a =0; a <3; a++) //Line 1 { if (shipx+b ==faller2x+a &&shipy+1 ==faller2y+1) { ShipHit(); } } for (int a =0; a <3; a++) //Line 2 { if (shipx+b ==faller2x+a &&shipy+1 ==faller2y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and line 0 and 1 of fallers because they will never touch //Collision detection for Faller 3 if (faller3Exist ==true) { for (int a =0; a <3; a++) //Line 2 { if (shipx ==faller3x+a &&shipy ==faller3y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Faller 3 and ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <2; a++) //Top Line 0 { if (shipx+b ==faller3x+a &&shipy+1 ==faller3y) { ShipHit(); } } for (int a =0; a <3; a++) //Line 1 { if (shipx+b ==faller3x+a &&shipy+1 ==faller3y+1) { ShipHit(); } } for (int a =0; a <3; a++) //Line 2 { if (shipx+b ==faller3x+a &&shipy+1 ==faller3y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and line 0 and 1 of fallers because they will never touch //Collision detection for Faller 4 if (faller4Exist ==true) { for (int a =0; a <3; a++) //Line 2 { if (shipx ==faller4x+a &&shipy ==faller4y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Faller 4 and ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <2; a++) //Top Line 0 { if (shipx+b ==faller4x+a &&shipy+1 ==faller4y) { ShipHit(); } } for (int a =0; a <3; a++) //Line 1 { if (shipx+b ==faller4x+a &&shipy+1 ==faller4y+1) { ShipHit(); } } for (int a =0; a <3; a++) //Line 2 { if (shipx+b ==faller4x+a &&shipy+1 ==faller4y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and lines 0 and 1 of risers because they'll never touch //Collision detection for Riser 1 if (riser1Exist ==true) { for (int a =0; a <1; a++) //Line 2 { if (shipx ==riser1x+a &&shipy ==riser1y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Riser 1 and Ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <3; a++) //Top Line 0 { if (shipx+b ==riser1x+a &&shipy+1 ==riser1y) { ShipHit(); } } for (int a =0; a <2; a++) //Line 1 { if (shipx+b ==riser1x+0 &&shipy+1 ==riser1y+1) { ShipHit(); } } for (int a =0; a <1; a++) //Line 2 { if (shipx+b ==riser1x+a &&shipy+1 ==riser1y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and lines 0 and 1 of risers because they'll never touch //Collision detection for Riser 2 if (riser2Exist ==true) { for (int a =0; a <1; a++) //Line 2 { if (shipx ==riser2x+a &&shipy ==riser2y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Riser 2 and Ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <3; a++) //Top Line 0 { if (shipx+b ==riser2x+a &&shipy+1 ==riser2y) { ShipHit(); } } for (int a =0; a <2; a++) //Line 1 { if (shipx+b ==riser2x+0 &&shipy+1 ==riser2y+1) { ShipHit(); } } for (int a =0; a <1; a++) //Line 2 { if (shipx+b ==riser2x+a &&shipy+1 ==riser2y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and lines 0 and 1 of risers because they'll never touch //Collision detection for Riser 3 if (riser3Exist ==true) { for (int a =0; a <1; a++) //Line 2 { if (shipx ==riser3x+a &&shipy ==riser3y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Riser 3 and Ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <3; a++) //Top Line 0 { if (shipx+b ==riser3x+a &&shipy+1 ==riser3y) { ShipHit(); } } for (int a =0; a <2; a++) //Line 1 { if (shipx+b ==riser3x+0 &&shipy+1 ==riser3y+1) { ShipHit(); } } for (int a =0; a <1; a++) //Line 2 { if (shipx+b ==riser3x+a &&shipy+1 ==riser3y+2) { ShipHit(); } } } } //Dont need collision detection between line 0 of ship and lines 0 and 1 of risers because they'll never touch //Collision detection for Riser 4 if (riser4Exist ==true) { for (int a =0; a <1; a++) //Line 2 { if (shipx ==riser4x+a &&shipy ==riser4y+2) //Checks to see if laser coords match bouncer bitmap coords, including the pixels just behind them. { ShipHit(); } } //Collision detection for Riser 4 and Ship line 1 for (int b =0; b <1; b++) { for (int a =0; a <3; a++) //Top Line 0 { if (shipx+b ==riser4x+a &&shipy+1 ==riser4y) { ShipHit(); } } for (int a =0; a <2; a++) //Line 1 { if (shipx+b ==riser4x+0 &&shipy+1 ==riser4y+1) { ShipHit(); } } for (int a =0; a <1; a++) //Line 2 { if (shipx+b ==riser4x+a &&shipy+1 ==riser4y+2) { ShipHit(); } } } } //No collision detection for line 0 of ship and boss because they'll never touch anyway. //Collision detection for Boss abd Ship line 1 if (boss1Exist ==true) { for (int b =0; b <1; b++) { for (int a =3; a <5; a++ ) //Top line 0 { if (shipx+b ==bossx+a &&shipy+1 ==bossy) { ShipHit(); } } for (int a =2; a <5; a++) //Line 1 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+1) { ShipHit(); } } for (int a =1; a <6; a++) //Line 2 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+2) { ShipHit(); } } for (int a =0; a <7; a++) //Line 3 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+3) { ShipHit(); } } for (int a =2; a <6; a++) //Line 4 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+4) { ShipHit(); } } for (int a =0; a <7; a++) //Line 5 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+5) { ShipHit(); } } for (int a =1; a <6; a++) //Line 6 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+6) { ShipHit(); } } for (int a =2; a <5; a++) //Line 7 { if (shipx+b ==bossx+a &&shipy+1 ==bossy+7) { ShipHit(); } } } } //Collision detection for UFO Lasers. They only have line 0 if (ufoLasExist1 ==true) { for (int a =0; a <1; a++) { if (shipx ==ufoLas1x+a &&shipy ==ufoLas1y) ///Line 0 { ShipHit(); } } for (int b =0; b <1; b++) { for (int a =0; a <1; a++) { if (shipx+b ==ufoLas1x+a &&shipy+1 ==ufoLas1y) ///Line 1 { ShipHit(); } } } } //Collision detection for UFO Lasers. They only have line 0 if (ufoLasExist2 ==true) { for (int a =0; a <1; a++) { if (shipx ==ufoLas2x+a &&shipy ==ufoLas2y) ///Line 0 { ShipHit(); } } for (int b =0; b <1; b++) { for (int a =0; a <1; a++) { if (shipx+b ==ufoLas2x+a &&shipy+1 ==ufoLas2y) ///Line 1 { ShipHit(); } } } } //Collision detection for UFO Lasers. They only have line 0 if (ufoLasExist3 ==true) { for (int a =0; a <1; a++) { if (shipx ==ufoLas3x+a &&shipy ==ufoLas3y) ///Line 0 { ShipHit(); } } for (int b =0; b <1; b++) { for (int a =0; a <1; a++) { if (shipx+b ==ufoLas3x+a &&shipy+1 ==ufoLas3y) ///Line 1 { ShipHit(); } } } } //Collision detection for UFO Lasers. They only have line 0 if (ufoLasExist4 ==true) { for (int a =0; a <1; a++) { if (shipx ==ufoLas4x+a &&shipy ==ufoLas4y) ///Line 0 { ShipHit(); } } for (int b =0; b <1; b++) { for (int a =0; a <1; a++) { if (shipx+b ==ufoLas4x+a &&shipy+1 ==ufoLas4y) ///Line 1 { ShipHit(); } } } } }}void GameOver(int gameStatus){ spawnEnabled =false; if (gameStatus ==0) //Game over due to death { tape ="Game Over :( Your score was "; tape +=score; // Ticker(true); tape ="UFO ATTACK! - Press fire to start "; lives =5; score =0; levelNumber =1; } else if (gameStatus ==1)//Game over due to winning level 10 { tape ="Congratulations! You defeated the alien invasion :) Your total score was "; tape +=score; //Ticker(true); lives =5; score =0; levelNumber =1; } else if (gameStatus ==2)//Life lost { tape ="Ship destroyed! "; tape +="Lives left:"; tape +=lives; } ufo1Exist =false; ufo2Exist =false; ufo3Exist =false; bouncer1Exist =false; bouncer2Exist =false; bouncer3Exist =false; bouncer4Exist =false; faller1Exist =false; faller2Exist =false; faller3Exist =false; faller4Exist =false; riser1Exist =false; riser2Exist =false; riser3Exist =false; riser4Exist =false; ltExist =false; boss1Exist =false; gameStart =false; ufoLasExist1 =false; ufoLasExist2 =false; ufoLasExist3 =false; ufoLasExist4 =false; ufoLas1x =34; ufoLas1y =34; ufoLas2x =34; ufoLas2y =34; ufoLas3x =34; ufoLas3y =34; ufoLas4x =34; ufoLas4y =34; ufo1x =34; ufo2x =34; ufo3x =34; bouncer1x =34; bouncer2x =34; bouncer3x =34; bouncer4x =34; faller1x =34; faller2x =34; faller3x =34; faller4x =34; riser1x =34; riser2x =34; riser3x =34; riser4x =34; ltx =34; bossx =34; shipx =0; shipy =3; lasExist =false; if (gameStatus ==2){ Ticker(false);}else if (gameStatus ==0 || gameStatus ==1){ Ticker(true);}}void ShipHit(){ lives--; for (int i =5000; i> 1; i =i-5) { tone(buzzerPin, i, 1); penundaan (1); } if (lives> 0) { GameOver(2); } else if (lives <=0) { GameOver(0); }}

Skema

Wiring Schematic for UFO Attack game.

Proses manufaktur

  1. Arduino Digital Dice
  2. Api Dari Air
  3. Arduclock RGB 3D
  4. MyRiver
  5. Iron Man
  6. Game Joystick
  7. Temukan Saya
  8. Arduino 3D-Printed Robotic Arm
  9. Detektor Jangkauan Portabel
  10. Kontrol Humidifier Arduino