WITB2
Dependencies: mbed 4DGL-uLCD-SE PinDetect
Diff: main.cpp
- Revision:
- 2:9ece21082838
- Parent:
- 1:21558533e3b9
- Child:
- 3:462904d1c1a9
diff -r 21558533e3b9 -r 9ece21082838 main.cpp --- a/main.cpp Wed Nov 08 20:19:16 2017 +0000 +++ b/main.cpp Mon Nov 13 21:49:05 2017 +0000 @@ -1,8 +1,9 @@ #include "mbed.h" #include "MMA8452.h" #include "uLCD_4DGL.h" -#include "PinDetect.h" +//#include "PinDetect.h" #include "Speaker.h" +#include <ctime> /*-----Define Statements-----*/ @@ -33,7 +34,8 @@ /*-----Sprites------*/ -int spaceship_earth1[EARTH_WIDTH * EARTH_HEIGHT] = { +int spaceship_earth1[EARTH_WIDTH * EARTH_HEIGHT] = +{ _,_,S,S,S,S,S,S,_,_, _,S,I,I,I,I,I,I,S,_, S,I,I,I,I,I,I,I,I,S, @@ -43,10 +45,11 @@ S,I,I,I,I,I,I,I,I,S, S,I,I,I,I,I,I,I,I,S, S,I,I,I,I,I,I,I,S,_, - _,S,S,S,S,S,S,S,_,_, + _,S,S,S,S,S,S,S,_,_ }; -int earth_blank[EARTH_WIDTH * EARTH_HEIGHT] = { +int earth_blank[EARTH_WIDTH * EARTH_HEIGHT] = +{ _,_,_,_,_,_,_,_,_,_, _,_,_,_,_,_,_,_,_,_, _,_,_,_,_,_,_,_,_,_, @@ -56,7 +59,87 @@ _,_,_,_,_,_,_,_,_,_, _,_,_,_,_,_,_,_,_,_, _,_,_,_,_,_,_,_,_,_, - _,_,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_,_ +}; + +int asteroid_sprite_1[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { +_,_,_,_,X,X,X,X,X,X,X,X,_,_,_, +_,_,_,X,_,_,_,_,_,_,_,_,X,_,_, +_,_,X,_,_,_,_,_,_,_,_,_,X,_,_, +_,X,_,_,_,_,_,_,_,_,_,_,X,_,_, +X,X,X,X,_,_,_,_,_,_,_,_,_,X,_, +_,_,_,X,_,_,_,_,_,_,_,_,_,X,_, +_,_,X,_,_,_,_,_,_,_,_,_,_,X,_, +_,X,_,_,_,_,_,X,_,_,_,_,_,X,_, +X,_,_,_,_,_,X,X,_,_,_,_,X,_,_, +_,X,_,_,_,X,_,X,_,_,_,_,X,_,_, +_,_,X,_,X,_,_,X,_,_,_,X,_,_,_, +_,_,_,X,_,_,_,X,X,X,X,_,_,_,_ +}; + + +int asteroid_sprite_2[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { +_,_,X,X,X,X,X,X,X,X,_,_,_,_,_, +_,_,_,X,_,_,_,_,_,_,X,X,_,_,_, +_,_,_,_,X,_,_,_,_,_,_,_,X,_,_, +X,X,X,X,X,X,_,_,_,_,_,_,_,X,_, +X,_,_,_,_,_,_,_,_,_,_,_,_,_,X, +X,_,_,_,_,_,_,_,_,_,_,_,_,X,X, +X,_,_,_,_,_,_,_,_,_,_,X,X,_,_, +_,X,_,_,_,_,_,_,_,_,X,_,_,_,_, +_,_,X,_,_,_,_,_,_,_,_,X,X,_,_, +_,_,_,X,_,_,_,_,X,_,_,_,_,X,X, +_,_,_,_,X,_,X,X,_,X,X,_,_,X,_, +_,_,_,_,_,X,_,_,_,_,_,X,X,_,_ +}; + + +int asteroid_sprite_3[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { +_,_,X,X,X,_,_,_,_,_,_,X,X,_,_, +_,X,_,_,_,X,X,_,_,_,X,_,_,X,_, +X,_,_,_,_,_,_,X,X,X,_,_,_,_,X, +_,X,_,_,_,_,_,_,_,_,_,_,_,X,_, +_,_,X,_,_,_,_,_,_,_,X,X,X,_,_, +_,_,_,X,_,_,_,_,_,_,X,X,_,_,_, +_,_,X,_,_,_,_,_,_,_,_,_,X,_,_, +_,X,_,_,_,_,_,_,_,_,_,_,_,X,_, +X,_,_,_,_,_,_,_,_,_,_,_,_,_,X, +_,X,_,_,_,X,X,X,_,_,_,_,_,X,_, +_,_,X,_,X,_,_,_,X,X,_,X,X,_,_, +_,_,_,X,_,_,_,_,_,_,X,X,X,_,_ +}; + + +int asteroid_sprite_4[ASTEROID_HEIGHT * ASTEROID_WIDTH] = { +_,_,_,X,X,_,_,_,_,_,X,_,_,_,_, +_,_,X,_,_,X,_,_,_,X,_,X,X,_,_, +_,X,_,_,_,_,X,_,X,_,_,_,_,X,_, +X,_,_,_,_,_,_,X,_,_,_,_,_,_,X, +X,_,_,_,_,_,_,_,_,_,_,_,_,X,_, +X,_,_,_,_,_,_,_,_,_,_,_,X,_,_, +X,_,_,_,_,_,_,_,_,_,_,_,_,X,_, +X,_,_,_,_,_,_,_,_,_,_,_,_,_,X, +X,_,_,_,_,_,_,_,_,_,_,_,_,X,_, +_,X,_,_,_,_,_,_,_,_,_,_,X,_,_, +_,_,X,_,_,_,_,_,_,_,_,X,_,_,_, +_,_,_,X,X,X,X,X,X,X,X,_,_,_,_ +}; + + +int asteroid_blank[ASTEROID_WIDTH * ASTEROID_HEIGHT] = +{ +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, +_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ }; @@ -77,7 +160,6 @@ - /*-----ScreenObject Class------*/ class ScreenObject @@ -85,7 +167,8 @@ public: //ScreenObject(); //setter functions - void setXPos(int x) + + /*void setXPos(int x) { x_pos = x; } @@ -93,7 +176,7 @@ void setYPos(int y) { y_pos = y; - } + } */ //getter functions // int getXPos(); @@ -119,13 +202,12 @@ } void draw() { - uLCD.BLIT(y_pos, x_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,spaceship_earth1); + uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,spaceship_earth1); } void update() { - uLCD.BLIT(y_pos, x_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,earth_blank); - //uLCD.filled_rectangle(-1*y*factor-3+offsety,-1*x*factor+radius+offsety,-1*y*factor+3+offsetx,-1*x*factor+radius+6+offsety, BLACK); + uLCD.BLIT(x_pos, y_pos, EARTH_WIDTH, EARTH_HEIGHT,earth_blank); if(!acc.isXYZReady()) { wait(0.02); @@ -133,18 +215,271 @@ else { acc.readXYZGravity(&x,&y,&z); //notice this is passed by reference use pointers - setXPos(-1*x*factor + offset); - setYPos(-1*y*factor + offset); - - draw(); - + x_pos = -1*x*factor + offset; + y_pos = -1*y*factor + offset; + } //end else - } + }//end if }; +/*-----AbstractAsteroid Class-----*/ + + +class AbstractAsteroid: public ScreenObject +{ +public: + void pickCorner(int corner) + { + switch (corner) + { + case 1: //top left + x_pos = 1; + y_pos = 1; + deltaX = rand() % 3 + 1; + deltaY = rand() % 3 + 1; + break; + case 2: //top right + x_pos = 125; + y_pos = 1; + deltaX = -1*(rand() % 3 + 1); + deltaY = rand() % 3 + 1; + break; + case 3: //bottom left + x_pos = 1; + y_pos = 125; + deltaX = rand() % 3 + 1; + deltaY = -1*(rand() % 3 + 1); + break; + case 4: //bottom right + x_pos = 125; + y_pos = 125; + deltaX = -1*(rand() % 3 + 1); + deltaY = -1*(rand() % 3 + 1); + break; + } + } + + void pickCorner() + { + int corner = rand() % 4 + 1; + + switch (corner) + { + case 1: //top left + x_pos = 1; + y_pos = 1; + deltaX = rand() % 3 + 1; + deltaY = rand() % 3 + 1; + break; + case 2: //top right + x_pos = 125; + y_pos = 1; + deltaX = -1*(rand() % 3 + 1); + deltaY = rand() % 3 + 1; + break; + case 3: //bottom left + x_pos = 1; + y_pos = 125; + deltaX = rand() % 3 + 1; + deltaY = -1*(rand() % 3 + 1); + break; + case 4: //bottom right + x_pos = 125; + y_pos = 125; + deltaX = -1*(rand() % 3 + 1); + deltaY = -1*(rand() % 3 + 1); + break; + } + } + + bool boundaryCheck() + { + if(((x_pos == 0) || (x_pos == 126)) || ((y_pos == 0) || (y_pos == 126))) + return true; + } + +protected: + int deltaX; + int deltaY; +}; + + + +//-----Concrete Asteroids-----// + +//-----Asteroid1-----// +class Asteroid1: public AbstractAsteroid +{ +public: + Asteroid1(int corner) + { + pickCorner(corner); + startTime = time(0); + } + + Asteroid1() + { + pickCorner(); + startTime = time(0); + } + + ~Asteroid1(void) + { + } + + void draw() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_1); + } + + void update() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); + wait(0.02); + time_t timeElapsed = time(0)-startTime; + x_pos = x_pos + (deltaX * timeElapsed); + y_pos = y_pos + (deltaY * timeElapsed); + + if(boundaryCheck() ) + { + delete this; + Asteroid1(); + } + } + +protected: + time_t startTime; +}; + + +//-----Asteroid2-----// +class Asteroid2: public AbstractAsteroid +{ +public: + Asteroid2(int corner) + { + pickCorner(corner); + startTime = time(0); + } + + Asteroid2() + { + pickCorner(); + startTime = time(0); + } + + void draw() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_2); + } + + void update() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); + wait(0.02); + time_t timeElapsed = time(0)-startTime; + x_pos = x_pos + (deltaX * timeElapsed); + y_pos = y_pos + (deltaY * timeElapsed); + + if(boundaryCheck() ) + { + Asteroid2(); + } + } + +protected: + time_t startTime; +}; + + + + +//-----Asteroid3-----// +class Asteroid3: public AbstractAsteroid +{ +public: + Asteroid3(int corner) + { + pickCorner(corner); + startTime = time(0); + } + + Asteroid3() + { + pickCorner(); + startTime = time(0); + } + + void draw() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_3); + } + + void update() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); + wait(0.02); + time_t timeElapsed = time(0)-startTime; + x_pos = x_pos + (deltaX * timeElapsed); + y_pos = y_pos + (deltaY * timeElapsed); + + if(boundaryCheck() ) + { + Asteroid3(); + } + } + +protected: + time_t startTime; +}; + + + +//-----Asteroid4-----// +class Asteroid4: public AbstractAsteroid +{ +public: + Asteroid4(int corner) + { + pickCorner(corner); + startTime = time(0); + } + + Asteroid4() + { + pickCorner(); + startTime = time(0); + } + + void draw() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_sprite_4); + } + + void update() + { + uLCD.BLIT(x_pos, y_pos, ASTEROID_WIDTH, ASTEROID_HEIGHT,asteroid_blank); + wait(0.02); + time_t timeElapsed = time(0)-startTime; + x_pos = x_pos + (deltaX * timeElapsed); + y_pos = y_pos + (deltaY * timeElapsed); + + if(boundaryCheck() ) + { + Asteroid4(); + } + } + +protected: + time_t startTime; +}; + + + + //Program Start @@ -153,9 +488,14 @@ uLCD.baudrate(300000); wait(0.2); srand(time(0)); // do this srand call here ONLY... no where else in the code! -//ScreenObject * ActiveAsteroids[NUM_ASTEROIDS]; + //ScreenObject * ActiveAsteroids[NUM_ASTEROIDS]; SpaceShipEarth ship; //instantiate a SpaceShipEarth object - + + + Asteroid1 rock1(1); + //Asteroid2 rock2(2); + //Asteroid3 rock3(3); + //Asteroid4 rock4(4); //set parameters -- use these and don't change acc.setBitDepth(MMA8452::BIT_DEPTH_12); @@ -166,7 +506,19 @@ while(1) { ship.update(); - //ship.draw(); + ship.draw(); + + rock1.update(); + rock1.draw(); + + //rock2.update(); + //rock2.draw(); + + //rock3.update(); + //rock3.draw(); + + //rock4.update(); + //rock4.draw(); } //end infinite while loop } //end main