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
Diff: Bullet/bullet.cpp
- Revision:
- 28:8dbb85f35be6
- Parent:
- 27:bd55ab4d137c
diff -r bd55ab4d137c -r 8dbb85f35be6 Bullet/bullet.cpp --- a/Bullet/bullet.cpp Fri Oct 30 11:08:31 2015 +0000 +++ b/Bullet/bullet.cpp Mon Mar 13 00:15:36 2017 +0000 @@ -3,42 +3,200 @@ #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 = ???; + 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) { - in_flight = true; + 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; -} \ No newline at end of file +}