World In Balance game
Dependencies: 4DGL-uLCD-SE PinDetect mbed
main.cpp@0:1305fa20a8db, 2017-11-08 (annotated)
- Committer:
- jchin32
- Date:
- Wed Nov 08 20:25:03 2017 +0000
- Revision:
- 0:1305fa20a8db
World In Balance Game
Who changed what in which revision?
User | Revision | Line number | New 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 | } |