LAME
Dependencies: mbed 4DGL-uLCD-SE SDFileSystem PinDetect
main.cpp@5:05f7a84d0078, 2022-05-01 (annotated)
- Committer:
- kmillion3
- Date:
- Sun May 01 22:17:57 2022 +0000
- Revision:
- 5:05f7a84d0078
- Parent:
- 4:9a4d22a279b3
LAME;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |