World In Balance game

Dependencies:   4DGL-uLCD-SE PinDetect mbed

Committer:
jchin32
Date:
Wed Nov 08 20:25:03 2017 +0000
Revision:
0:1305fa20a8db
World In Balance Game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jchin32 0:1305fa20a8db 1 #include "mbed.h"
jchin32 0:1305fa20a8db 2 #include "MMA8452.h"
jchin32 0:1305fa20a8db 3 #include "ScreenObject.h"
jchin32 0:1305fa20a8db 4 #include "SpaceShipEarth.h"
jchin32 0:1305fa20a8db 5 #include "Asteroid1.h"
jchin32 0:1305fa20a8db 6 #include "Asteroid2.h"
jchin32 0:1305fa20a8db 7 #include "Asteroid3.h"
jchin32 0:1305fa20a8db 8 #include "Asteroid4.h"
jchin32 0:1305fa20a8db 9 #include "PinDetect.h"
jchin32 0:1305fa20a8db 10 #include "Speaker.h"
jchin32 0:1305fa20a8db 11 #include <ctime>
jchin32 0:1305fa20a8db 12
jchin32 0:1305fa20a8db 13 int asteroid_sprite_1[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
jchin32 0:1305fa20a8db 14 _,_,_,_,X,X,X,X,X,X,X,X,_,_,_,
jchin32 0:1305fa20a8db 15 _,_,_,X,_,_,_,_,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 16 _,_,X,_,_,_,_,_,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 17 _,X,_,_,_,_,_,_,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 18 X,X,X,X,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 19 _,_,_,X,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 20 _,_,X,_,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 21 _,X,_,_,_,_,_,X,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 22 X,_,_,_,_,_,X,X,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 23 _,X,_,_,_,X,_,X,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 24 _,_,X,_,X,_,_,X,_,_,_,X,_,_,_,
jchin32 0:1305fa20a8db 25 _,_,_,X,_,_,_,X,X,X,X,_,_,_,_
jchin32 0:1305fa20a8db 26
jchin32 0:1305fa20a8db 27 };
jchin32 0:1305fa20a8db 28
jchin32 0:1305fa20a8db 29 int asteroid_sprite_2[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
jchin32 0:1305fa20a8db 30 _,_,_,X,_,_,_,_,_,X,_,_,_,_,_,
jchin32 0:1305fa20a8db 31 _,_,X,_,X,_,_,_,X,_,X,_,_,_,_,
jchin32 0:1305fa20a8db 32 _,X,_,_,_,X,_,X,_,_,_,X,_,_,_,
jchin32 0:1305fa20a8db 33 X,_,_,_,_,_,X,_,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 34 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 35 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,
jchin32 0:1305fa20a8db 36 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 37 X,_,_,_,_,_,_,_,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 38 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 39 _,X,_,_,_,_,_,_,_,_,_,_,_,_,X,
jchin32 0:1305fa20a8db 40 _,_,X,_,_,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 41 _,_,_,X,X,X,X,X,X,X,X,X,X,_,_
jchin32 0:1305fa20a8db 42
jchin32 0:1305fa20a8db 43 };
jchin32 0:1305fa20a8db 44
jchin32 0:1305fa20a8db 45 int asteroid_sprite_3[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
jchin32 0:1305fa20a8db 46 _,_,_,X,X,X,X,X,X,X,X,X,_,_,_,
jchin32 0:1305fa20a8db 47 _,_,_,X,_,_,_,_,_,_,_,_,X,_,_,
jchin32 0:1305fa20a8db 48 _,_,_,_,X,_,_,_,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 49 X,X,X,X,X,X,_,_,_,_,_,X,X,X,_,
jchin32 0:1305fa20a8db 50 X,_,_,_,_,_,_,_,X,X,X,_,_,_,_,
jchin32 0:1305fa20a8db 51 X,_,_,_,_,_,_,X,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 52 X,_,_,_,_,_,_,_,X,X,X,_,_,_,_,
jchin32 0:1305fa20a8db 53 X,_,_,_,_,_,_,_,_,_,_,X,X,X,_,
jchin32 0:1305fa20a8db 54 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,
jchin32 0:1305fa20a8db 55 _,X,_,_,_,_,_,_,X,X,X,_,_,_,X,
jchin32 0:1305fa20a8db 56 _,_,X,_,_,X,X,X,_,_,_,X,_,X,_,
jchin32 0:1305fa20a8db 57 _,_,_,X,X,_,_,_,_,_,_,_,X,_,_
jchin32 0:1305fa20a8db 58
jchin32 0:1305fa20a8db 59 };
jchin32 0:1305fa20a8db 60
jchin32 0:1305fa20a8db 61 int asteroid_sprite_4[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
jchin32 0:1305fa20a8db 62 _,_,_,X,_,_,_,_,_,_,_,X,_,_,_,
jchin32 0:1305fa20a8db 63 _,X,X,_,X,X,_,_,_,X,X,_,X,_,_,
jchin32 0:1305fa20a8db 64 X,_,_,_,_,_,X,X,X,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 65 _,X,_,_,_,_,_,_,_,_,_,_,_,_,X,
jchin32 0:1305fa20a8db 66 _,X,_,_,_,_,_,_,_,_,_,_,_,_,X,
jchin32 0:1305fa20a8db 67 _,_,X,_,_,_,_,_,_,_,_,_,X,X,_,
jchin32 0:1305fa20a8db 68 _,_,X,_,_,_,_,_,_,_,_,X,_,_,_,
jchin32 0:1305fa20a8db 69 _,X,_,_,_,_,_,_,_,_,_,_,X,X,_,
jchin32 0:1305fa20a8db 70 _,X,_,_,_,X,_,_,_,_,_,_,_,_,X,
jchin32 0:1305fa20a8db 71 X,_,_,_,X,_,X,X,_,_,_,_,_,X,_,
jchin32 0:1305fa20a8db 72 _,X,_,X,_,_,_,_,X,X,_,_,X,_,_,
jchin32 0:1305fa20a8db 73 _,_,X,_,_,_,_,_,_,_,X,X,_,_,_
jchin32 0:1305fa20a8db 74
jchin32 0:1305fa20a8db 75 };
jchin32 0:1305fa20a8db 76
jchin32 0:1305fa20a8db 77 int explosion[EARTH_HEIGHT * EARTH_WIDTH] = {
jchin32 0:1305fa20a8db 78 _,_,r,_,_,r,_,_,_,_,
jchin32 0:1305fa20a8db 79 _,r,r,_,r,O,r,_,_,_,
jchin32 0:1305fa20a8db 80 r,O,O,r,O,R,O,r,_,r,
jchin32 0:1305fa20a8db 81 _,r,O,R,R,R,R,O,r,r,
jchin32 0:1305fa20a8db 82 _,_,r,O,R,R,R,R,O,r,
jchin32 0:1305fa20a8db 83 _,r,O,R,R,R,R,O,r,_,
jchin32 0:1305fa20a8db 84 _,r,O,R,R,R,R,O,r,_,
jchin32 0:1305fa20a8db 85 r,O,O,r,O,r,r,O,O,r,
jchin32 0:1305fa20a8db 86 r,O,r,_,r,_,_,r,O,r,
jchin32 0:1305fa20a8db 87 _,r,_,_,_,_,_,_,r,r,
jchin32 0:1305fa20a8db 88 };
jchin32 0:1305fa20a8db 89
jchin32 0:1305fa20a8db 90 int erase[EARTH_WIDTH * EARTH_HEIGHT] = {
jchin32 0:1305fa20a8db 91 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 92 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 93 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 94 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 95 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 96 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 97 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 98 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 99 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 100 _,_,_,_,_,_,_,_,_,_,
jchin32 0:1305fa20a8db 101 };
jchin32 0:1305fa20a8db 102
jchin32 0:1305fa20a8db 103 bool bombUsed = false;
jchin32 0:1305fa20a8db 104 bool explodeAllAsteroids = false;
jchin32 0:1305fa20a8db 105
jchin32 0:1305fa20a8db 106 Asteroid1::Asteroid1() {
jchin32 0:1305fa20a8db 107 setX((rand() % (64 - EARTH_WIDTH - ASTEROID_WIDTH) + (ASTEROID_WIDTH / 2)));
jchin32 0:1305fa20a8db 108 setY((rand() % (64 - EARTH_HEIGHT - ASTEROID_HEIGHT)
jchin32 0:1305fa20a8db 109 + (ASTEROID_HEIGHT / 2)));
jchin32 0:1305fa20a8db 110 setX((rand() % 2 == 0) ? getX() : 128 - getX());
jchin32 0:1305fa20a8db 111 setY((rand() % 2 == 0) ? getY() : 128 - getY());
jchin32 0:1305fa20a8db 112 setXPath((rand() % 2 + 1) * (getX() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 113 setYPath((rand() % 2 + 1) * (getY() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 114 setSpeed(1);
jchin32 0:1305fa20a8db 115 setSprite(asteroid_sprite_1);
jchin32 0:1305fa20a8db 116 setDestroyed(false);
jchin32 0:1305fa20a8db 117 setHeight(ASTEROID_HEIGHT);
jchin32 0:1305fa20a8db 118 setWidth(ASTEROID_WIDTH);
jchin32 0:1305fa20a8db 119 }
jchin32 0:1305fa20a8db 120
jchin32 0:1305fa20a8db 121 Asteroid2::Asteroid2() {
jchin32 0:1305fa20a8db 122 setX((rand() % (64 - EARTH_WIDTH - ASTEROID_WIDTH) + (ASTEROID_WIDTH / 2)));
jchin32 0:1305fa20a8db 123 setY((rand() % (64 - EARTH_HEIGHT - ASTEROID_HEIGHT)
jchin32 0:1305fa20a8db 124 + (ASTEROID_HEIGHT / 2)));
jchin32 0:1305fa20a8db 125 setX((rand() % 2 == 0) ? getX() : 128 - getX());
jchin32 0:1305fa20a8db 126 setY((rand() % 2 == 0) ? getY() : 128 - getY());
jchin32 0:1305fa20a8db 127 setXPath((rand() % 4 + 1) * (getX() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 128 setYPath((rand() % 4 + 1) * (getY() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 129 setSpeed(1);
jchin32 0:1305fa20a8db 130 setSprite(asteroid_sprite_2);
jchin32 0:1305fa20a8db 131 setDestroyed(false);
jchin32 0:1305fa20a8db 132 setHeight(ASTEROID_HEIGHT);
jchin32 0:1305fa20a8db 133 setWidth(ASTEROID_WIDTH);
jchin32 0:1305fa20a8db 134 }
jchin32 0:1305fa20a8db 135
jchin32 0:1305fa20a8db 136 Asteroid3::Asteroid3() {
jchin32 0:1305fa20a8db 137 setX((rand() % (64 - EARTH_WIDTH - ASTEROID_WIDTH) + (ASTEROID_WIDTH / 2)));
jchin32 0:1305fa20a8db 138 setY((rand() % (64 - EARTH_HEIGHT - ASTEROID_HEIGHT)
jchin32 0:1305fa20a8db 139 + (ASTEROID_HEIGHT / 2)));
jchin32 0:1305fa20a8db 140 setX((rand() % 2 == 0) ? getX() : 128 - getX());
jchin32 0:1305fa20a8db 141 setY((rand() % 2 == 0) ? getY() : 128 - getY());
jchin32 0:1305fa20a8db 142 setXPath((rand() % 2 + 1) * (getX() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 143 setYPath((rand() % 2 + 1) * (getY() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 144 setSpeed(1);
jchin32 0:1305fa20a8db 145 setSprite(asteroid_sprite_3);
jchin32 0:1305fa20a8db 146 setDestroyed(false);
jchin32 0:1305fa20a8db 147 setHeight(ASTEROID_HEIGHT);
jchin32 0:1305fa20a8db 148 setWidth(ASTEROID_WIDTH);
jchin32 0:1305fa20a8db 149 }
jchin32 0:1305fa20a8db 150
jchin32 0:1305fa20a8db 151 Asteroid4::Asteroid4() {
jchin32 0:1305fa20a8db 152 setX((rand() % (64 - EARTH_WIDTH - ASTEROID_WIDTH) + (ASTEROID_WIDTH / 2)));
jchin32 0:1305fa20a8db 153 setY((rand() % (64 - EARTH_HEIGHT - ASTEROID_HEIGHT)
jchin32 0:1305fa20a8db 154 + (ASTEROID_HEIGHT / 2)));
jchin32 0:1305fa20a8db 155 setX((rand() % 2 == 0) ? getX() : 128 - getX());
jchin32 0:1305fa20a8db 156 setY((rand() % 2 == 0) ? getY() : 128 - getY());
jchin32 0:1305fa20a8db 157 setXPath((rand() % 2 + 1) * (getX() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 158 setYPath((rand() % 2 + 1) * (getY() > 63 ? -1 : 1));
jchin32 0:1305fa20a8db 159 setSpeed(1);
jchin32 0:1305fa20a8db 160 setSprite(asteroid_sprite_4);
jchin32 0:1305fa20a8db 161 setDestroyed(false);
jchin32 0:1305fa20a8db 162 setHeight(ASTEROID_HEIGHT);
jchin32 0:1305fa20a8db 163 setWidth(ASTEROID_WIDTH);
jchin32 0:1305fa20a8db 164 }
jchin32 0:1305fa20a8db 165
jchin32 0:1305fa20a8db 166
jchin32 0:1305fa20a8db 167 bool overlap(ScreenObject & object1, ScreenObject & object2) {
jchin32 0:1305fa20a8db 168 int delX = object1.getX() - object2.getX();
jchin32 0:1305fa20a8db 169 int delY = object1.getY() - object2.getY();
jchin32 0:1305fa20a8db 170 delX = (delX > 0 ? delX : -delX);
jchin32 0:1305fa20a8db 171 delY = (delY > 0 ? delY : -delY);
jchin32 0:1305fa20a8db 172 if (delX < (object1.getWidth() + object2.getWidth()) / 2) {
jchin32 0:1305fa20a8db 173 if (delY < (object1.getHeight() + object2.getHeight()) / 2) {
jchin32 0:1305fa20a8db 174 return true;
jchin32 0:1305fa20a8db 175 }
jchin32 0:1305fa20a8db 176 }
jchin32 0:1305fa20a8db 177 return false;
jchin32 0:1305fa20a8db 178 }
jchin32 0:1305fa20a8db 179
jchin32 0:1305fa20a8db 180
jchin32 0:1305fa20a8db 181 void pb1_hit_callback(void) {
jchin32 0:1305fa20a8db 182 if (!bombUsed) {
jchin32 0:1305fa20a8db 183 explodeAllAsteroids = true;
jchin32 0:1305fa20a8db 184 bombUsed = true;
jchin32 0:1305fa20a8db 185 return;
jchin32 0:1305fa20a8db 186 }
jchin32 0:1305fa20a8db 187 return;
jchin32 0:1305fa20a8db 188 }
jchin32 0:1305fa20a8db 189
jchin32 0:1305fa20a8db 190 Serial pc(USBTX,USBRX);
jchin32 0:1305fa20a8db 191 PinDetect pb1(p16);
jchin32 0:1305fa20a8db 192 Speaker mySpeaker(p21);
jchin32 0:1305fa20a8db 193
jchin32 0:1305fa20a8db 194 int main() {
jchin32 0:1305fa20a8db 195 set_time(0);
jchin32 0:1305fa20a8db 196 pb1.mode(PullUp);
jchin32 0:1305fa20a8db 197 wait(0.1);
jchin32 0:1305fa20a8db 198 pb1.attach_deasserted(&pb1_hit_callback);
jchin32 0:1305fa20a8db 199 pb1.setSampleFrequency();
jchin32 0:1305fa20a8db 200 uLCD_4DGL uLCD(p28, p27, p29);
jchin32 0:1305fa20a8db 201 uLCD.baudrate(300000);
jchin32 0:1305fa20a8db 202 wait(0.2);
jchin32 0:1305fa20a8db 203 srand(time(0)); // do this srand call here ONLY... no where else in the code!
jchin32 0:1305fa20a8db 204
jchin32 0:1305fa20a8db 205 ScreenObject * ActiveAsteroids[NUM_ASTEROIDS];
jchin32 0:1305fa20a8db 206 for (int i = 0; i < NUM_ASTEROIDS; i++) {
jchin32 0:1305fa20a8db 207 int asteroidNum = rand() % 4 + 1;
jchin32 0:1305fa20a8db 208 switch (asteroidNum) {
jchin32 0:1305fa20a8db 209 case 1:
jchin32 0:1305fa20a8db 210 ActiveAsteroids[i] = new Asteroid1;
jchin32 0:1305fa20a8db 211 break;
jchin32 0:1305fa20a8db 212 case 2:
jchin32 0:1305fa20a8db 213 ActiveAsteroids[i] = new Asteroid2;
jchin32 0:1305fa20a8db 214 break;
jchin32 0:1305fa20a8db 215 case 3:
jchin32 0:1305fa20a8db 216 ActiveAsteroids[i] = new Asteroid3;
jchin32 0:1305fa20a8db 217 break;
jchin32 0:1305fa20a8db 218 case 4:
jchin32 0:1305fa20a8db 219 ActiveAsteroids[i] = new Asteroid4;
jchin32 0:1305fa20a8db 220 break;
jchin32 0:1305fa20a8db 221 }
jchin32 0:1305fa20a8db 222 }
jchin32 0:1305fa20a8db 223
jchin32 0:1305fa20a8db 224 SpaceShipEarth ship;
jchin32 0:1305fa20a8db 225 double x = 0.0, y = 0.0, z = 0.0, factor = 50.0;
jchin32 0:1305fa20a8db 226 int offsetx = 63;
jchin32 0:1305fa20a8db 227 int offsety = 63;
jchin32 0:1305fa20a8db 228 MMA8452 acc(p9, p10, 40000);
jchin32 0:1305fa20a8db 229 acc.setBitDepth(MMA8452::BIT_DEPTH_12);
jchin32 0:1305fa20a8db 230 acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
jchin32 0:1305fa20a8db 231 acc.setDataRate(MMA8452::RATE_100);
jchin32 0:1305fa20a8db 232
jchin32 0:1305fa20a8db 233 bool gameOver = false;
jchin32 0:1305fa20a8db 234 bool gameWon = false;
jchin32 0:1305fa20a8db 235 time_t startTime;
jchin32 0:1305fa20a8db 236 startTime = time(0);
jchin32 0:1305fa20a8db 237 time_t timeElapsed = time(0)-startTime;
jchin32 0:1305fa20a8db 238
jchin32 0:1305fa20a8db 239 uLCD.filled_rectangle(0, 0, 127, 2, B);
jchin32 0:1305fa20a8db 240 mySpeaker.PlayNote(400.0, .25, .1);
jchin32 0:1305fa20a8db 241 wait(0.2);
jchin32 0:1305fa20a8db 242 mySpeaker.PlayNote(200.0, .25, .1);
jchin32 0:1305fa20a8db 243 wait(0.2);
jchin32 0:1305fa20a8db 244 mySpeaker.PlayNote(100.0, .25, .1);
jchin32 0:1305fa20a8db 245 while (!gameOver) {
jchin32 0:1305fa20a8db 246 if (timeElapsed >= 30) {
jchin32 0:1305fa20a8db 247 gameWon = true;
jchin32 0:1305fa20a8db 248 gameOver = true;
jchin32 0:1305fa20a8db 249 }
jchin32 0:1305fa20a8db 250 uLCD.filled_rectangle(127 - (127*timeElapsed)/30, 0, 127, 2, _);
jchin32 0:1305fa20a8db 251 if (explodeAllAsteroids) {
jchin32 0:1305fa20a8db 252 for (int i = 0; i < NUM_ASTEROIDS; i++) {
jchin32 0:1305fa20a8db 253 ActiveAsteroids[i]->update();
jchin32 0:1305fa20a8db 254 uLCD.BLIT(ActiveAsteroids[i]->getX() - (EARTH_WIDTH / 2),
jchin32 0:1305fa20a8db 255 ActiveAsteroids[i]->getY() - (EARTH_HEIGHT / 2),
jchin32 0:1305fa20a8db 256 EARTH_WIDTH, EARTH_HEIGHT, explosion);
jchin32 0:1305fa20a8db 257 mySpeaker.PlayNote(100.0, .1, .2);
jchin32 0:1305fa20a8db 258 wait(0.1);
jchin32 0:1305fa20a8db 259 mySpeaker.PlayNote(50.0, .1, .2);
jchin32 0:1305fa20a8db 260 uLCD.BLIT(ActiveAsteroids[i]->getX() - (EARTH_WIDTH / 2),
jchin32 0:1305fa20a8db 261 ActiveAsteroids[i]->getY() - (EARTH_HEIGHT / 2),
jchin32 0:1305fa20a8db 262 EARTH_WIDTH, EARTH_HEIGHT, erase);
jchin32 0:1305fa20a8db 263 delete ActiveAsteroids[i];
jchin32 0:1305fa20a8db 264 int asteroidNum = rand() % 4 + 1;
jchin32 0:1305fa20a8db 265 switch (asteroidNum) {
jchin32 0:1305fa20a8db 266 case 1:
jchin32 0:1305fa20a8db 267 ActiveAsteroids[i] = new Asteroid1;
jchin32 0:1305fa20a8db 268 break;
jchin32 0:1305fa20a8db 269 case 2:
jchin32 0:1305fa20a8db 270 ActiveAsteroids[i] = new Asteroid2;
jchin32 0:1305fa20a8db 271 break;
jchin32 0:1305fa20a8db 272 case 3:
jchin32 0:1305fa20a8db 273 ActiveAsteroids[i] = new Asteroid3;
jchin32 0:1305fa20a8db 274 break;
jchin32 0:1305fa20a8db 275 case 4:
jchin32 0:1305fa20a8db 276 ActiveAsteroids[i] = new Asteroid4;
jchin32 0:1305fa20a8db 277 break;
jchin32 0:1305fa20a8db 278 }
jchin32 0:1305fa20a8db 279 }
jchin32 0:1305fa20a8db 280 explodeAllAsteroids = false;
jchin32 0:1305fa20a8db 281 }
jchin32 0:1305fa20a8db 282 timeElapsed = time(0) - startTime;
jchin32 0:1305fa20a8db 283 ship.update();
jchin32 0:1305fa20a8db 284 for (int i = 0; i < NUM_ASTEROIDS; i++) {
jchin32 0:1305fa20a8db 285 ActiveAsteroids[i]->update();
jchin32 0:1305fa20a8db 286 }
jchin32 0:1305fa20a8db 287 if (!acc.isXYZReady()) {
jchin32 0:1305fa20a8db 288 wait(.01);
jchin32 0:1305fa20a8db 289 } else {
jchin32 0:1305fa20a8db 290 acc.readXYZGravity(&y, &x, &z);
jchin32 0:1305fa20a8db 291 ship.setX(-1 * x * factor + offsetx);
jchin32 0:1305fa20a8db 292 ship.setY(-1 * y * factor + offsety);
jchin32 0:1305fa20a8db 293 ship.draw();
jchin32 0:1305fa20a8db 294 for (int i = 0; i < NUM_ASTEROIDS; i++) {
jchin32 0:1305fa20a8db 295 if (ActiveAsteroids[i]->getDestroyed()) {
jchin32 0:1305fa20a8db 296 delete ActiveAsteroids[i];
jchin32 0:1305fa20a8db 297 int asteroidNum = rand() % 4 + 1;
jchin32 0:1305fa20a8db 298 switch (asteroidNum) {
jchin32 0:1305fa20a8db 299 case 1:
jchin32 0:1305fa20a8db 300 ActiveAsteroids[i] = new Asteroid1;
jchin32 0:1305fa20a8db 301 break;
jchin32 0:1305fa20a8db 302 case 2:
jchin32 0:1305fa20a8db 303 ActiveAsteroids[i] = new Asteroid2;
jchin32 0:1305fa20a8db 304 break;
jchin32 0:1305fa20a8db 305 case 3:
jchin32 0:1305fa20a8db 306 ActiveAsteroids[i] = new Asteroid3;
jchin32 0:1305fa20a8db 307 break;
jchin32 0:1305fa20a8db 308 case 4:
jchin32 0:1305fa20a8db 309 ActiveAsteroids[i] = new Asteroid4;
jchin32 0:1305fa20a8db 310 break;
jchin32 0:1305fa20a8db 311 }
jchin32 0:1305fa20a8db 312 }
jchin32 0:1305fa20a8db 313 ActiveAsteroids[i]->draw();
jchin32 0:1305fa20a8db 314 if (overlap(ship, *ActiveAsteroids[i])) {
jchin32 0:1305fa20a8db 315 gameOver = true;
jchin32 0:1305fa20a8db 316 mySpeaker.PlayNote(100.0, .1, .1);
jchin32 0:1305fa20a8db 317 uLCD.BLIT(ship.getX() - (EARTH_WIDTH / 2),
jchin32 0:1305fa20a8db 318 ship.getY() - (EARTH_HEIGHT / 2),
jchin32 0:1305fa20a8db 319 EARTH_WIDTH, EARTH_HEIGHT, explosion);
jchin32 0:1305fa20a8db 320 mySpeaker.PlayNote(50.0, .1, .1);
jchin32 0:1305fa20a8db 321 }
jchin32 0:1305fa20a8db 322 }
jchin32 0:1305fa20a8db 323 }
jchin32 0:1305fa20a8db 324 }
jchin32 0:1305fa20a8db 325 ship.update();
jchin32 0:1305fa20a8db 326 for (int i = 0; i < NUM_ASTEROIDS; i++) {
jchin32 0:1305fa20a8db 327 ActiveAsteroids[i]->update();
jchin32 0:1305fa20a8db 328 }
jchin32 0:1305fa20a8db 329 if (gameWon) {
jchin32 0:1305fa20a8db 330 uLCD.printf("You Won!");
jchin32 0:1305fa20a8db 331 mySpeaker.PlayNote(200.0, .2, .1);
jchin32 0:1305fa20a8db 332 wait(.1);
jchin32 0:1305fa20a8db 333 mySpeaker.PlayNote(800.0, .2, .1);
jchin32 0:1305fa20a8db 334 } else {
jchin32 0:1305fa20a8db 335 uLCD.printf("You lose...");
jchin32 0:1305fa20a8db 336 }
jchin32 0:1305fa20a8db 337 }