LAME

Dependencies:   mbed 4DGL-uLCD-SE SDFileSystem PinDetect

Committer:
kmillion3
Date:
Sun May 01 22:17:57 2022 +0000
Revision:
5:05f7a84d0078
Parent:
4:9a4d22a279b3
LAME;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:cc87c48aa43c 1 #include "mbed.h"
4180_1 2:58d85409f7ff 2 #include "TMP36.h"
4180_1 2:58d85409f7ff 3 #include "SDFileSystem.h"
4180_1 4:9a4d22a279b3 4 #include "uLCD_4DGL.h"
4180_1 0:cc87c48aa43c 5 #include "PinDetect.h"
4180_1 2:58d85409f7ff 6 #include "Speaker.h"
kmillion3 5:05f7a84d0078 7 #include "Alien.h"
kmillion3 5:05f7a84d0078 8 #include <vector>
4180_1 2:58d85409f7ff 9
kmillion3 5:05f7a84d0078 10 //Initialize button for shooting
kmillion3 5:05f7a84d0078 11 PinDetect pb1(p21);
4180_1 2:58d85409f7ff 12
kmillion3 5:05f7a84d0078 13 //Create speaker object
kmillion3 5:05f7a84d0078 14 Speaker mySpeaker(p21);
4180_1 2:58d85409f7ff 15
kmillion3 5:05f7a84d0078 16 using namespace std;
4180_1 0:cc87c48aa43c 17
kmillion3 5:05f7a84d0078 18 //Variables
kmillion3 5:05f7a84d0078 19 bool addBullet = false;
kmillion3 5:05f7a84d0078 20 int bul = 0;
kmillion3 5:05f7a84d0078 21 int numAliens = 5;
4180_1 2:58d85409f7ff 22
kmillion3 5:05f7a84d0078 23 //Interupt function for the shooting button
4180_1 2:58d85409f7ff 24 void pb1_hit_callback (void)
4180_1 2:58d85409f7ff 25 {
kmillion3 5:05f7a84d0078 26 addBullet = true;
4180_1 2:58d85409f7ff 27 }
4180_1 0:cc87c48aa43c 28
4180_1 2:58d85409f7ff 29 int main()
4180_1 2:58d85409f7ff 30 {
kmillion3 5:05f7a84d0078 31 //Sets up speaker object
kmillion3 5:05f7a84d0078 32 Speaker mySpeaker(p25);
kmillion3 5:05f7a84d0078 33 //Sets start time of the game
kmillion3 5:05f7a84d0078 34 time_t startTime = time(0);
4180_1 2:58d85409f7ff 35
kmillion3 5:05f7a84d0078 36 //Set up interrupts
4180_1 2:58d85409f7ff 37 pb1.mode(PullUp);
4180_1 0:cc87c48aa43c 38 // Delay for initial pullup to take effect
kmillion3 5:05f7a84d0078 39 wait(0.3);
4180_1 1:768b8bd42e33 40 // Setup Interrupt callback functions for a pb hit
4180_1 1:768b8bd42e33 41 pb1.attach_deasserted(&pb1_hit_callback);
4180_1 1:768b8bd42e33 42 // Start sampling pb inputs using interrupts
kmillion3 5:05f7a84d0078 43 wait(0.3);
4180_1 1:768b8bd42e33 44 pb1.setSampleFrequency();
4180_1 2:58d85409f7ff 45 // pushbuttons now setup and running
4180_1 2:58d85409f7ff 46
kmillion3 5:05f7a84d0078 47 srand(time(0));
kmillion3 5:05f7a84d0078 48
kmillion3 5:05f7a84d0078 49 vector<ScreenObject *> pieces(7); //Create an STL vector of pointers
kmillion3 5:05f7a84d0078 50
kmillion3 5:05f7a84d0078 51 //Initialize aliens randomly from each type in random positions
kmillion3 5:05f7a84d0078 52 for (int i = 0; i <= 5; i++) {
kmillion3 5:05f7a84d0078 53 int posX = (20 + rand() % 80);
kmillion3 5:05f7a84d0078 54 int posY = 12*i+10;
kmillion3 5:05f7a84d0078 55 //(new AlienAlice(posX, posY))->draw();
kmillion3 5:05f7a84d0078 56 int type = (rand() % 4 );
kmillion3 5:05f7a84d0078 57 if(type == 0)
kmillion3 5:05f7a84d0078 58 pieces[i] = (new AlienAlice(posX, posY));
kmillion3 5:05f7a84d0078 59 else if(type == 1)
kmillion3 5:05f7a84d0078 60 pieces[i] = (new AlienBob(posX, posY));
kmillion3 5:05f7a84d0078 61 else if(type == 2)
kmillion3 5:05f7a84d0078 62 pieces[i] = (new AlienOne(posX, posY));
kmillion3 5:05f7a84d0078 63 else if(type == 3)
kmillion3 5:05f7a84d0078 64 pieces[i] = (new AlienTwo(posX, posY));
kmillion3 5:05f7a84d0078 65 //pieces[i]->draw();
4180_1 2:58d85409f7ff 66 }
kmillion3 5:05f7a84d0078 67
kmillion3 5:05f7a84d0078 68 //Initialize the ship
kmillion3 5:05f7a84d0078 69 pieces[6] = (new Ship(50));
kmillion3 5:05f7a84d0078 70 pieces[6]->draw();
kmillion3 5:05f7a84d0078 71
kmillion3 5:05f7a84d0078 72 //Initialize the LCD
kmillion3 5:05f7a84d0078 73 pieces[0]->initialize();
kmillion3 5:05f7a84d0078 74
kmillion3 5:05f7a84d0078 75 bool won = false;
kmillion3 5:05f7a84d0078 76 int inc = 0;
kmillion3 5:05f7a84d0078 77
kmillion3 5:05f7a84d0078 78 //Loop while playing
kmillion3 5:05f7a84d0078 79 while(won == false) {
kmillion3 5:05f7a84d0078 80
kmillion3 5:05f7a84d0078 81 //Update the alien positions
kmillion3 5:05f7a84d0078 82 for (int i = 0; i <= numAliens; i++) {
kmillion3 5:05f7a84d0078 83 pieces[i]->clear();
kmillion3 5:05f7a84d0078 84 pieces[i]->update(4);
kmillion3 5:05f7a84d0078 85 }
kmillion3 5:05f7a84d0078 86
kmillion3 5:05f7a84d0078 87 //Update the ship's position
kmillion3 5:05f7a84d0078 88 pieces[numAliens+1]->clear();
kmillion3 5:05f7a84d0078 89 pieces[numAliens+1]->update(0);
kmillion3 5:05f7a84d0078 90
kmillion3 5:05f7a84d0078 91 //If a bullet has been trigger and is allowed initialize it
kmillion3 5:05f7a84d0078 92 if(addBullet == 1) {
kmillion3 5:05f7a84d0078 93 bul = 1;
kmillion3 5:05f7a84d0078 94 //addBullet = true;
kmillion3 5:05f7a84d0078 95 if(inc == 1)
kmillion3 5:05f7a84d0078 96 pieces[numAliens + 2]->clear();
kmillion3 5:05f7a84d0078 97 inc = 1;
kmillion3 5:05f7a84d0078 98 pieces[numAliens + 2] = (new Bullet(pieces[numAliens + 1]->getPosX(), 119));
kmillion3 5:05f7a84d0078 99 //pieces[7]->clear();
kmillion3 5:05f7a84d0078 100 //pieces[6]->draw();
kmillion3 5:05f7a84d0078 101 addBullet = 0;
kmillion3 5:05f7a84d0078 102 }
kmillion3 5:05f7a84d0078 103
kmillion3 5:05f7a84d0078 104 //Check if bullet is in same space as an alien and remove both if that is the case
kmillion3 5:05f7a84d0078 105 if(bul == 1) {
kmillion3 5:05f7a84d0078 106 pieces[numAliens + 2]->clear();
kmillion3 5:05f7a84d0078 107 pieces[numAliens + 2]->update(0);
kmillion3 5:05f7a84d0078 108 for (int i = 0; i < (pieces.size() - 1); i++) {
kmillion3 5:05f7a84d0078 109 if((((pieces[numAliens + 2]->getPosX()+15) > pieces[i]->getPosX() && (pieces[numAliens + 2]->getPosX()+10) < (pieces[i]->getPosX() + 12)) && ((pieces[numAliens + 2]->getPosY()-8) < (pieces[i]->getPosY()+12) && (pieces[numAliens + 2]->getPosY()) > (pieces[i]->getPosY())))) {
kmillion3 5:05f7a84d0078 110 pieces[numAliens + 2]->clear();
kmillion3 5:05f7a84d0078 111 pieces[i]->clear();
kmillion3 5:05f7a84d0078 112 pieces.erase(pieces.begin() + i);
kmillion3 5:05f7a84d0078 113 numAliens -= 1;
kmillion3 5:05f7a84d0078 114 bul = 0;
kmillion3 5:05f7a84d0078 115 mySpeaker.PlayNote(300.0,0.1,0.025);
4180_1 2:58d85409f7ff 116 }
kmillion3 5:05f7a84d0078 117 }
kmillion3 5:05f7a84d0078 118
kmillion3 5:05f7a84d0078 119 //End game if all the aliens are gone
kmillion3 5:05f7a84d0078 120 if(numAliens == -1) {
kmillion3 5:05f7a84d0078 121 time_t endTime = time(0)-startTime;
kmillion3 5:05f7a84d0078 122 pieces[numAliens + 1]->end(endTime);
kmillion3 5:05f7a84d0078 123 won = true;
kmillion3 5:05f7a84d0078 124 for(int j = 0; j < 3; j++) {
kmillion3 5:05f7a84d0078 125 mySpeaker.PlayNote(300.0,0.1,0.025);
kmillion3 5:05f7a84d0078 126 mySpeaker.PlayNote(400.0,0.1,0.025);
kmillion3 5:05f7a84d0078 127 }
4180_1 2:58d85409f7ff 128 }
4180_1 2:58d85409f7ff 129 }
4180_1 0:cc87c48aa43c 130 }
kmillion3 5:05f7a84d0078 131
kmillion3 5:05f7a84d0078 132 //Loop eternally after winning
kmillion3 5:05f7a84d0078 133 while(1) {
kmillion3 5:05f7a84d0078 134 }
4180_1 0:cc87c48aa43c 135 }