The classic dueling tanks game for mbed.
Dependencies: 4DGL-uLCD-SE DRV2605 EthernetInterface Game_Synchronizer MMA8452 SDFileSystem SparkfunAnalogJoystick mbed-rtos mbed wave_player
Fork of 2035_Tanks_Shell by
Bullet/bullet.cpp
- Committer:
- macenzofan
- Date:
- 2017-03-13
- Revision:
- 28:8dbb85f35be6
- Parent:
- 27:bd55ab4d137c
File content as of revision 28:8dbb85f35be6:
#include "uLCD_4DGL.h"
#include "bullet.h"
#include "game_synchronizer.h"
#include "globals.h"
#include "math.h"
#include "SDFileSystem.h"
#include "wave_player.h"
#include "playSound.h"
extern Game_Synchronizer sync;
float et = 0;
int pixelcolor;
//int bouncy
// Initialize the bullet. Don't have to do much here.
// Keep a pointer to this bullet's tank.
// Set the speed, and default the bullet to not in_flight.
Bullet::Bullet(Tank* t) {
tank = t;
speed = 0;
in_flight = false;
}
//Bullet::Bouncy(Tank* t) {
//tank=t;
//speed=0;
//in_flight=false;
//}
// If in_flight, do nothing. Otherwise,
// set the in_flight flag, and initialize values needed for
// the trajectory calculations. (x0, y0), (vx0, vy0), time
// Hint: tank->barrel_end(...) is useful here.
void Bullet::shoot(void) {
if (in_flight==false){
in_flight = true;
tank->barrel_end(&x0,&y0);
vx0=cos(tank->barrel_theta)*speed;
vy0=sin(tank->barrel_theta)*speed;
x=x0;
y=y0;
sync.filled_circle(x,y,2,YELLOW);
sync.filled_circle(x,y,1,ORANGE);
wait(.5);
sync.filled_circle(x,y,2,SKY_COLOR);
sync.filled_circle(x,y,1,BLT_COLOR);
}
}
// If the bullet is in flight, calculate its new position
// after a time delta dt.
void Bullet::update_position(float dt) {
if (in_flight == true){
x=floor(x0+(vx0*dt));
y=floor(y0+(vy0*dt)-(4.9*dt*dt));
sync.filled_circle(x,y,1,BLT_COLOR);
}
}
int Bullet::time_step(float dt) {
// If the bullet hasn't hit anything,
// redraw the bullet at its new location.
if (in_flight == true){
sync.filled_circle(x,y,1,SKY_COLOR);
et += dt;
update_position(et);
// If it has hit something (obstacle, tank, edge of the screen),
// set the in_flight flag back to false, explode the nearby area,
// and return one of the following codes.
//if(bouncy==1){
//if(x>128 || y<0 || y>128){
//}
//}
//else{
if(x>128 || y<0 || y>128){
in_flight=false;
et=0;
return BULLET_OFF_SCREEN;
}
//}
else{
pixelcolor=sync.read_pixel(x,y);
if(sync.pixel_eq(pixelcolor,BLACK)==1){
sync.filled_circle(x,y,6, ORANGE);
sync.filled_circle(x,y,4, YELLOW);
sync.filled_circle(x,y,2, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,5, ORANGE);
sync.filled_circle(x,y,3, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,6, SKY_COLOR);
in_flight=false;
et=0;
return pixelcolor;
}
if(sync.pixel_eq(pixelcolor,TREE)==1){
sync.filled_circle(x,y,6, ORANGE);
sync.filled_circle(x,y,4, YELLOW);
sync.filled_circle(x,y,2, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,5, ORANGE);
sync.filled_circle(x,y,3, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,6, SKY_COLOR);
in_flight=false;
et=0;
return pixelcolor;
}
if(sync.pixel_eq(pixelcolor,GND_COLOR)==1){
sync.filled_circle(x,y,6, ORANGE);
sync.filled_circle(x,y,4, YELLOW);
sync.filled_circle(x,y,2, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,5, ORANGE);
sync.filled_circle(x,y,3, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,6, SKY_COLOR);
sync.filled_circle(x,y,6,BROWN);
sync.filled_circle(x,y+2,6, SKY_COLOR);
in_flight=false;
et=0;
return pixelcolor;
}
if(sync.pixel_eq(pixelcolor,WHITE)==1){
sync.filled_circle(x,y,6, ORANGE);
sync.filled_circle(x,y,4, YELLOW);
sync.filled_circle(x,y,2, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,5, ORANGE);
sync.filled_circle(x,y,3, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,6, SKY_COLOR);
in_flight=false;
et=0;
return pixelcolor;
}
if(sync.pixel_eq(pixelcolor,TANK_RED)==1){
sync.filled_circle(x,y,6, ORANGE);
sync.filled_circle(x,y,4, YELLOW);
sync.filled_circle(x,y,2, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,5, ORANGE);
sync.filled_circle(x,y,3, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,6, SKY_COLOR);
in_flight=false;
et=0;
return pixelcolor;
}
if(sync.pixel_eq(pixelcolor,TANK_BLUE)==1){
sync.filled_circle(x,y,6, ORANGE);
sync.filled_circle(x,y,4, YELLOW);
sync.filled_circle(x,y,2, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,5, ORANGE);
sync.filled_circle(x,y,3, TANK_RED);
playSound("/sd/wavfiles/Hit.wav");
sync.update();
sync.filled_circle(x,y,6, SKY_COLOR);
in_flight=false;
et=0;
return pixelcolor;
}
//if(sync.pixel_eq(pixelcolor,BARREL_GREY)==1){
//sync.filled_circle(x,y,6, ORANGE);
//sync.filled_circle(x,y,4, YELLOW);
//sync.filled_circle(x,y,2, TANK_RED);
//wait(.15);
//sync.update();
//sync.filled_circle(x,y,5, ORANGE);
//sync.filled_circle(x,y,3, TANK_RED);
//wait(.15);
//sync.update();
//sync.filled_circle(x,y,6, SKY_COLOR);
//in_flight=false;
//et=0;
//return pixelcolor;
}
}
// return codes:
// BULLET_NO_COLLISION: no collision
// BULLET_OFF_SCREEN: off the side of the screen
// Otherwise, return the color you've hit in 16bpp format.
return BULLET_NO_COLLISION;
}
