Daniel Nguyen
Dependencies: 4DGL-uLCD-SE mbed
main.cpp@0:7d7f6032c719, 2017-11-02 (annotated)
- Committer:
- dnguyen314
- Date:
- Thu Nov 02 19:15:07 2017 +0000
- Revision:
- 0:7d7f6032c719
hi
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dnguyen314 | 0:7d7f6032c719 | 1 | #include "mbed.h" |
dnguyen314 | 0:7d7f6032c719 | 2 | #include "Bullet.h" |
dnguyen314 | 0:7d7f6032c719 | 3 | #include "ScreenAliens.h" |
dnguyen314 | 0:7d7f6032c719 | 4 | #include "AlienBob.h" |
dnguyen314 | 0:7d7f6032c719 | 5 | #include "AlienAlice.h" |
dnguyen314 | 0:7d7f6032c719 | 6 | #include "AlienMoo.h" |
dnguyen314 | 0:7d7f6032c719 | 7 | #include "AlienJun.h" |
dnguyen314 | 0:7d7f6032c719 | 8 | #include "SpaceShip.h" |
dnguyen314 | 0:7d7f6032c719 | 9 | #include "uLCD_4DGL.h" |
dnguyen314 | 0:7d7f6032c719 | 10 | #include "Speaker.h" |
dnguyen314 | 0:7d7f6032c719 | 11 | #include <stdio.h> |
dnguyen314 | 0:7d7f6032c719 | 12 | #include <cstdlib> |
dnguyen314 | 0:7d7f6032c719 | 13 | #include <iostream> |
dnguyen314 | 0:7d7f6032c719 | 14 | #include <ctime> |
dnguyen314 | 0:7d7f6032c719 | 15 | #include <time.h> |
dnguyen314 | 0:7d7f6032c719 | 16 | #define ALIEN_HEIGHT 8 |
dnguyen314 | 0:7d7f6032c719 | 17 | #define ALIEN_WIDTH 11 |
dnguyen314 | 0:7d7f6032c719 | 18 | #define _ 0x000000 //BLACK |
dnguyen314 | 0:7d7f6032c719 | 19 | #define X 0xFFFFFF //WHITE |
dnguyen314 | 0:7d7f6032c719 | 20 | |
dnguyen314 | 0:7d7f6032c719 | 21 | using namespace std; |
dnguyen314 | 0:7d7f6032c719 | 22 | |
dnguyen314 | 0:7d7f6032c719 | 23 | DigitalOut myLed1(LED1); |
dnguyen314 | 0:7d7f6032c719 | 24 | DigitalOut myLed2(LED2); |
dnguyen314 | 0:7d7f6032c719 | 25 | DigitalOut myLed3(LED3); |
dnguyen314 | 0:7d7f6032c719 | 26 | DigitalIn pbLeft(p8); |
dnguyen314 | 0:7d7f6032c719 | 27 | DigitalIn pbRight(p9); |
dnguyen314 | 0:7d7f6032c719 | 28 | DigitalIn pbShoot(p10); |
dnguyen314 | 0:7d7f6032c719 | 29 | Speaker mySpeaker(p21); |
dnguyen314 | 0:7d7f6032c719 | 30 | uLCD_4DGL uLCD(p28,p27,p29); |
dnguyen314 | 0:7d7f6032c719 | 31 | Timer t; |
dnguyen314 | 0:7d7f6032c719 | 32 | |
dnguyen314 | 0:7d7f6032c719 | 33 | int main() { |
dnguyen314 | 0:7d7f6032c719 | 34 | |
dnguyen314 | 0:7d7f6032c719 | 35 | //Initializations |
dnguyen314 | 0:7d7f6032c719 | 36 | uLCD.cls(); |
dnguyen314 | 0:7d7f6032c719 | 37 | uLCD.baudrate(600000); |
dnguyen314 | 0:7d7f6032c719 | 38 | wait(0.2); |
dnguyen314 | 0:7d7f6032c719 | 39 | pbLeft.mode(PullUp); |
dnguyen314 | 0:7d7f6032c719 | 40 | myLed1 = pbLeft; |
dnguyen314 | 0:7d7f6032c719 | 41 | pbRight.mode(PullUp); |
dnguyen314 | 0:7d7f6032c719 | 42 | myLed2 = pbRight; |
dnguyen314 | 0:7d7f6032c719 | 43 | pbShoot.mode(PullUp); |
dnguyen314 | 0:7d7f6032c719 | 44 | myLed3 = pbShoot; |
dnguyen314 | 0:7d7f6032c719 | 45 | wait(0.2); |
dnguyen314 | 0:7d7f6032c719 | 46 | |
dnguyen314 | 0:7d7f6032c719 | 47 | //Starts timer for game |
dnguyen314 | 0:7d7f6032c719 | 48 | t.start(); |
dnguyen314 | 0:7d7f6032c719 | 49 | uLCD.display_control(LANDSCAPE); |
dnguyen314 | 0:7d7f6032c719 | 50 | |
dnguyen314 | 0:7d7f6032c719 | 51 | /////////Creates SpaceShip//////// |
dnguyen314 | 0:7d7f6032c719 | 52 | SpaceShip ship; |
dnguyen314 | 0:7d7f6032c719 | 53 | |
dnguyen314 | 0:7d7f6032c719 | 54 | ////////Creates Bullet///// |
dnguyen314 | 0:7d7f6032c719 | 55 | Bullet shot; // Though does not appear yet until fired |
dnguyen314 | 0:7d7f6032c719 | 56 | bool shotBullet = false; |
dnguyen314 | 0:7d7f6032c719 | 57 | |
dnguyen314 | 0:7d7f6032c719 | 58 | ///////Creates Aliens////// |
dnguyen314 | 0:7d7f6032c719 | 59 | srand (time(NULL)); |
dnguyen314 | 0:7d7f6032c719 | 60 | ScreenAliens ** aliens = new ScreenAliens*[6]; // Will hold pointers to the six different aliens |
dnguyen314 | 0:7d7f6032c719 | 61 | int x = 0; |
dnguyen314 | 0:7d7f6032c719 | 62 | int posX = 0; |
dnguyen314 | 0:7d7f6032c719 | 63 | int posY = 30; |
dnguyen314 | 0:7d7f6032c719 | 64 | for (int i = 0; i < 6; i++) // Will randomly create the aliens |
dnguyen314 | 0:7d7f6032c719 | 65 | { |
dnguyen314 | 0:7d7f6032c719 | 66 | x = rand() % 4 + 1; |
dnguyen314 | 0:7d7f6032c719 | 67 | |
dnguyen314 | 0:7d7f6032c719 | 68 | posX = rand() % 100 + 1; |
dnguyen314 | 0:7d7f6032c719 | 69 | switch(x) |
dnguyen314 | 0:7d7f6032c719 | 70 | { |
dnguyen314 | 0:7d7f6032c719 | 71 | case 1: |
dnguyen314 | 0:7d7f6032c719 | 72 | aliens[i] = new AlienBob(posX, posY); |
dnguyen314 | 0:7d7f6032c719 | 73 | aliens[i]->isLeft(1); //Decides is alien should first move left or right |
dnguyen314 | 0:7d7f6032c719 | 74 | break; |
dnguyen314 | 0:7d7f6032c719 | 75 | case 2: |
dnguyen314 | 0:7d7f6032c719 | 76 | aliens[i] = new AlienAlice(posX, posY); |
dnguyen314 | 0:7d7f6032c719 | 77 | aliens[i]->isLeft(0); |
dnguyen314 | 0:7d7f6032c719 | 78 | break; |
dnguyen314 | 0:7d7f6032c719 | 79 | case 3: |
dnguyen314 | 0:7d7f6032c719 | 80 | aliens[i] = new AlienMoo(posX, posY); |
dnguyen314 | 0:7d7f6032c719 | 81 | aliens[i]->isLeft(1); |
dnguyen314 | 0:7d7f6032c719 | 82 | break; |
dnguyen314 | 0:7d7f6032c719 | 83 | case 4: |
dnguyen314 | 0:7d7f6032c719 | 84 | aliens[i] = new AlienJun(posX, posY); |
dnguyen314 | 0:7d7f6032c719 | 85 | aliens[i]->isLeft(0); |
dnguyen314 | 0:7d7f6032c719 | 86 | break; |
dnguyen314 | 0:7d7f6032c719 | 87 | |
dnguyen314 | 0:7d7f6032c719 | 88 | default: |
dnguyen314 | 0:7d7f6032c719 | 89 | break; |
dnguyen314 | 0:7d7f6032c719 | 90 | } |
dnguyen314 | 0:7d7f6032c719 | 91 | posY += 10; //Positions the next alien 10 pixels down |
dnguyen314 | 0:7d7f6032c719 | 92 | } |
dnguyen314 | 0:7d7f6032c719 | 93 | |
dnguyen314 | 0:7d7f6032c719 | 94 | int numOfAliens = 6; // When alien is hit, counter goes down. |
dnguyen314 | 0:7d7f6032c719 | 95 | // When 0, game ends and player wins. |
dnguyen314 | 0:7d7f6032c719 | 96 | |
dnguyen314 | 0:7d7f6032c719 | 97 | bool start = true; |
dnguyen314 | 0:7d7f6032c719 | 98 | |
dnguyen314 | 0:7d7f6032c719 | 99 | //////GAME STARTS HERE//////// |
dnguyen314 | 0:7d7f6032c719 | 100 | while (start) |
dnguyen314 | 0:7d7f6032c719 | 101 | { |
dnguyen314 | 0:7d7f6032c719 | 102 | uLCD.rectangle(2, 2, 125, 125, RED); |
dnguyen314 | 0:7d7f6032c719 | 103 | |
dnguyen314 | 0:7d7f6032c719 | 104 | ////Take SpaceShip Input//// |
dnguyen314 | 0:7d7f6032c719 | 105 | if (!pbRight) |
dnguyen314 | 0:7d7f6032c719 | 106 | { |
dnguyen314 | 0:7d7f6032c719 | 107 | ship.move(3); |
dnguyen314 | 0:7d7f6032c719 | 108 | } |
dnguyen314 | 0:7d7f6032c719 | 109 | |
dnguyen314 | 0:7d7f6032c719 | 110 | if (!pbLeft) |
dnguyen314 | 0:7d7f6032c719 | 111 | { |
dnguyen314 | 0:7d7f6032c719 | 112 | ship.move(-3); |
dnguyen314 | 0:7d7f6032c719 | 113 | } |
dnguyen314 | 0:7d7f6032c719 | 114 | |
dnguyen314 | 0:7d7f6032c719 | 115 | if (!pbShoot && (shotBullet != true)) |
dnguyen314 | 0:7d7f6032c719 | 116 | { |
dnguyen314 | 0:7d7f6032c719 | 117 | //Plays sounds when shooting |
dnguyen314 | 0:7d7f6032c719 | 118 | mySpeaker.PlayNote(329, .04, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 119 | mySpeaker.PlayNote(370, .04, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 120 | shot.setPosX(ship.getPosX()); |
dnguyen314 | 0:7d7f6032c719 | 121 | if ((shot.getPosY() > -3) || (shot.getPosY() < 105)) |
dnguyen314 | 0:7d7f6032c719 | 122 | { |
dnguyen314 | 0:7d7f6032c719 | 123 | shotBullet = true; // Shot has been fired and it's behavior is decided |
dnguyen314 | 0:7d7f6032c719 | 124 | } // by condition codes below |
dnguyen314 | 0:7d7f6032c719 | 125 | |
dnguyen314 | 0:7d7f6032c719 | 126 | } |
dnguyen314 | 0:7d7f6032c719 | 127 | |
dnguyen314 | 0:7d7f6032c719 | 128 | for(int i = 0; i < 6; i++) |
dnguyen314 | 0:7d7f6032c719 | 129 | { |
dnguyen314 | 0:7d7f6032c719 | 130 | aliens[i]->update(); |
dnguyen314 | 0:7d7f6032c719 | 131 | for (int j = (aliens[i]->getPosX()-2); j < (aliens[i]->getPosX()+10); j++) |
dnguyen314 | 0:7d7f6032c719 | 132 | { |
dnguyen314 | 0:7d7f6032c719 | 133 | if (j == shot.getPosX()) |
dnguyen314 | 0:7d7f6032c719 | 134 | { |
dnguyen314 | 0:7d7f6032c719 | 135 | for (int k = (aliens[i]->getPosY()+2); k < (aliens[i]->getPosY()+8); k++) |
dnguyen314 | 0:7d7f6032c719 | 136 | { |
dnguyen314 | 0:7d7f6032c719 | 137 | if (k == shot.getPosY()) |
dnguyen314 | 0:7d7f6032c719 | 138 | { |
dnguyen314 | 0:7d7f6032c719 | 139 | //Plays sound when an alien is hit |
dnguyen314 | 0:7d7f6032c719 | 140 | mySpeaker.PlayNote(440, .015, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 141 | mySpeaker.PlayNote(494, .01, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 142 | shot.collide(); |
dnguyen314 | 0:7d7f6032c719 | 143 | aliens[i]->collide(); |
dnguyen314 | 0:7d7f6032c719 | 144 | shotBullet = false; // Cannot shoot bullet again until has left screen |
dnguyen314 | 0:7d7f6032c719 | 145 | shot.setPosY(105); // Resets position of bullet |
dnguyen314 | 0:7d7f6032c719 | 146 | numOfAliens--; |
dnguyen314 | 0:7d7f6032c719 | 147 | break; |
dnguyen314 | 0:7d7f6032c719 | 148 | } |
dnguyen314 | 0:7d7f6032c719 | 149 | } |
dnguyen314 | 0:7d7f6032c719 | 150 | } |
dnguyen314 | 0:7d7f6032c719 | 151 | } |
dnguyen314 | 0:7d7f6032c719 | 152 | |
dnguyen314 | 0:7d7f6032c719 | 153 | if (shot.getPosY() < -3) //When bullet leaves screen then bullet actual resets |
dnguyen314 | 0:7d7f6032c719 | 154 | { // original position and does not move forward until |
dnguyen314 | 0:7d7f6032c719 | 155 | shotBullet = false; // fired again |
dnguyen314 | 0:7d7f6032c719 | 156 | shot.setPosY(105); |
dnguyen314 | 0:7d7f6032c719 | 157 | } |
dnguyen314 | 0:7d7f6032c719 | 158 | else if (shotBullet) // If shot is fired and has not left screen then |
dnguyen314 | 0:7d7f6032c719 | 159 | { // shot moves forward until it has left the screen |
dnguyen314 | 0:7d7f6032c719 | 160 | shot.draw(); |
dnguyen314 | 0:7d7f6032c719 | 161 | } |
dnguyen314 | 0:7d7f6032c719 | 162 | } |
dnguyen314 | 0:7d7f6032c719 | 163 | |
dnguyen314 | 0:7d7f6032c719 | 164 | if (numOfAliens == 0) // Conditions where player wins |
dnguyen314 | 0:7d7f6032c719 | 165 | { |
dnguyen314 | 0:7d7f6032c719 | 166 | start = false; |
dnguyen314 | 0:7d7f6032c719 | 167 | } |
dnguyen314 | 0:7d7f6032c719 | 168 | } |
dnguyen314 | 0:7d7f6032c719 | 169 | |
dnguyen314 | 0:7d7f6032c719 | 170 | if (start == false) |
dnguyen314 | 0:7d7f6032c719 | 171 | { |
dnguyen314 | 0:7d7f6032c719 | 172 | int xtime = t.read(); |
dnguyen314 | 0:7d7f6032c719 | 173 | uLCD.cls(); |
dnguyen314 | 0:7d7f6032c719 | 174 | uLCD.rectangle(2, 2, 125, 125, GREEN); |
dnguyen314 | 0:7d7f6032c719 | 175 | uLCD.printf(" "); |
dnguyen314 | 0:7d7f6032c719 | 176 | uLCD.printf(" "); |
dnguyen314 | 0:7d7f6032c719 | 177 | uLCD.printf(" "); |
dnguyen314 | 0:7d7f6032c719 | 178 | uLCD.printf(" "); |
dnguyen314 | 0:7d7f6032c719 | 179 | uLCD.printf(" CONGRATS YOU WON "); |
dnguyen314 | 0:7d7f6032c719 | 180 | uLCD.printf(" SIR OR NOT SIR. "); |
dnguyen314 | 0:7d7f6032c719 | 181 | uLCD.printf(" TIME:"); |
dnguyen314 | 0:7d7f6032c719 | 182 | uLCD.printf("%d SEC", xtime); |
dnguyen314 | 0:7d7f6032c719 | 183 | uLCD.printf(" "); |
dnguyen314 | 0:7d7f6032c719 | 184 | uLCD.printf(" "); |
dnguyen314 | 0:7d7f6032c719 | 185 | uLCD.printf(" GOOD DAY "); |
dnguyen314 | 0:7d7f6032c719 | 186 | uLCD.printf(" AND "); |
dnguyen314 | 0:7d7f6032c719 | 187 | uLCD.printf(" GOOD LIFE "); |
dnguyen314 | 0:7d7f6032c719 | 188 | uLCD.rectangle(2, 2, 125, 125, GREEN); |
dnguyen314 | 0:7d7f6032c719 | 189 | mySpeaker.PlayNote(658, .125, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 190 | mySpeaker.PlayNote(1320, .500, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 191 | mySpeaker.PlayNote(990, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 192 | mySpeaker.PlayNote(1056, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 193 | mySpeaker.PlayNote(1188, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 194 | mySpeaker.PlayNote(1320, .125, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 195 | mySpeaker.PlayNote(1188, .125, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 196 | mySpeaker.PlayNote(1056, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 197 | mySpeaker.PlayNote(990, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 198 | mySpeaker.PlayNote(880, .500, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 199 | mySpeaker.PlayNote(880, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 200 | mySpeaker.PlayNote(1056, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 201 | mySpeaker.PlayNote(1320, .500, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 202 | mySpeaker.PlayNote(1188, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 203 | mySpeaker.PlayNote(1056, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 204 | mySpeaker.PlayNote(990, .750, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 205 | mySpeaker.PlayNote(1056, .250, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 206 | mySpeaker.PlayNote(1188, .5, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 207 | mySpeaker.PlayNote(1320, .500, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 208 | mySpeaker.PlayNote(1056, .500, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 209 | mySpeaker.PlayNote(880, .500, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 210 | mySpeaker.PlayNote(880, .750, 0.015); |
dnguyen314 | 0:7d7f6032c719 | 211 | } |
dnguyen314 | 0:7d7f6032c719 | 212 | } |