Daniel Nguyen

Dependencies:   4DGL-uLCD-SE mbed

Committer:
dnguyen314
Date:
Thu Nov 02 19:15:07 2017 +0000
Revision:
0:7d7f6032c719
hi

Who changed what in which revision?

UserRevisionLine numberNew 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 }