コード
UFO攻撃コード C / C ++
/ * UFO攻撃! -アンソニークラークによって書かれました。 * // *一部の特定のコード行がオープンソースのサンプルプログラムから削除されました。これらはコメントでラベル付けされています。* /#include #include #include const int pinCS =10; // CSをこのピンに接続し、DINをMOSIに、CLKをSCKに接続します(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 ufo [] PROGMEM ={0x40、0xe0、0x00、0x00、0x00、0x00、0x00、0x00}; // '爆発'、8x8pxconst unsignedchar爆発[] PROGMEM ={0xe0、0xe0、0xe0、0x00、0x00、0x00、0x00、0x00}; // 'バウンサー'、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}; // 'ライザー '、8x8pxconst unsignedcharライザー[] PROGMEM ={0xe0、0xc0、0x80、0x00、 0x00、0x00、0x00、0x00}; // 'LT'、8x8pxconst unsigned char LT [] PROGMEM ={0x78、0xfc、0x30、0x00、0x00、0x00、0x00、0x00}; // 'UFOレーザー'、8x8pxconst unsigned char ufoLaser [] PROGMEM ={0xc0、0x00、0x00、0x00、0x00、0x00、0x00、0x00}; // 'BossBoom'、8x8pxconst unsigned char bossBoom1 [] PROGMEM ={0xaa、0x55、0xa2、0x51、0x8 、0xaa、0x55}; // 'BossBoom2'、8x8pxconst unsigned char bossBoom2 [] PROGMEM ={0x55、0xaa、0x45、0x8a、0x51、0xa2、0x55、0xaa}; //ゲーム開始variableboolgameStart =false; //定義ジョイスティックコントロールピンintup =2; int down =3; int left =4; int right =5; int trigger =6; //タイトルティッカー変数..ティッカーの例から恥知らずに盗まれました:PStringtape ="UFO ATTACK! -発射を押して開始します "; int wait =40; //ミリ秒単位intspacer =1; int width =5+スペーサー; //フォント幅は5ピクセル//出荷およびレーザー位置変数intshipx =0; int shipy =0; int lasx; int lasy; // Lives counterint lifes =5; // laserexistensevariablebool lasExist; // UFOレーザー位置変数intufoLas1x; int ufoLas1y; int ufoLas2x; int ufoLas2y; int ufoLas3x; int ufoLas3y; int ufoLas4x; // UFOレーザー存在変数boolufoLasExist1 =false; bool ufoLasExist2 =false; bool ufoLasExist3 =false; bool ufoLasExist4 =false; // UFOレーザー選択変数intselection; int lastSelection; //ボスミニオン選択variableintminionSelection; // UFO位置変数int ufo1x; int ufo1y; int ufo2x; int ufo2y; int ufo3x; int ufo3y; //バウンサー位置変数intbouncer1x; int bouncer1y; int bouncer2x; int bouncer2y; int bouncer3x; int bouncer3y; int bouncer4x; int bouncer4y faller1x; int faller1y; int faller2x; int faller2y; int faller3x; int faller3y; int faller4x; i nt faller4y; //フォールラー速度変数intfaller1Speedx; int faller1Speedy; int faller2Speedx; int faller2Speedy; int faller3Speedx; int faller3Speedy; int faller4Speedx; int faller4Speedy; int fallerxSpeedTarget =2; int fallerySpeedTarget =2; //ライザー位置変数intriser1; intriser2x; intriser2y; intriser3x; intriser3y; intriser4x; intriser4y; //ライザー速度変数intriser1Speedx; intriser1Speedy; intriser2Speedx; intriser2Speedy; intriser3Speedx; intriser3Speedy; intriser4Speedx; intriser position variableint ltx; int lty; // LT health variableint ltHealth =3; // LT speed variableint ltxSpeed =0; int ltxSpeedTarget =2; //ボス位置variableintbossx =34; int bossy =0; //ボス移動速度variablesint bossxSpeed =0; int bossySpeed =0; int bossxSpeedTarget =3; int bossySpeedTarget =1; // UFO存在変数boolufo1Exist =false; bool ufo2Exist =false; bool ufo3Exist =false; //バウンサー存在変数boolbouncer1Exist =false; bool bouncer2Exist =false; bool bouncer3Exist =false; bool bouncer4Exist =false; // Faller存在変数boolfaller false; bool faller2Exist =false; bool faller3Exist =false; bool faller4Exist =false; //ライザー存在変数boorlizer1Exist =false; bool riser2Exist =false; bool riser3Exist =false; bool riser4Exist =false; // LT存在変数booltExist =false; // Boss1 Existence variablebool boss1Exist =false; // Boss health variableint bossHealth; //バウンサーtopまたはbottomvariableint bouncerOrigin; //バウンサーギャップスペースvariableintbouncerGap =6; //バウンサー方向変数boolbouncer1Direction; bool bouncer2Direction; bool bouncer3Direction;; int bouncer1xSpeed; int bouncer2xSpeed; int bouncer3xSpeed; int bouncer4xSpeed; int bouncer1ySpeed; int bouncer2ySpeed; int bouncer3ySpeed; int bouncer4ySpeed; int ySpee d =1; int xSpeed =2; // UFO敵のスポーンタイマーとスポーン時間変数unsignedlong startTime; //タイマー変数の設定unsignedlong currentTime; unsigned long spawnTime =3000; // UFOのスポーンタイマー//バウンサーの敵のスポーンタイマーとスポーンタイムunsignedlong startTime2; unsigned long currentTime2; unsigned long spawnTime2 =10000; //バウンサーのスポーンタイマー// LTミニボスのスポーンタイマーunsignedlong startTime3; unsigned long currentTime3; unsigned long spawnTime3; // LTのスポーンタイマー// UFOのスポーンタイマーsunsignedlong bossStartTime; unsigned long bossCurrentTime; unsigned long bossStartTime2; unsigned long bossCurrentTime2; unsigned long bossLaserTimer =1000; unsigned long bossMinionTimer =6000; //スポーンイネーブラー変数、一時的に停止する必要がありますボスバトルブールspawnEnabledのスポーン; //レベルvariableintlevelNumber =1; //スコアvariableintスコア=0; //レベルプログレッションvariablesintkills; int killsTarget; //ボスバトルエンゲージ変数boolbossBattleStarted =false; //プレイヤーシップ衝突検出variableboolcollisionDetection =true; // UFOLaser4のコインフリップselectionintcoinFlip; //サウンド変数intbuzzerPin =9; //ボスサイレン変数floatsinVal; //正弦値を保存する変数を定義しますinttoneVal; //サウンド周波数を保存する変数を定義しますvoidsetup(){// Serial.begin(9600); //サウンドピンの設定pinMode(buzzerPin、OUTPUT); //ブザーピンを出力モードに設定します//スポーンタイマーを設定します//ジョイスティック操作のピンモードを設定しますpinMode(up、INPUT_PULLUP); // UPピンpinMode(down、INPUT_PULLUP); // DOWNピンpinMode(left、INPUT_PULLUP); //左ピンpinMode(right、INPUT_PULLUP); //右ピンpinMode(trigger、INPUT_PULLUP); // FIREピン// LED強度の設定matrix.setIntensity(0); //自分のニーズに合わせて調整matrix.setPosition(0、3、0); //最初の表示は<0、0>にありますmatrix.setPosition(1、2、0); // 2番目の表示は<1、0>にありますmatrix.setPosition(2、1、0); // 3番目の表示は<2、0>にありますmatrix.setPosition(3、0、0); //そして最後の表示は<3、0> // ... matrix.setRotation(0、3); //最初の表示は逆さまの位置ですmatrix.setRotation(1、3); matrix.setRotation(2、3); matrix.setRotation(3、3); //最後の表示も同じですmatrix.fillScreen(LOW);} void loop(){if(gameStart ==false){Ticker(true); } SpawnTimer(); JoystickControl(); UfoControl(); BouncerControl(); LaserControl(); ScreenLimit(); BossBattle(); BossControl(); UFOLaserControl(); LTControl(); FallerControl(); RiserControl(); ShipCollision(); //Serial.println(ufoLas1x); matrix.write(); //画面の遅延を描画しますdelay(50); //速度の遅延matrix.fillScreen(LOW); //画面をクリアし、フレームごとに実行する必要があります。 } void Level(int level){if(level ==1){spawnEnabled =true; //スポーンを有効にするspawnTime =3000; // UFOのスポーンタイマー 'a spawnTime2 =10000000; //バウンサーのスポーンタイマーが非常に高く設定されているため、spawnTime3 =10000000; // LTのスポーンタイマーが非常に高く設定されているため、表示されませんkillsTarget =10; //キルターゲットを設定します。ターゲットに到達したら、ボスをスポーンする必要がありますbossHealth =10; bossLaserTimer =1000; } if(level ==2){spawnEnabled =true; spawnTime =3000; spawnTime2 =8000; spawnTime3 =10000000; killsTarget =20; bossHealth =15; bossLaserTimer =900; } if(level ==3){spawnEnabled =true; spawnTime =2000; spawnTime2 =6000; spawnTime3 =8000; killsTarget =30; bossHealth =20; bossLaserTimer =800; } if(level ==4){spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; killsTarget =40; bossHealth =25; bossLaserTimer =700; bossMinionTimer =6000; } if(level ==5){spawnEnabled =true; spawnTime =1800; spawnTime2 =4500; spawnTime3 =6000; killsTarget =50; bossHealth =30; bossLaserTimer =600; bossMinionTimer =5500; } if(level ==6){spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; killsTarget =60; bossHealth =35; bossLaserTimer =500; bossMinionTimer =5000; } if(level ==7){spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; killsTarget =70; bossHealth =40; bossLaserTimer =400; bossMinionTimer =4000; } if(level ==8){spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; killsTarget =80; bossHealth =45; bossLaserTimer =300; bossMinionTimer =3000; } if(level ==9){spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; killsTarget =90; bossHealth =50; bossLaserTimer =200; bossMinionTimer =2000; } if(level ==10){spawnEnabled =true; spawnTime =2000; spawnTime2 =5000; spawnTime3 =7000; killsTarget =100; bossHealth =55; bossLaserTimer =100; bossMinionTimer =1000; } //レベル10を超えたおめでとうメッセージを追加する必要があります} void Ticker(bool resetKills)//ティッカーの例から偽りなく盗まれたティッカーコード。タイトルとスコアおよびゲームオーバーに使用{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)//画面から消えたら、描画を停止し、存在しないものとしてマークします{if(lasx> 31){lasExist =false; } if(lasy <0){lasy =0; } if(lasy> 7){lasy =7; }} // UFOレーザー画面制限はif(ufoLas1x <-2){ufoLasExist1 =false; } if(ufoLas2x <-2){ufoLasExist2 =false; } if(ufoLas3x <-2){ufoLasExist3 =false; } if(ufoLas4x <-2){ufoLasExist4 =false; } // UFO画面制限コントロール。 UFOが左側から外れた場合、右側のランダムなY座標でUFOを自動的に再生成しますif(ufo1Exist ==true &&ufo1x <-3){ufo1x =33; // UFOが左側から外れると、再び右側に移動しますufo1y =random(0,7); // ufoの重複を防ぐために何らかのソートコードが必要になります} if(ufo2Exist ==true &&ufo2x <-3){ufo2x =33; // UFOが左側から外れると、再び右側に移動しますufo2y =random(0,7); // ufoの重複を防ぐために何らかのソートコードが必要になります} if(ufo3Exist ==true &&ufo3x <-3){ufo3x =33; // UFOが左側から外れると、再び右側に移動しますufo3y =random(0,7); // ufoの重複を防ぐために何らかのソートコードが必要になります} //バウンサー画面の制限コントロール。用心棒が上または下に当たると、方向変数が変化します。左から離れると、それらは存在から一掃され、後で再出現します。 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; } //バウンサーが左側から外れると、デスポーンとして消えますif(bouncer1x <0){bouncer1Exist =false; } if(bouncer2x <0){bouncer2Exist =false; } if(bouncer3x <0){bouncer3Exist =false; } if(bouncer4x <0){bouncer4Exist =false; } // LT画面制限制御if(ltExist ==true &<x <-6){ltx =33; // LTが左側から外れると、再び右側に移動しますlty =random(0,6); } //ライザーの画面制限コントロール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; } //ライザーの画面制限コントロールif(riser1Exist ==true &&raiser1y <-2){riser1Exist =false; } if(riser2Exist ==true &&raiser2y <-2){riser2Exist =false; } if(riser3Exist ==true &&raiser3y <-2){riser3Exist =false; } if(riser4Exist ==true &&raiser4y <-2){riser4Exist =false; }} void SpawnTimer(){if(spawnEnabled ==true){//スポーンタイマーのカウントcurrentTime =millis(); //現在の時刻をミリ秒単位で取得currentTime2 =millis(); // 2番目のタイマーについても同じcurrentTime3 =millis(); //またif(currentTime --startTime> =spawnTime)// currentTime、startTime、spawnTime変数を使用設定した時間に敵をスポーンする{// Spawn UFO SpawnUFO(); //タイマーをリセットしますstartTime =currentTime; //スポーンの開始時間を保存して、ifステートメントが機能するようにします} if(currentTime2 --startTime2> =spawnTime2){//スポーンバウンサー分隊SpawnBouncer(); //タイマーをリセットしますstartTime2 =currentTime2; //スポーンの開始時間を保存して、ifステートメントが機能するようにします} if(currentTime3 --startTime3> =spawnTime3){// spawn LT SpawnLT(); //タイマーをリセットしますstartTime3 =currentTime3; //スポーンの開始時間を保存して、ifステートメントが機能するようにします}}} void SpawnUFO(){if(ufo1Exist ==false){ufo1x =32; //画面の右側からスポーンしますufo1y =random(0,7); //ランダムなY座標でスポーンufo1Exist =true; } else if(ufo2Exist ==false){ufo2x =32; //画面の右側からスポーンしますufo2y =random(0,7); //ランダムなY座標でスポーンufo2Exist =true; } else if(ufo3Exist ==false){ufo3x =32; //画面の右側からスポーンしますufo3y =random(0,7); //ランダムなY座標でスポーンufo3Exist =true; }} void UfoControl(){// UFOが存在する場合は、そのビットマップを描画します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; //画面の右側からスポーンしますbouncer2x =bouncer1x + bouncerGap; // x軸上に間隔を置いて配置された他のバウンサーをスポーンしますbouncer3x =bouncer2x + bouncerGap; bouncer4x =bouncer3x + bouncerGap; bouncerOrigin =random(0,2); if(bouncerOrigin =0){bouncer1y =0; //画面の上部にスポーンbouncer2y =1; bouncer3y =2; bouncer4y =3; } if(bouncerOrigin =1){bouncer1y =7; //下部にスポーンbouncer2y =6; bouncer3y =5; bouncer4y =4; } bouncer1Exist =true; bouncer2Exist =true; bouncer3Exist =true; bouncer4Exist =true; }} void BouncerControl(){//バウンサーは、opn方向変数に応じて、左および上または下に移動します。その変数はScreenLimit()で変更されますif(bouncer1Exist ==true)//バウンサーが存在する場合は、バウンサーのxおよびyカウンターをインクリメントします。これらは動きを遅くするために使用されます。 {bouncer1xSpeed ++; bouncer1ySpeed ++; if(bouncer1xSpeed> xSpeed)//カウンターが速度値を超えると、IFステートメントが実行されます{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; //画面の上部からボスの上にスポーンしますfaller2x =faller1x + bouncerGap; // x軸上に間隔を置いて配置された他のバウンサーをスポーンしますfaller3x =faller2x + bouncerGap; faller4x =faller3x + bouncerGap; faller1y =-1; //画面の上部にスポーンするfaller2y =-2; faller3y =-3; faller4y =-4; faller1Exist =true; faller2Exist =true; faller3Exist =true; faller4Exist =true; }} void FallerControl(){//レベル4の後の戦闘中に、Fallerはボスによってスポーンされます。スポーンのタイマーはBossControl関数にあります。 // faller 1の制御ルーチンif(faller1Exist ==true)// fallerが存在する場合は、fallerSpeedのxおよびyカウンターをインクリメントします。これらは動きを遅くするために使用されます。 {faller1Speedx ++; faller1Speedy ++; if(faller1Speedx> fallerxSpeedTarget)//カウンターが速度値を超えると、IFステートメントが実行されます{faller1x--; faller1Speedx =0; } if(faller1Speedy> fallerySpeedTarget){faller1y ++; faller1Speedy =0; } matrix.drawBitmap(faller1x、faller1y、faller、3,3,1); } // faller 2の制御ルーチンif(faller2Exist ==true)// fallerが存在する場合は、fallerSpeedのxおよびyカウンターをインクリメントします。これらは動きを遅くするために使用されます。 {faller2Speedx ++; faller2Speedy ++; if(faller2Speedx> fallerxSpeedTarget)//カウンターが速度値を超えると、IFステートメントが実行されます{faller2x--; faller2Speedx =0; } if(faller2Speedy> fallerySpeedTarget){faller2y ++; faller2Speedy =0; } matrix.drawBitmap(faller2x、faller2y、faller、3,3,1); } // faller 3の制御ルーチンif(faller3Exist ==true)// fallerが存在する場合は、fallerSpeedのxおよびyカウンターをインクリメントします。これらは動きを遅くするために使用されます。 {faller3Speedx ++; faller3Speedy ++; if(faller3Speedx> fallerxSpeedTarget)//カウンターが速度値を超えると、IFステートメントが実行されます{faller3x--; faller3Speedx =0; } if(faller3Speedy> fallerySpeedTarget){faller3y ++; faller3Speedy =0; } matrix.drawBitmap(faller3x、faller3y、faller、3,3,1); } // faller 4の制御ルーチンif(faller4Exist ==true)// fallerが存在する場合は、fallerSpeedのxおよびyカウンターをインクリメントします。これらは動きを遅くするために使用されます。 {faller4Speedx ++; faller4Speedy ++; if(faller4Speedx> fallerxSpeedTarget)//カウンターが速度値を超えると、IFステートメントが実行されます{faller4x--; faller4Speedx =0; } if(faller4Speedy> fallerySpeedTarget){faller4y ++; faller4Speedy =0; } matrix.drawBitmap(faller4x、faller4y、faller、3,3,1); }} void SpawnRiser(){if(riser1Exist ==false &&raiser2Exist ==false &&raiser3Exist ==false &&raiser4Exist ==false){riser1x =15; //画面の上部からボスの上にスポーンしますriser2x =raiser1x + bouncerGap; // x軸上に間隔を置いて配置された他のバウンサーをスポーンしますriser3x =raiser2x + bouncerGap;ライザー4x =ライザー3x +バウンサーギャップ;ライザー1y =7; //画面の下部にスポーン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);戻る; } 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;ライザー1x =34;ライザー2x =34;ライザー3x =34;ライザー4x =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); delay(1); } if (lives> 0) { GameOver(2); } else if (lives <=0) { GameOver(0); }}