Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE PinDetect
main.cpp
- Committer:
- sralph3
- Date:
- 2018-11-30
- Revision:
- 2:fe6ab9956767
- Parent:
- 1:79577bd1e4cb
- Child:
- 3:8c6fa5e63937
File content as of revision 2:fe6ab9956767:
#include "uLCD_4DGL.h"
#include "MMA8452.h"
#include "Speaker.h"
#include "SSE.h"
#include "ConcreteAsteroid1.h"
#include "ConcreteAsteroid2.h"
#include "ConcreteAsteroid3.h"
#include "ConcreteAsteroid4.h"
#include "overlap.h"
#include <math.h>
#define ASTEROID_HEIGHT 12
#define ASTEROID_WIDTH 15
#define SPRITE_MAX 15
#define EARTH_WIDTH 10
#define EARTH_HEIGHT 10
#define EXPLOSION1_WIDTH 20
#define SCREEN_MAX 125
#define SCREEN_MIN 1
#define NUM_ASTEROIDS 4
#define Q 0x808000 //OLIVE
#define I 0x008000 //GREEN
#define S 0xC0C0C0 //SILVER
#define C 0x17202A //UFO GLASS
#define D 0x797D7F //DARK GREY
#define L 0x00FF00 //LIME
#define P 0xFF00FF //PINK
#define R 0xF1C40F //YELLOW
#define O 0xF39C12 //ORANGE
#define G 0xAAB7B8 //GREY
#define _ 0x000000 //BLACK
#define X 0xFFFFFF //WHITE
#define B 0x0000FF //BLUE
#define r 0xFF0000 //RED
uLCD_4DGL uLCD(p28, p27, p29);
Serial pc(USBTX,USBRX);
MMA8452 acc(p9, p10, 40000); //instantiate an acc object!
Speaker mySpeaker(p21);
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,_,_,_,_
};
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,_,_,_,_
};
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,_,_,_,X,_,_,_,
_,_,_,X,_,_,_,X,X,X,X,_,_,_,_
};
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,
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,I,S,
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,_,_,
};
int exp1[EARTH_WIDTH *EARTH_HEIGHT] = {
_,_,S,S,S,S,S,S,_,_,
_,R,r,r,r,r,r,r,S,R,
S,r,R,O,O,O,O,r,R,S,
S,r,O,R,R,R,R,R,r,S,
S,r,O,R,R,R,R,r,r,S,
S,r,O,R,R,R,R,r,r,S,
S,r,O,R,R,R,r,r,r,S,
S,r,R,R,O,O,O,O,O,S,
S,r,r,r,O,r,r,r,S,_,
_,S,S,S,S,S,S,S,_,_,
};
int main() {
uLCD.baudrate(300000);
wait(0.2);
srand(time(0)); // do this srandcall here ONLY... no where else in the code!
ScreenObject *AstAry[NUM_ASTEROIDS];
AstAry[0] = new ConcreteAsteroid1;
AstAry[1] = new ConcreteAsteroid2;
AstAry[2] = new ConcreteAsteroid3;
AstAry[3] = new ConcreteAsteroid4;
SSE ship;
//set parameters -- use these and don't change
acc.setBitDepth(MMA8452::BIT_DEPTH_12);
acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
acc.setDataRate(MMA8452::RATE_100);
time_t startTime;
startTime = time(0);
time_t timeElapsed = time(0)-startTime;
while (true){
uLCD.cls();
timeElapsed = time(0)-startTime;
double t = (double)timeElapsed;
double tw = (t/30)*SCREEN_MAX;
uLCD.filled_rectangle(0, 0 , SCREEN_MAX-ceil(tw) , 5, G);
if (timeElapsed >= 30){
uLCD.printf("\nYOU WIN!\n PRESS BUTTON TO RESTART");
wait(1);
return 0;
}
ship.update();
for(int i=0; i < NUM_ASTEROIDS; i++){
AstAry[i]->update();
if(AstAry[i]->outB()){
int rando = (rand() % 4);
if (rando == 0) {
AstAry[i] = new ConcreteAsteroid1;
} else if (rando == 1) {
AstAry[i] = new ConcreteAsteroid2;
} else if (rando == 2) {
AstAry[i] = new ConcreteAsteroid3;
} else {
AstAry[i] = new ConcreteAsteroid4;
}
}
if(overlap( ship, *AstAry[i])){
uLCD.BLIT(ship.xpos, ship.ypos, EARTH_WIDTH, EARTH_HEIGHT, exp1);
mySpeaker.PlayNote(800.0,0.25,0.1);
mySpeaker.PlayNote(400.0,0.25,0.1);
mySpeaker.PlayNote(200.0,0.25,0.1);
uLCD.printf("\nGAME OVER\n");
wait(2);
return 0;
}
AstAry[i]->draw();
}
ship.draw();
wait(.1);
}
}