LAME

Dependencies:   mbed 4DGL-uLCD-SE SDFileSystem PinDetect

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kmillion3 5:05f7a84d0078 1 #include "Alien.h"
kmillion3 5:05f7a84d0078 2 #include "uLCD_4DGL.h"
kmillion3 5:05f7a84d0078 3 #include "MMA8452.h"
kmillion3 5:05f7a84d0078 4
kmillion3 5:05f7a84d0078 5 #define ALIEN_HEIGHT 8
kmillion3 5:05f7a84d0078 6 #define ALIEN_WIDTH 11
kmillion3 5:05f7a84d0078 7 #define _ 0x000000 //BLACK
kmillion3 5:05f7a84d0078 8 #define X 0xFFFFFF //WHITE
kmillion3 5:05f7a84d0078 9
kmillion3 5:05f7a84d0078 10
kmillion3 5:05f7a84d0078 11 //Spite implementation for all of the aliens
kmillion3 5:05f7a84d0078 12 int alienBobDown_sprite[ALIEN_HEIGHT * ALIEN_WIDTH] = {
kmillion3 5:05f7a84d0078 13 _,_,X,_,_,_,_,_,X,_,_,
kmillion3 5:05f7a84d0078 14 _,_,_,X,_,_,_,X,_,_,_,
kmillion3 5:05f7a84d0078 15 _,_,X,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 16 _,X,X,_,X,X,X,_,X,X,_,
kmillion3 5:05f7a84d0078 17 X,X,X,X,X,X,X,X,X,X,X,
kmillion3 5:05f7a84d0078 18 X,_,X,X,X,X,X,X,X,_,X,
kmillion3 5:05f7a84d0078 19 X,_,X,_,_,_,_,_,X,_,X,
kmillion3 5:05f7a84d0078 20 _,_,_,X,X,_,X,X,_,_,_,
kmillion3 5:05f7a84d0078 21 };
kmillion3 5:05f7a84d0078 22
kmillion3 5:05f7a84d0078 23 int alienBobUp_sprite[ALIEN_HEIGHT * ALIEN_WIDTH] = {
kmillion3 5:05f7a84d0078 24 _,_,X,_,_,_,_,_,X,_,_,
kmillion3 5:05f7a84d0078 25 X,_,_,X,_,_,_,X,_,_,X,
kmillion3 5:05f7a84d0078 26 X,_,X,X,X,X,X,X,X,_,X,
kmillion3 5:05f7a84d0078 27 X,X,X,_,X,X,X,_,X,X,X,
kmillion3 5:05f7a84d0078 28 X,X,X,X,X,X,X,X,X,X,X,
kmillion3 5:05f7a84d0078 29 _,_,X,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 30 _,_,X,_,_,_,_,_,X,_,_,
kmillion3 5:05f7a84d0078 31 _,X,_,_,_,_,_,_,_,X,_,
kmillion3 5:05f7a84d0078 32 };
kmillion3 5:05f7a84d0078 33
kmillion3 5:05f7a84d0078 34 int alienAlice_sprite[ALIEN_HEIGHT * ALIEN_WIDTH] = {
kmillion3 5:05f7a84d0078 35 _,_,_,_,X,X,X,_,_,_,_,
kmillion3 5:05f7a84d0078 36 _,X,X,X,X,X,X,X,X,X,_,
kmillion3 5:05f7a84d0078 37 X,X,X,X,X,X,X,X,X,X,X,
kmillion3 5:05f7a84d0078 38 X,X,X,_,_,X,_,_,X,X,X,
kmillion3 5:05f7a84d0078 39 X,X,X,X,X,X,X,X,X,X,X,
kmillion3 5:05f7a84d0078 40 _,_,_,X,X,_,X,X,_,_,_,
kmillion3 5:05f7a84d0078 41 _,_,X,X,_,_,_,X,X,_,_,
kmillion3 5:05f7a84d0078 42 X,X,_,_,_,X,_,_,_,X,X,
kmillion3 5:05f7a84d0078 43 };
kmillion3 5:05f7a84d0078 44
kmillion3 5:05f7a84d0078 45 int alienOne_sprite[ALIEN_HEIGHT * ALIEN_WIDTH] = {
kmillion3 5:05f7a84d0078 46 _,_,_,_,_,X,_,_,_,_,_,
kmillion3 5:05f7a84d0078 47 _,_,_,X,X,X,X,X,_,_,_,
kmillion3 5:05f7a84d0078 48 _,_,X,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 49 X,X,X,_,X,X,X,_,X,X,X,
kmillion3 5:05f7a84d0078 50 X,X,X,X,X,X,X,X,X,X,X,
kmillion3 5:05f7a84d0078 51 _,_,_,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 52 _,_,X,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 53 X,X,_,_,X,X,X,_,_,X,X,
kmillion3 5:05f7a84d0078 54 };
kmillion3 5:05f7a84d0078 55
kmillion3 5:05f7a84d0078 56 int alienTwo_sprite[ALIEN_HEIGHT * ALIEN_WIDTH] = {
kmillion3 5:05f7a84d0078 57 _,_,_,X,X,X,X,X,_,_,_,
kmillion3 5:05f7a84d0078 58 _,_,X,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 59 _,X,X,X,X,X,X,X,X,X,_,
kmillion3 5:05f7a84d0078 60 X,X,X,_,_,X,_,_,X,X,X,
kmillion3 5:05f7a84d0078 61 X,X,X,X,X,X,X,X,X,X,X,
kmillion3 5:05f7a84d0078 62 _,X,X,X,X,X,X,X,X,X,_,
kmillion3 5:05f7a84d0078 63 _,_,X,X,X,X,X,X,X,_,_,
kmillion3 5:05f7a84d0078 64 X,X,_,_,_,X,_,_,_,X,X,
kmillion3 5:05f7a84d0078 65 };
kmillion3 5:05f7a84d0078 66
kmillion3 5:05f7a84d0078 67
kmillion3 5:05f7a84d0078 68 //Creation of LCD object
kmillion3 5:05f7a84d0078 69 uLCD_4DGL uLCD(p9, p10, p11);
kmillion3 5:05f7a84d0078 70
kmillion3 5:05f7a84d0078 71 //Accelerometer setup
kmillion3 5:05f7a84d0078 72 Serial pc(USBTX,USBRX);
kmillion3 5:05f7a84d0078 73 MMA8452 acc(p28, p27, 40000);
kmillion3 5:05f7a84d0078 74
kmillion3 5:05f7a84d0078 75 void AlienAlice::draw()
kmillion3 5:05f7a84d0078 76 {
kmillion3 5:05f7a84d0078 77 uLCD.BLIT(posAliceAlienX, posAliceAlienY, ALIEN_WIDTH, ALIEN_HEIGHT, alienAlice_sprite); //Draws the alien on the LCD
kmillion3 5:05f7a84d0078 78 }
kmillion3 5:05f7a84d0078 79
kmillion3 5:05f7a84d0078 80 //Updates the position of the alien and calls the draw function
kmillion3 5:05f7a84d0078 81 void AlienAlice::update(int posX)
kmillion3 5:05f7a84d0078 82 {
kmillion3 5:05f7a84d0078 83 posX += 2;
kmillion3 5:05f7a84d0078 84 if ((posAliceAlienX + posX) > 100)
kmillion3 5:05f7a84d0078 85 left = true;
kmillion3 5:05f7a84d0078 86
kmillion3 5:05f7a84d0078 87 if(left == false)
kmillion3 5:05f7a84d0078 88 posAliceAlienX += posX;
kmillion3 5:05f7a84d0078 89 else {
kmillion3 5:05f7a84d0078 90 posAliceAlienX -= posX;
kmillion3 5:05f7a84d0078 91 if (posAliceAlienX < 20)
kmillion3 5:05f7a84d0078 92 left = false;
kmillion3 5:05f7a84d0078 93 }
kmillion3 5:05f7a84d0078 94 draw();
kmillion3 5:05f7a84d0078 95 }
kmillion3 5:05f7a84d0078 96
kmillion3 5:05f7a84d0078 97 //Clears the alien from the LCD
kmillion3 5:05f7a84d0078 98 void AlienAlice::clear()
kmillion3 5:05f7a84d0078 99 {
kmillion3 5:05f7a84d0078 100 uLCD.filled_rectangle(posAliceAlienX, (posAliceAlienY), posAliceAlienX+12, posAliceAlienY+8, BLACK);
kmillion3 5:05f7a84d0078 101 wait(.02);
kmillion3 5:05f7a84d0078 102 }
kmillion3 5:05f7a84d0078 103
kmillion3 5:05f7a84d0078 104 //Draws Alien One
kmillion3 5:05f7a84d0078 105 void AlienOne::draw()
kmillion3 5:05f7a84d0078 106 {
kmillion3 5:05f7a84d0078 107 uLCD.BLIT(posOneAlienX, posOneAlienY, ALIEN_WIDTH, ALIEN_HEIGHT, alienOne_sprite);
kmillion3 5:05f7a84d0078 108 }
kmillion3 5:05f7a84d0078 109
kmillion3 5:05f7a84d0078 110 //Updates the position of Alien One and calls draw
kmillion3 5:05f7a84d0078 111 void AlienOne::update(int posX)
kmillion3 5:05f7a84d0078 112 {
kmillion3 5:05f7a84d0078 113 if ((posOneAlienX + posX) > 100)
kmillion3 5:05f7a84d0078 114 left = true;
kmillion3 5:05f7a84d0078 115
kmillion3 5:05f7a84d0078 116 if(left == false)
kmillion3 5:05f7a84d0078 117 posOneAlienX += posX;
kmillion3 5:05f7a84d0078 118 else {
kmillion3 5:05f7a84d0078 119 posOneAlienX -= posX;
kmillion3 5:05f7a84d0078 120 if (posOneAlienX < 20)
kmillion3 5:05f7a84d0078 121 left = false;
kmillion3 5:05f7a84d0078 122 }
kmillion3 5:05f7a84d0078 123 draw();
kmillion3 5:05f7a84d0078 124 }
kmillion3 5:05f7a84d0078 125
kmillion3 5:05f7a84d0078 126 //Clears alien One from the LCD
kmillion3 5:05f7a84d0078 127 void AlienOne::clear()
kmillion3 5:05f7a84d0078 128 {
kmillion3 5:05f7a84d0078 129 uLCD.filled_rectangle(posOneAlienX, (posOneAlienY), posOneAlienX+12, posOneAlienY+12, BLACK);
kmillion3 5:05f7a84d0078 130 wait(.02);
kmillion3 5:05f7a84d0078 131 }
kmillion3 5:05f7a84d0078 132
kmillion3 5:05f7a84d0078 133 //Draws Alien Two
kmillion3 5:05f7a84d0078 134 void AlienTwo::draw()
kmillion3 5:05f7a84d0078 135 {
kmillion3 5:05f7a84d0078 136 uLCD.BLIT(posTwoAlienX, posTwoAlienY, ALIEN_WIDTH, ALIEN_HEIGHT, alienTwo_sprite);
kmillion3 5:05f7a84d0078 137 }
kmillion3 5:05f7a84d0078 138
kmillion3 5:05f7a84d0078 139 //Updates the position of Alien Two and calls draw
kmillion3 5:05f7a84d0078 140 void AlienTwo::update(int posX)
kmillion3 5:05f7a84d0078 141 {
kmillion3 5:05f7a84d0078 142 if ((posTwoAlienX + posX) > 100)
kmillion3 5:05f7a84d0078 143 left = true;
kmillion3 5:05f7a84d0078 144
kmillion3 5:05f7a84d0078 145 if(left == false)
kmillion3 5:05f7a84d0078 146 posTwoAlienX += posX;
kmillion3 5:05f7a84d0078 147 else {
kmillion3 5:05f7a84d0078 148 posTwoAlienX -= posX;
kmillion3 5:05f7a84d0078 149 if (posTwoAlienX < 20)
kmillion3 5:05f7a84d0078 150 left = false;
kmillion3 5:05f7a84d0078 151 }
kmillion3 5:05f7a84d0078 152 draw();
kmillion3 5:05f7a84d0078 153 }
kmillion3 5:05f7a84d0078 154
kmillion3 5:05f7a84d0078 155 //Clears Alien Two from the Screen
kmillion3 5:05f7a84d0078 156 void AlienTwo::clear()
kmillion3 5:05f7a84d0078 157 {
kmillion3 5:05f7a84d0078 158 uLCD.filled_rectangle(posTwoAlienX, (posTwoAlienY), posTwoAlienX+12, posTwoAlienY+12, BLACK);
kmillion3 5:05f7a84d0078 159 wait(.02);
kmillion3 5:05f7a84d0078 160 }
kmillion3 5:05f7a84d0078 161
kmillion3 5:05f7a84d0078 162 //Calculates time spent playing game and displays it
kmillion3 5:05f7a84d0078 163 void ScreenObject::end(int endTime)
kmillion3 5:05f7a84d0078 164 {
kmillion3 5:05f7a84d0078 165 uLCD.printf("\n\n\n\n Congratulations!!\n\n Earth Saved!\n\n\n (%d Seconds)",endTime);
kmillion3 5:05f7a84d0078 166 }
kmillion3 5:05f7a84d0078 167
kmillion3 5:05f7a84d0078 168 //Initializes LCD
kmillion3 5:05f7a84d0078 169 void ScreenObject::initialize()
kmillion3 5:05f7a84d0078 170 {
kmillion3 5:05f7a84d0078 171 uLCD.baudrate(300000);
kmillion3 5:05f7a84d0078 172 wait(0.3);
kmillion3 5:05f7a84d0078 173 }
kmillion3 5:05f7a84d0078 174
kmillion3 5:05f7a84d0078 175 //Clears the Bob alien from the LCD
kmillion3 5:05f7a84d0078 176 void AlienBob::clear()
kmillion3 5:05f7a84d0078 177 {
kmillion3 5:05f7a84d0078 178 //wait(.1);
kmillion3 5:05f7a84d0078 179 uLCD.filled_rectangle(posBobAlienX, (posBobAlienY), posBobAlienX+12, (posBobAlienY+12), BLACK);
kmillion3 5:05f7a84d0078 180 wait(.02);
kmillion3 5:05f7a84d0078 181 }
kmillion3 5:05f7a84d0078 182
kmillion3 5:05f7a84d0078 183 //Draws the Bob alien
kmillion3 5:05f7a84d0078 184 void AlienBob::draw()
kmillion3 5:05f7a84d0078 185 {
kmillion3 5:05f7a84d0078 186 if(upDown == true)
kmillion3 5:05f7a84d0078 187 uLCD.BLIT(posBobAlienX, posBobAlienY, ALIEN_WIDTH, ALIEN_HEIGHT, alienBobUp_sprite);
kmillion3 5:05f7a84d0078 188 else
kmillion3 5:05f7a84d0078 189 uLCD.BLIT(posBobAlienX, posBobAlienY, ALIEN_WIDTH, ALIEN_HEIGHT, alienBobDown_sprite);
kmillion3 5:05f7a84d0078 190 }
kmillion3 5:05f7a84d0078 191
kmillion3 5:05f7a84d0078 192 //Updates the position of the Bob alien on the LCD
kmillion3 5:05f7a84d0078 193 void AlienBob::update(int posX)
kmillion3 5:05f7a84d0078 194 {
kmillion3 5:05f7a84d0078 195 if (upDown == false) {
kmillion3 5:05f7a84d0078 196 upDown = true;
kmillion3 5:05f7a84d0078 197 } else {
kmillion3 5:05f7a84d0078 198 upDown = false;
kmillion3 5:05f7a84d0078 199 }
kmillion3 5:05f7a84d0078 200
kmillion3 5:05f7a84d0078 201 if ((posBobAlienX + posX) > 100)
kmillion3 5:05f7a84d0078 202 left = true;
kmillion3 5:05f7a84d0078 203
kmillion3 5:05f7a84d0078 204 if(left == false)
kmillion3 5:05f7a84d0078 205 posBobAlienX += posX;
kmillion3 5:05f7a84d0078 206 else {
kmillion3 5:05f7a84d0078 207 posBobAlienX -= posX;
kmillion3 5:05f7a84d0078 208 if (posBobAlienX < 20)
kmillion3 5:05f7a84d0078 209 left = false;
kmillion3 5:05f7a84d0078 210 }
kmillion3 5:05f7a84d0078 211 //posBobAlienY = posY;
kmillion3 5:05f7a84d0078 212 draw();
kmillion3 5:05f7a84d0078 213 }
kmillion3 5:05f7a84d0078 214
kmillion3 5:05f7a84d0078 215 //Draw the ship on the LCD
kmillion3 5:05f7a84d0078 216 void Ship::draw()
kmillion3 5:05f7a84d0078 217 {
kmillion3 5:05f7a84d0078 218 uLCD.filled_rectangle(posShipX, posShipY + 10, posShipX + 25, posShipY, WHITE);
kmillion3 5:05f7a84d0078 219 }
kmillion3 5:05f7a84d0078 220
kmillion3 5:05f7a84d0078 221 //Updates the position of the ship based on accelerometer data and calls draw
kmillion3 5:05f7a84d0078 222 void Ship::update(int posX)
kmillion3 5:05f7a84d0078 223 {
kmillion3 5:05f7a84d0078 224
kmillion3 5:05f7a84d0078 225 double x;
kmillion3 5:05f7a84d0078 226 double y;
kmillion3 5:05f7a84d0078 227 double z;
kmillion3 5:05f7a84d0078 228 acc.setBitDepth(MMA8452::BIT_DEPTH_12);
kmillion3 5:05f7a84d0078 229 acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
kmillion3 5:05f7a84d0078 230 acc.setDataRate(MMA8452::RATE_100);
kmillion3 5:05f7a84d0078 231 while(!acc.isXYZReady()) {
kmillion3 5:05f7a84d0078 232 wait(.02);
kmillion3 5:05f7a84d0078 233 }
kmillion3 5:05f7a84d0078 234 acc.readXYZGravity(&x,&y,&z);
kmillion3 5:05f7a84d0078 235 if(x > 0.5) {
kmillion3 5:05f7a84d0078 236 if((posShipX < 105)) {
kmillion3 5:05f7a84d0078 237 posShipX += 4;
kmillion3 5:05f7a84d0078 238 }
kmillion3 5:05f7a84d0078 239 } else if(x < -0.5) {
kmillion3 5:05f7a84d0078 240 if((posShipX > 5)) {
kmillion3 5:05f7a84d0078 241 posShipX -= 4;
kmillion3 5:05f7a84d0078 242 }
kmillion3 5:05f7a84d0078 243 }
kmillion3 5:05f7a84d0078 244 draw();
kmillion3 5:05f7a84d0078 245 }
kmillion3 5:05f7a84d0078 246
kmillion3 5:05f7a84d0078 247 int Ship::getPosX()
kmillion3 5:05f7a84d0078 248 {
kmillion3 5:05f7a84d0078 249 return(posShipX);
kmillion3 5:05f7a84d0078 250 }
kmillion3 5:05f7a84d0078 251
kmillion3 5:05f7a84d0078 252 //Clears the ship from the LCD
kmillion3 5:05f7a84d0078 253 void Ship::clear()
kmillion3 5:05f7a84d0078 254 {
kmillion3 5:05f7a84d0078 255 uLCD.filled_rectangle(posShipX, posShipY + 10, posShipX + 25, posShipY, BLACK);
kmillion3 5:05f7a84d0078 256 }
kmillion3 5:05f7a84d0078 257
kmillion3 5:05f7a84d0078 258 //Clears the bullet from the LCD
kmillion3 5:05f7a84d0078 259 void Bullet::clear()
kmillion3 5:05f7a84d0078 260 {
kmillion3 5:05f7a84d0078 261 uLCD.filled_rectangle(posBulletX + 10, posBulletY, posBulletX + 15, posBulletY - 8, BLACK);
kmillion3 5:05f7a84d0078 262 }
kmillion3 5:05f7a84d0078 263
kmillion3 5:05f7a84d0078 264 //Updates the Bullet's position and calls draw if not off the screen
kmillion3 5:05f7a84d0078 265 void Bullet::update(int posX)
kmillion3 5:05f7a84d0078 266 {
kmillion3 5:05f7a84d0078 267 posBulletY -= 5;
kmillion3 5:05f7a84d0078 268 if(posBulletY < 0)
kmillion3 5:05f7a84d0078 269 clear();
kmillion3 5:05f7a84d0078 270 else
kmillion3 5:05f7a84d0078 271 draw();
kmillion3 5:05f7a84d0078 272 }
kmillion3 5:05f7a84d0078 273
kmillion3 5:05f7a84d0078 274 //Draws the bullet
kmillion3 5:05f7a84d0078 275 void Bullet::draw()
kmillion3 5:05f7a84d0078 276 {
kmillion3 5:05f7a84d0078 277 uLCD.filled_rectangle(posBulletX + 10, posBulletY, posBulletX + 15, posBulletY - 8, WHITE);
kmillion3 5:05f7a84d0078 278 }