WITB2

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Committer:
Nydrel
Date:
Tue Nov 14 17:33:09 2017 +0000
Revision:
4:d128df681d05
Parent:
3:462904d1c1a9
Child:
5:ed52ac77cdf9
Asteroid Objects enter and exit the screen as expected. Program freezes after running for 15 seconds.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jd7142128 0:5e90b8577fef 1 #include "mbed.h"
jd7142128 0:5e90b8577fef 2 #include "MMA8452.h"
Nydrel 1:21558533e3b9 3 #include "uLCD_4DGL.h"
Nydrel 2:9ece21082838 4 //#include "PinDetect.h"
Nydrel 1:21558533e3b9 5 #include "Speaker.h"
Nydrel 2:9ece21082838 6 #include <ctime>
Nydrel 1:21558533e3b9 7
Nydrel 1:21558533e3b9 8 /*-----Define Statements-----*/
Nydrel 1:21558533e3b9 9
Nydrel 1:21558533e3b9 10 #define ASTEROID_HEIGHT 12
Nydrel 1:21558533e3b9 11 #define ASTEROID_WIDTH 15
Nydrel 1:21558533e3b9 12 #define SPRITE_MAX 15
Nydrel 1:21558533e3b9 13 #define EARTH_WIDTH 10
Nydrel 1:21558533e3b9 14 #define EARTH_HEIGHT 10
Nydrel 1:21558533e3b9 15 #define EXPLOSION1_WIDTH 20
Nydrel 1:21558533e3b9 16 #define SCREEN_MAX 125
Nydrel 1:21558533e3b9 17 #define SCREEN_MIN 1
Nydrel 1:21558533e3b9 18 #define NUM_ASTEROIDS 4
Nydrel 1:21558533e3b9 19 #define Q 0x808000 //OLIVE
Nydrel 1:21558533e3b9 20 #define I 0x008000 //GREEN
Nydrel 1:21558533e3b9 21 #define S 0xC0C0C0 //SILVER
Nydrel 1:21558533e3b9 22 #define C 0x17202A //UFO GLASS
Nydrel 1:21558533e3b9 23 #define D 0x797D7F //DARK GREY
Nydrel 1:21558533e3b9 24 #define L 0x00FF00 //LIME
Nydrel 1:21558533e3b9 25 #define P 0xFF00FF //PINK
Nydrel 1:21558533e3b9 26 #define R 0xF1C40F //YELLOW
Nydrel 1:21558533e3b9 27 #define O 0xF39C12 //ORANGE
Nydrel 1:21558533e3b9 28 #define G 0xAAB7B8 //GREY
Nydrel 1:21558533e3b9 29 #define _ 0x000000 //BLACK
Nydrel 1:21558533e3b9 30 #define X 0xFFFFFF //WHITE
Nydrel 1:21558533e3b9 31 #define B 0x0000FF //BLUE
Nydrel 1:21558533e3b9 32 #define r 0xFF0000 //RED
Nydrel 1:21558533e3b9 33
Nydrel 1:21558533e3b9 34
Nydrel 1:21558533e3b9 35 /*-----Sprites------*/
Nydrel 1:21558533e3b9 36
Nydrel 2:9ece21082838 37 int spaceship_earth1[EARTH_WIDTH * EARTH_HEIGHT] =
Nydrel 2:9ece21082838 38 {
Nydrel 1:21558533e3b9 39 _,_,S,S,S,S,S,S,_,_,
Nydrel 1:21558533e3b9 40 _,S,I,I,I,I,I,I,S,_,
Nydrel 1:21558533e3b9 41 S,I,I,I,I,I,I,I,I,S,
Nydrel 1:21558533e3b9 42 S,I,I,I,I,I,I,I,I,S,
Nydrel 1:21558533e3b9 43 S,I,I,I,I,I,I,I,I,S,
Nydrel 1:21558533e3b9 44 S,I,I,I,I,I,I,I,I,S,
Nydrel 1:21558533e3b9 45 S,I,I,I,I,I,I,I,I,S,
Nydrel 1:21558533e3b9 46 S,I,I,I,I,I,I,I,I,S,
Nydrel 1:21558533e3b9 47 S,I,I,I,I,I,I,I,S,_,
Nydrel 2:9ece21082838 48 _,S,S,S,S,S,S,S,_,_
Nydrel 1:21558533e3b9 49 };
Nydrel 1:21558533e3b9 50
Nydrel 2:9ece21082838 51 int earth_blank[EARTH_WIDTH * EARTH_HEIGHT] =
Nydrel 2:9ece21082838 52 {
Nydrel 1:21558533e3b9 53 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 54 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 55 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 56 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 57 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 58 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 59 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 60 _,_,_,_,_,_,_,_,_,_,
Nydrel 1:21558533e3b9 61 _,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 62 _,_,_,_,_,_,_,_,_,_
Nydrel 2:9ece21082838 63 };
Nydrel 2:9ece21082838 64
Nydrel 2:9ece21082838 65 int asteroid_sprite_1[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
Nydrel 2:9ece21082838 66 _,_,_,_,X,X,X,X,X,X,X,X,_,_,_,
Nydrel 2:9ece21082838 67 _,_,_,X,_,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 68 _,_,X,_,_,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 69 _,X,_,_,_,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 70 X,X,X,X,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 71 _,_,_,X,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 72 _,_,X,_,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 73 _,X,_,_,_,_,_,X,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 74 X,_,_,_,_,_,X,X,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 75 _,X,_,_,_,X,_,X,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 76 _,_,X,_,X,_,_,X,_,_,_,X,_,_,_,
Nydrel 2:9ece21082838 77 _,_,_,X,_,_,_,X,X,X,X,_,_,_,_
Nydrel 2:9ece21082838 78 };
Nydrel 2:9ece21082838 79
Nydrel 2:9ece21082838 80
Nydrel 2:9ece21082838 81 int asteroid_sprite_2[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
Nydrel 2:9ece21082838 82 _,_,X,X,X,X,X,X,X,X,_,_,_,_,_,
Nydrel 2:9ece21082838 83 _,_,_,X,_,_,_,_,_,_,X,X,_,_,_,
Nydrel 2:9ece21082838 84 _,_,_,_,X,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 85 X,X,X,X,X,X,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 86 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,
Nydrel 2:9ece21082838 87 X,_,_,_,_,_,_,_,_,_,_,_,_,X,X,
Nydrel 2:9ece21082838 88 X,_,_,_,_,_,_,_,_,_,_,X,X,_,_,
Nydrel 2:9ece21082838 89 _,X,_,_,_,_,_,_,_,_,X,_,_,_,_,
Nydrel 2:9ece21082838 90 _,_,X,_,_,_,_,_,_,_,_,X,X,_,_,
Nydrel 2:9ece21082838 91 _,_,_,X,_,_,_,_,X,_,_,_,_,X,X,
Nydrel 2:9ece21082838 92 _,_,_,_,X,_,X,X,_,X,X,_,_,X,_,
Nydrel 2:9ece21082838 93 _,_,_,_,_,X,_,_,_,_,_,X,X,_,_
Nydrel 2:9ece21082838 94 };
Nydrel 2:9ece21082838 95
Nydrel 2:9ece21082838 96
Nydrel 2:9ece21082838 97 int asteroid_sprite_3[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
Nydrel 2:9ece21082838 98 _,_,X,X,X,_,_,_,_,_,_,X,X,_,_,
Nydrel 2:9ece21082838 99 _,X,_,_,_,X,X,_,_,_,X,_,_,X,_,
Nydrel 2:9ece21082838 100 X,_,_,_,_,_,_,X,X,X,_,_,_,_,X,
Nydrel 2:9ece21082838 101 _,X,_,_,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 102 _,_,X,_,_,_,_,_,_,_,X,X,X,_,_,
Nydrel 2:9ece21082838 103 _,_,_,X,_,_,_,_,_,_,X,X,_,_,_,
Nydrel 2:9ece21082838 104 _,_,X,_,_,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 105 _,X,_,_,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 106 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,
Nydrel 2:9ece21082838 107 _,X,_,_,_,X,X,X,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 108 _,_,X,_,X,_,_,_,X,X,_,X,X,_,_,
Nydrel 2:9ece21082838 109 _,_,_,X,_,_,_,_,_,_,X,X,X,_,_
Nydrel 2:9ece21082838 110 };
Nydrel 2:9ece21082838 111
Nydrel 2:9ece21082838 112
Nydrel 2:9ece21082838 113 int asteroid_sprite_4[ASTEROID_HEIGHT * ASTEROID_WIDTH] = {
Nydrel 2:9ece21082838 114 _,_,_,X,X,_,_,_,_,_,X,_,_,_,_,
Nydrel 2:9ece21082838 115 _,_,X,_,_,X,_,_,_,X,_,X,X,_,_,
Nydrel 2:9ece21082838 116 _,X,_,_,_,_,X,_,X,_,_,_,_,X,_,
Nydrel 2:9ece21082838 117 X,_,_,_,_,_,_,X,_,_,_,_,_,_,X,
Nydrel 2:9ece21082838 118 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 119 X,_,_,_,_,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 120 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 121 X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,
Nydrel 2:9ece21082838 122 X,_,_,_,_,_,_,_,_,_,_,_,_,X,_,
Nydrel 2:9ece21082838 123 _,X,_,_,_,_,_,_,_,_,_,_,X,_,_,
Nydrel 2:9ece21082838 124 _,_,X,_,_,_,_,_,_,_,_,X,_,_,_,
Nydrel 2:9ece21082838 125 _,_,_,X,X,X,X,X,X,X,X,_,_,_,_
Nydrel 2:9ece21082838 126 };
Nydrel 2:9ece21082838 127
Nydrel 2:9ece21082838 128
Nydrel 2:9ece21082838 129 int asteroid_blank[ASTEROID_WIDTH * ASTEROID_HEIGHT] =
Nydrel 2:9ece21082838 130 {
Nydrel 2:9ece21082838 131 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 132 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 133 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 134 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 135 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 136 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 137 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 138 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 139 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 140 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 141 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
Nydrel 2:9ece21082838 142 _,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Nydrel 1:21558533e3b9 143 };
Nydrel 1:21558533e3b9 144
Nydrel 1:21558533e3b9 145
Nydrel 1:21558533e3b9 146 //Instantiate Accelerometer Object
Nydrel 1:21558533e3b9 147
jd7142128 0:5e90b8577fef 148 Serial pc(USBTX,USBRX); //not used in this program
Nydrel 1:21558533e3b9 149 MMA8452 acc(p9, p10, 40000); //instantiate an acc object!
Nydrel 1:21558533e3b9 150 double x, y, z;
jd7142128 0:5e90b8577fef 151
Nydrel 1:21558533e3b9 152 //Instantiate uLCD Object
jd7142128 0:5e90b8577fef 153
Nydrel 1:21558533e3b9 154 DigitalOut myled(LED1);
Nydrel 1:21558533e3b9 155 uLCD_4DGL uLCD(p28, p27, p29); // create a global uLCD object
Nydrel 1:21558533e3b9 156 //Speaker mySpeaker(p21);
Nydrel 1:21558533e3b9 157
Nydrel 1:21558533e3b9 158 int factor = 50;
Nydrel 1:21558533e3b9 159 int offset = 63;
Nydrel 1:21558533e3b9 160
Nydrel 1:21558533e3b9 161
Nydrel 1:21558533e3b9 162
Nydrel 1:21558533e3b9 163 /*-----ScreenObject Class------*/
jd7142128 0:5e90b8577fef 164
Nydrel 1:21558533e3b9 165 class ScreenObject
Nydrel 1:21558533e3b9 166 {
Nydrel 1:21558533e3b9 167 public:
Nydrel 1:21558533e3b9 168 //ScreenObject();
Nydrel 1:21558533e3b9 169 //setter functions
Nydrel 2:9ece21082838 170
Nydrel 2:9ece21082838 171 /*void setXPos(int x)
Nydrel 1:21558533e3b9 172 {
Nydrel 1:21558533e3b9 173 x_pos = x;
Nydrel 1:21558533e3b9 174 }
Nydrel 1:21558533e3b9 175
Nydrel 1:21558533e3b9 176 void setYPos(int y)
Nydrel 1:21558533e3b9 177 {
Nydrel 1:21558533e3b9 178 y_pos = y;
Nydrel 2:9ece21082838 179 } */
Nydrel 1:21558533e3b9 180
Nydrel 1:21558533e3b9 181 //getter functions
Nydrel 1:21558533e3b9 182 // int getXPos();
Nydrel 1:21558533e3b9 183 // int getYPos();
Nydrel 1:21558533e3b9 184
Nydrel 1:21558533e3b9 185 //pure virtual
Nydrel 1:21558533e3b9 186 virtual void draw() = 0;
Nydrel 1:21558533e3b9 187 virtual void update() = 0;
Nydrel 3:462904d1c1a9 188 virtual bool boundaryCheck() = 0;
Nydrel 1:21558533e3b9 189 protected:
Nydrel 1:21558533e3b9 190 int x_pos;
Nydrel 1:21558533e3b9 191 int y_pos;
Nydrel 1:21558533e3b9 192 };
Nydrel 1:21558533e3b9 193
Nydrel 1:21558533e3b9 194
Nydrel 1:21558533e3b9 195 /*-----SpaceShipEarth Class------*/
Nydrel 1:21558533e3b9 196
Nydrel 1:21558533e3b9 197 class SpaceShipEarth: public ScreenObject
Nydrel 1:21558533e3b9 198 {
Nydrel 1:21558533e3b9 199 public:
Nydrel 1:21558533e3b9 200 SpaceShipEarth() {
Nydrel 1:21558533e3b9 201 x_pos = 63;
Nydrel 1:21558533e3b9 202 y_pos = 63;
Nydrel 1:21558533e3b9 203 }
Nydrel 1:21558533e3b9 204
Nydrel 1:21558533e3b9 205 void draw() {
Nydrel 2:9ece21082838 206 uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,spaceship_earth1);
Nydrel 1:21558533e3b9 207 }
Nydrel 1:21558533e3b9 208
Nydrel 1:21558533e3b9 209 void update() {
Nydrel 1:21558533e3b9 210
Nydrel 2:9ece21082838 211 uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,earth_blank);
Nydrel 1:21558533e3b9 212
Nydrel 1:21558533e3b9 213 if(!acc.isXYZReady()) {
Nydrel 1:21558533e3b9 214 wait(0.02);
Nydrel 1:21558533e3b9 215 }
Nydrel 1:21558533e3b9 216
Nydrel 1:21558533e3b9 217 else {
Nydrel 1:21558533e3b9 218 acc.readXYZGravity(&x,&y,&z); //notice this is passed by reference use pointers
Nydrel 2:9ece21082838 219 x_pos = -1*x*factor + offset;
Nydrel 2:9ece21082838 220 y_pos = -1*y*factor + offset;
Nydrel 2:9ece21082838 221
Nydrel 1:21558533e3b9 222 } //end else
Nydrel 2:9ece21082838 223 }//end if
Nydrel 3:462904d1c1a9 224
Nydrel 3:462904d1c1a9 225 bool boundaryCheck()
Nydrel 3:462904d1c1a9 226 {
Nydrel 3:462904d1c1a9 227 if(((x_pos == 0) || (x_pos == 126)) || ((y_pos == 0) || (y_pos == 126)))
Nydrel 3:462904d1c1a9 228 return true;
Nydrel 3:462904d1c1a9 229 else
Nydrel 3:462904d1c1a9 230 return false;
Nydrel 3:462904d1c1a9 231 }
Nydrel 4:d128df681d05 232
Nydrel 4:d128df681d05 233 /*
Nydrel 4:d128df681d05 234
Nydrel 4:d128df681d05 235 */
Nydrel 1:21558533e3b9 236
Nydrel 1:21558533e3b9 237 };
Nydrel 1:21558533e3b9 238
Nydrel 1:21558533e3b9 239
Nydrel 1:21558533e3b9 240
Nydrel 2:9ece21082838 241 /*-----AbstractAsteroid Class-----*/
Nydrel 2:9ece21082838 242
Nydrel 2:9ece21082838 243
Nydrel 2:9ece21082838 244 class AbstractAsteroid: public ScreenObject
Nydrel 2:9ece21082838 245 {
Nydrel 2:9ece21082838 246 public:
Nydrel 2:9ece21082838 247 void pickCorner(int corner)
Nydrel 2:9ece21082838 248 {
Nydrel 2:9ece21082838 249 switch (corner)
Nydrel 2:9ece21082838 250 {
Nydrel 2:9ece21082838 251 case 1: //top left
Nydrel 2:9ece21082838 252 x_pos = 1;
Nydrel 2:9ece21082838 253 y_pos = 1;
Nydrel 2:9ece21082838 254 deltaX = rand() % 3 + 1;
Nydrel 2:9ece21082838 255 deltaY = rand() % 3 + 1;
Nydrel 2:9ece21082838 256 break;
Nydrel 2:9ece21082838 257 case 2: //top right
Nydrel 2:9ece21082838 258 x_pos = 125;
Nydrel 2:9ece21082838 259 y_pos = 1;
Nydrel 2:9ece21082838 260 deltaX = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 261 deltaY = rand() % 3 + 1;
Nydrel 2:9ece21082838 262 break;
Nydrel 2:9ece21082838 263 case 3: //bottom left
Nydrel 2:9ece21082838 264 x_pos = 1;
Nydrel 2:9ece21082838 265 y_pos = 125;
Nydrel 2:9ece21082838 266 deltaX = rand() % 3 + 1;
Nydrel 2:9ece21082838 267 deltaY = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 268 break;
Nydrel 2:9ece21082838 269 case 4: //bottom right
Nydrel 2:9ece21082838 270 x_pos = 125;
Nydrel 2:9ece21082838 271 y_pos = 125;
Nydrel 2:9ece21082838 272 deltaX = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 273 deltaY = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 274 break;
Nydrel 2:9ece21082838 275 }
Nydrel 2:9ece21082838 276 }
Nydrel 2:9ece21082838 277
Nydrel 2:9ece21082838 278 void pickCorner()
Nydrel 2:9ece21082838 279 {
Nydrel 2:9ece21082838 280 int corner = rand() % 4 + 1;
Nydrel 2:9ece21082838 281
Nydrel 2:9ece21082838 282 switch (corner)
Nydrel 2:9ece21082838 283 {
Nydrel 2:9ece21082838 284 case 1: //top left
Nydrel 2:9ece21082838 285 x_pos = 1;
Nydrel 2:9ece21082838 286 y_pos = 1;
Nydrel 2:9ece21082838 287 deltaX = rand() % 3 + 1;
Nydrel 2:9ece21082838 288 deltaY = rand() % 3 + 1;
Nydrel 2:9ece21082838 289 break;
Nydrel 2:9ece21082838 290 case 2: //top right
Nydrel 2:9ece21082838 291 x_pos = 125;
Nydrel 2:9ece21082838 292 y_pos = 1;
Nydrel 2:9ece21082838 293 deltaX = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 294 deltaY = rand() % 3 + 1;
Nydrel 2:9ece21082838 295 break;
Nydrel 2:9ece21082838 296 case 3: //bottom left
Nydrel 2:9ece21082838 297 x_pos = 1;
Nydrel 2:9ece21082838 298 y_pos = 125;
Nydrel 2:9ece21082838 299 deltaX = rand() % 3 + 1;
Nydrel 2:9ece21082838 300 deltaY = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 301 break;
Nydrel 2:9ece21082838 302 case 4: //bottom right
Nydrel 2:9ece21082838 303 x_pos = 125;
Nydrel 2:9ece21082838 304 y_pos = 125;
Nydrel 2:9ece21082838 305 deltaX = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 306 deltaY = -1*(rand() % 3 + 1);
Nydrel 2:9ece21082838 307 break;
Nydrel 2:9ece21082838 308 }
Nydrel 4:d128df681d05 309 }
Nydrel 2:9ece21082838 310
Nydrel 2:9ece21082838 311 bool boundaryCheck()
Nydrel 2:9ece21082838 312 {
Nydrel 4:d128df681d05 313 bool c1 = (deltaX > 1) && (x_pos >= 126); //if moving towards right side of screen
Nydrel 4:d128df681d05 314 bool c2 = (deltaX < 1) && (x_pos + ASTEROID_WIDTH <= 0); //if moving towards left side of screen
Nydrel 4:d128df681d05 315 bool c3 = (deltaY > 1) && (y_pos >= 126); //if moving towards bottom of screen
Nydrel 4:d128df681d05 316 bool c4 = (deltaY < 1) && (y_pos + ASTEROID_HEIGHT <= 0); //if moving towards top of screen
Nydrel 4:d128df681d05 317
Nydrel 4:d128df681d05 318 if(c1 || c2 || c3 || c4)
Nydrel 3:462904d1c1a9 319 return true;
Nydrel 3:462904d1c1a9 320 else
Nydrel 3:462904d1c1a9 321 return false;
Nydrel 2:9ece21082838 322 }
Nydrel 2:9ece21082838 323
Nydrel 2:9ece21082838 324 protected:
Nydrel 2:9ece21082838 325 int deltaX;
Nydrel 2:9ece21082838 326 int deltaY;
Nydrel 2:9ece21082838 327 };
Nydrel 2:9ece21082838 328
Nydrel 2:9ece21082838 329
Nydrel 2:9ece21082838 330
Nydrel 2:9ece21082838 331 //-----Concrete Asteroids-----//
Nydrel 2:9ece21082838 332
Nydrel 2:9ece21082838 333 //-----Asteroid1-----//
Nydrel 2:9ece21082838 334 class Asteroid1: public AbstractAsteroid
Nydrel 2:9ece21082838 335 {
Nydrel 2:9ece21082838 336 public:
Nydrel 2:9ece21082838 337 Asteroid1(int corner)
Nydrel 2:9ece21082838 338 {
Nydrel 2:9ece21082838 339 pickCorner(corner);
Nydrel 2:9ece21082838 340 startTime = time(0);
Nydrel 2:9ece21082838 341 }
Nydrel 2:9ece21082838 342
Nydrel 2:9ece21082838 343 Asteroid1()
Nydrel 2:9ece21082838 344 {
Nydrel 2:9ece21082838 345 pickCorner();
Nydrel 2:9ece21082838 346 startTime = time(0);
Nydrel 2:9ece21082838 347 }
Nydrel 2:9ece21082838 348
Nydrel 2:9ece21082838 349 ~Asteroid1(void)
Nydrel 2:9ece21082838 350 {
Nydrel 2:9ece21082838 351 }
Nydrel 2:9ece21082838 352
Nydrel 2:9ece21082838 353 void draw()
Nydrel 2:9ece21082838 354 {
Nydrel 2:9ece21082838 355 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_1);
Nydrel 2:9ece21082838 356 }
Nydrel 2:9ece21082838 357
Nydrel 2:9ece21082838 358 void update()
Nydrel 2:9ece21082838 359 {
Nydrel 2:9ece21082838 360 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank);
Nydrel 2:9ece21082838 361 wait(0.02);
Nydrel 2:9ece21082838 362 time_t timeElapsed = time(0)-startTime;
Nydrel 2:9ece21082838 363 x_pos = x_pos + (deltaX * timeElapsed);
Nydrel 2:9ece21082838 364 y_pos = y_pos + (deltaY * timeElapsed);
Nydrel 2:9ece21082838 365 }
Nydrel 2:9ece21082838 366
Nydrel 2:9ece21082838 367 protected:
Nydrel 2:9ece21082838 368 time_t startTime;
Nydrel 2:9ece21082838 369 };
Nydrel 2:9ece21082838 370
Nydrel 2:9ece21082838 371
Nydrel 2:9ece21082838 372 //-----Asteroid2-----//
Nydrel 2:9ece21082838 373 class Asteroid2: public AbstractAsteroid
Nydrel 2:9ece21082838 374 {
Nydrel 2:9ece21082838 375 public:
Nydrel 2:9ece21082838 376 Asteroid2(int corner)
Nydrel 2:9ece21082838 377 {
Nydrel 2:9ece21082838 378 pickCorner(corner);
Nydrel 2:9ece21082838 379 startTime = time(0);
Nydrel 2:9ece21082838 380 }
Nydrel 2:9ece21082838 381
Nydrel 2:9ece21082838 382 Asteroid2()
Nydrel 2:9ece21082838 383 {
Nydrel 2:9ece21082838 384 pickCorner();
Nydrel 2:9ece21082838 385 startTime = time(0);
Nydrel 2:9ece21082838 386 }
Nydrel 2:9ece21082838 387
Nydrel 2:9ece21082838 388 void draw()
Nydrel 2:9ece21082838 389 {
Nydrel 2:9ece21082838 390 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_2);
Nydrel 2:9ece21082838 391 }
Nydrel 2:9ece21082838 392
Nydrel 2:9ece21082838 393 void update()
Nydrel 2:9ece21082838 394 {
Nydrel 2:9ece21082838 395 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank);
Nydrel 2:9ece21082838 396 wait(0.02);
Nydrel 2:9ece21082838 397 time_t timeElapsed = time(0)-startTime;
Nydrel 2:9ece21082838 398 x_pos = x_pos + (deltaX * timeElapsed);
Nydrel 2:9ece21082838 399 y_pos = y_pos + (deltaY * timeElapsed);
Nydrel 2:9ece21082838 400 }
Nydrel 2:9ece21082838 401
Nydrel 2:9ece21082838 402 protected:
Nydrel 2:9ece21082838 403 time_t startTime;
Nydrel 2:9ece21082838 404 };
Nydrel 2:9ece21082838 405
Nydrel 2:9ece21082838 406
Nydrel 2:9ece21082838 407
Nydrel 2:9ece21082838 408
Nydrel 2:9ece21082838 409 //-----Asteroid3-----//
Nydrel 2:9ece21082838 410 class Asteroid3: public AbstractAsteroid
Nydrel 2:9ece21082838 411 {
Nydrel 2:9ece21082838 412 public:
Nydrel 2:9ece21082838 413 Asteroid3(int corner)
Nydrel 2:9ece21082838 414 {
Nydrel 2:9ece21082838 415 pickCorner(corner);
Nydrel 2:9ece21082838 416 startTime = time(0);
Nydrel 2:9ece21082838 417 }
Nydrel 2:9ece21082838 418
Nydrel 2:9ece21082838 419 Asteroid3()
Nydrel 2:9ece21082838 420 {
Nydrel 2:9ece21082838 421 pickCorner();
Nydrel 2:9ece21082838 422 startTime = time(0);
Nydrel 2:9ece21082838 423 }
Nydrel 2:9ece21082838 424
Nydrel 2:9ece21082838 425 void draw()
Nydrel 2:9ece21082838 426 {
Nydrel 2:9ece21082838 427 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_3);
Nydrel 2:9ece21082838 428 }
Nydrel 2:9ece21082838 429
Nydrel 2:9ece21082838 430 void update()
Nydrel 2:9ece21082838 431 {
Nydrel 2:9ece21082838 432 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank);
Nydrel 2:9ece21082838 433 wait(0.02);
Nydrel 2:9ece21082838 434 time_t timeElapsed = time(0)-startTime;
Nydrel 2:9ece21082838 435 x_pos = x_pos + (deltaX * timeElapsed);
Nydrel 2:9ece21082838 436 y_pos = y_pos + (deltaY * timeElapsed);
Nydrel 2:9ece21082838 437 }
Nydrel 2:9ece21082838 438
Nydrel 2:9ece21082838 439 protected:
Nydrel 2:9ece21082838 440 time_t startTime;
Nydrel 2:9ece21082838 441 };
Nydrel 2:9ece21082838 442
Nydrel 2:9ece21082838 443
Nydrel 2:9ece21082838 444
Nydrel 2:9ece21082838 445 //-----Asteroid4-----//
Nydrel 2:9ece21082838 446 class Asteroid4: public AbstractAsteroid
Nydrel 2:9ece21082838 447 {
Nydrel 2:9ece21082838 448 public:
Nydrel 2:9ece21082838 449 Asteroid4(int corner)
Nydrel 2:9ece21082838 450 {
Nydrel 2:9ece21082838 451 pickCorner(corner);
Nydrel 2:9ece21082838 452 startTime = time(0);
Nydrel 2:9ece21082838 453 }
Nydrel 2:9ece21082838 454
Nydrel 2:9ece21082838 455 Asteroid4()
Nydrel 2:9ece21082838 456 {
Nydrel 2:9ece21082838 457 pickCorner();
Nydrel 2:9ece21082838 458 startTime = time(0);
Nydrel 2:9ece21082838 459 }
Nydrel 2:9ece21082838 460
Nydrel 2:9ece21082838 461 void draw()
Nydrel 2:9ece21082838 462 {
Nydrel 2:9ece21082838 463 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_4);
Nydrel 2:9ece21082838 464 }
Nydrel 2:9ece21082838 465
Nydrel 2:9ece21082838 466 void update()
Nydrel 2:9ece21082838 467 {
Nydrel 2:9ece21082838 468 uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank);
Nydrel 2:9ece21082838 469 wait(0.02);
Nydrel 2:9ece21082838 470 time_t timeElapsed = time(0)-startTime;
Nydrel 2:9ece21082838 471 x_pos = x_pos + (deltaX * timeElapsed);
Nydrel 2:9ece21082838 472 y_pos = y_pos + (deltaY * timeElapsed);
Nydrel 2:9ece21082838 473 }
Nydrel 2:9ece21082838 474
Nydrel 2:9ece21082838 475 protected:
Nydrel 2:9ece21082838 476 time_t startTime;
Nydrel 2:9ece21082838 477 };
Nydrel 2:9ece21082838 478
Nydrel 2:9ece21082838 479
Nydrel 2:9ece21082838 480
Nydrel 2:9ece21082838 481
Nydrel 1:21558533e3b9 482
Nydrel 1:21558533e3b9 483 //Program Start
Nydrel 1:21558533e3b9 484
Nydrel 1:21558533e3b9 485 int main()
Nydrel 1:21558533e3b9 486 {
Nydrel 1:21558533e3b9 487 uLCD.baudrate(300000);
Nydrel 1:21558533e3b9 488 wait(0.2);
Nydrel 1:21558533e3b9 489 srand(time(0)); // do this srand call here ONLY... no where else in the code!
Nydrel 3:462904d1c1a9 490 ScreenObject * ActiveAsteroids[NUM_ASTEROIDS];
Nydrel 4:d128df681d05 491 SpaceShipEarth ship; //instantiate a SpaceShipEarth object
Nydrel 2:9ece21082838 492
Nydrel 2:9ece21082838 493
Nydrel 2:9ece21082838 494 Asteroid1 rock1(1);
Nydrel 2:9ece21082838 495 //Asteroid2 rock2(2);
Nydrel 2:9ece21082838 496 //Asteroid3 rock3(3);
Nydrel 2:9ece21082838 497 //Asteroid4 rock4(4);
Nydrel 3:462904d1c1a9 498
Nydrel 3:462904d1c1a9 499 ActiveAsteroids[0] = &rock1;
Nydrel 4:d128df681d05 500 //ActiveAsteroids[1] = &rock2;
Nydrel 4:d128df681d05 501 //ActiveAsteroids[2] = &rock3;
Nydrel 4:d128df681d05 502 //ActiveAsteroids[3] = &rock4;
Nydrel 1:21558533e3b9 503
Nydrel 1:21558533e3b9 504 //set parameters -- use these and don't change
Nydrel 1:21558533e3b9 505 acc.setBitDepth(MMA8452::BIT_DEPTH_12);
Nydrel 1:21558533e3b9 506 acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
Nydrel 1:21558533e3b9 507 acc.setDataRate(MMA8452::RATE_100);
Nydrel 1:21558533e3b9 508
Nydrel 1:21558533e3b9 509
Nydrel 1:21558533e3b9 510 while(1) {
Nydrel 4:d128df681d05 511 ship.update();
Nydrel 1:21558533e3b9 512
Nydrel 4:d128df681d05 513 ship.draw();
Nydrel 2:9ece21082838 514
Nydrel 3:462904d1c1a9 515
Nydrel 3:462904d1c1a9 516 ActiveAsteroids[0]->update();
Nydrel 3:462904d1c1a9 517
Nydrel 4:d128df681d05 518 if(ActiveAsteroids[0]->boundaryCheck())
Nydrel 4:d128df681d05 519 {
Nydrel 4:d128df681d05 520 wait(0.2);
Nydrel 4:d128df681d05 521 delete ActiveAsteroids[0];
Nydrel 4:d128df681d05 522 ActiveAsteroids[0] = NULL;
Nydrel 4:d128df681d05 523 Asteroid1 rock1;
Nydrel 4:d128df681d05 524 ActiveAsteroids[0] = &rock1;
Nydrel 4:d128df681d05 525 }
Nydrel 4:d128df681d05 526
Nydrel 3:462904d1c1a9 527 ActiveAsteroids[0]->draw();
Nydrel 2:9ece21082838 528
Nydrel 4:d128df681d05 529
Nydrel 4:d128df681d05 530 /*
Nydrel 4:d128df681d05 531 ActiveAsteroids[1]->update();
Nydrel 4:d128df681d05 532
Nydrel 4:d128df681d05 533 if(ActiveAsteroids[1]->boundaryCheck())
Nydrel 4:d128df681d05 534 {
Nydrel 4:d128df681d05 535 wait(0.2);
Nydrel 4:d128df681d05 536 delete ActiveAsteroids[1];
Nydrel 4:d128df681d05 537 ActiveAsteroids[1] = NULL;
Nydrel 4:d128df681d05 538 Asteroid1 rock2;
Nydrel 4:d128df681d05 539 ActiveAsteroids[1] = &rock2;
Nydrel 4:d128df681d05 540 }
Nydrel 4:d128df681d05 541
Nydrel 4:d128df681d05 542 ActiveAsteroids[1]->draw();
Nydrel 4:d128df681d05 543
Nydrel 4:d128df681d05 544
Nydrel 4:d128df681d05 545 ActiveAsteroids[2]->update();
Nydrel 2:9ece21082838 546
Nydrel 4:d128df681d05 547 if(ActiveAsteroids[2->boundaryCheck())
Nydrel 4:d128df681d05 548 {
Nydrel 4:d128df681d05 549 wait(0.2);
Nydrel 4:d128df681d05 550 delete ActiveAsteroids[2];
Nydrel 4:d128df681d05 551 ActiveAsteroids[2] = NULL;
Nydrel 4:d128df681d05 552 Asteroid1 rock3;
Nydrel 4:d128df681d05 553 ActiveAsteroids[2] = &rock3;
Nydrel 4:d128df681d05 554 }
Nydrel 4:d128df681d05 555
Nydrel 4:d128df681d05 556 ActiveAsteroids[2]->draw();
Nydrel 4:d128df681d05 557
Nydrel 4:d128df681d05 558
Nydrel 4:d128df681d05 559 ActiveAsteroids[3]->update();
Nydrel 2:9ece21082838 560
Nydrel 4:d128df681d05 561 if(ActiveAsteroids[3]->boundaryCheck())
Nydrel 4:d128df681d05 562 {
Nydrel 4:d128df681d05 563 wait(0.2);
Nydrel 4:d128df681d05 564 delete ActiveAsteroids[3];
Nydrel 4:d128df681d05 565 ActiveAsteroids[3] = NULL;
Nydrel 4:d128df681d05 566 Asteroid1 rock4;
Nydrel 4:d128df681d05 567 ActiveAsteroids[3] = &rock4;
Nydrel 4:d128df681d05 568 }
Nydrel 4:d128df681d05 569
Nydrel 4:d128df681d05 570
Nydrel 4:d128df681d05 571 ActiveAsteroids[3]->draw();
Nydrel 4:d128df681d05 572 */
Nydrel 4:d128df681d05 573
Nydrel 1:21558533e3b9 574 } //end infinite while loop
Nydrel 1:21558533e3b9 575 } //end main
Nydrel 1:21558533e3b9 576
Nydrel 1:21558533e3b9 577