Asteroids for MBED game with Bluetooth LE UART Friend Controller, uLCD, speaker, and uSD.
Dependencies: 4DGL-uLCD-SE mbed-rtos mbed
Asteroids for MBED game with Bluetooth LE UART Friend Controller
Diff: main.cpp
- Revision:
- 7:ff87ab834590
- Parent:
- 6:7d1d8945b2f7
- Child:
- 9:49f4b9dcab22
diff -r 7d1d8945b2f7 -r ff87ab834590 main.cpp --- a/main.cpp Sat Mar 12 17:47:01 2016 +0000 +++ b/main.cpp Sat Mar 12 18:50:30 2016 +0000 @@ -3,12 +3,14 @@ #include "uLCD_4DGL.h" #include <math.h> #include <list> +#include "SongPlayer.h" using namespace std; //constants #define ACCEL .5 #define ROTTA .2 -#define MAXSP 10 +#define MAXSP 7 +#define BULSP 10 //devices //DigitalOut myled(LED1); @@ -170,7 +172,7 @@ } else { left = 0; } - break; + break; case '8': //button 8 right arrow if (bhit=='1') { right = 1; @@ -208,6 +210,27 @@ for (iterator = asteroids.begin(); iterator != asteroids.end(); ++iterator) { move(*iterator); } + for (iterator = bullets.begin(); iterator != bullets.end(); ++iterator) { + move(*iterator); + } +} + +//garbage +void garbage(list<Movement> &bullets) +{ + bool del = 0; + list<Movement>::iterator iterator; + list<Movement>::iterator itcpy; + for (iterator = bullets.begin(); iterator != bullets.end(); ++iterator) { + if(iterator->x_pos < 0 || iterator->x_pos > 144 || iterator->y_pos < 0 || iterator->y_pos > 144) { + //bullets.erase(iterator); + del = 1; + itcpy = iterator; + } + } + if(del) { + bullets.erase(itcpy); + } } //collisions @@ -220,68 +243,96 @@ void calc_collisions(Movement &player, list<Movement> &asteroids, list<Movement> &bullets) { - list<Movement>::iterator iterator; - for (iterator = asteroids.begin(); iterator != asteroids.end(); ++iterator) { - if(collision(player,*iterator)){ + bool hit = 0; + list<Movement>::iterator it; + list<Movement>::iterator it2; + list<Movement>::iterator itacpy; + list<Movement>::iterator itbcpy; + for (it = asteroids.begin(); it != asteroids.end(); ++it) { + if(collision(player,*it)) { ulcd.printf("crash"); } } -} + for (it = asteroids.begin(); it != asteroids.end(); ++it) { + for (it2 = bullets.begin(); it2 != bullets.end(); ++it2) { + if(collision(*it,*it2)) { + ulcd.printf("hit"); + hit = 1; + itacpy = it; + itbcpy = it2; + } + } + } + if(hit) { + asteroids.erase(itacpy); + bullets.erase(itbcpy); + } + } //drawing -void draw_triangle(Movement p) -{ - int x1 = p.x_pos + p.hit_rad * cos(p.angle); - int y1 = p.y_pos + p.hit_rad * sin(p.angle); - int x2 = p.x_pos + p.hit_rad * cos(p.angle + 2.5); - int y2 = p.y_pos + p.hit_rad * sin(p.angle + 2.5); - int x3 = p.x_pos + p.hit_rad * cos(p.angle - 2.5); - int y3 = p.y_pos + p.hit_rad * sin(p.angle - 2.5); - ulcd.triangle(x1,y1,x2,y2,x3,y3,BLUE); -} + void draw_triangle(Movement p) { + int x1 = p.x_pos + p.hit_rad * cos(p.angle); + int y1 = p.y_pos + p.hit_rad * sin(p.angle); + int x2 = p.x_pos + p.hit_rad * cos(p.angle + 2.5); + int y2 = p.y_pos + p.hit_rad * sin(p.angle + 2.5); + int x3 = p.x_pos + p.hit_rad * cos(p.angle - 2.5); + int y3 = p.y_pos + p.hit_rad * sin(p.angle - 2.5); + ulcd.triangle(x1,y1,x2,y2,x3,y3,BLUE); + } -void draw_objs(Movement player, list<Movement> asteroids, list<Movement> bullets) -{ - ulcd.cls(); - draw_triangle(player); - ulcd.circle(player.x_pos,player.y_pos,player.hit_rad,BLUE); - list<Movement>::const_iterator iterator; - for (iterator = asteroids.begin(); iterator != asteroids.end(); ++iterator) { - ulcd.circle(iterator->x_pos,iterator->y_pos,iterator->hit_rad,RED); + void draw_objs(Movement player, list<Movement> asteroids, list<Movement> bullets) { + ulcd.cls(); + draw_triangle(player); + ulcd.circle(player.x_pos,player.y_pos,player.hit_rad,BLUE); + list<Movement>::const_iterator iterator; + for (iterator = asteroids.begin(); iterator != asteroids.end(); ++iterator) { + ulcd.circle(iterator->x_pos,iterator->y_pos,iterator->hit_rad,RED); + } + for (iterator = bullets.begin(); iterator != bullets.end(); ++iterator) { + ulcd.filled_circle(iterator->x_pos,iterator->y_pos,iterator->hit_rad,WHITE); + } } -} -int main() -{ - Thread buttons(controls); - Movement temp(100, 0, 0, 5, 0, 10, 1); - Movement player(50, 100, 0, -5, 0, 10, 1); - list<Movement> asteroids; - list<Movement> bullets; - asteroids.push_back(temp); - temp.assign(20, 0, 0, 5, 0, 10, 1); - asteroids.push_back(temp); - while(1) { - //controls - if(up) { - player.accelerate(); + int main() { + Thread buttons(controls); + Movement temp(100, 0, 0, 5, 0, 10, 1); + Movement player(50, 100, 0, -5, 0, 10, 1); + list<Movement> asteroids; + list<Movement> bullets; + asteroids.push_back(temp); + temp.assign(20, 0, 0, 5, 0, 10, 1); + asteroids.push_back(temp); + while(1) { + //controls + if(up) { + player.accelerate(); + } + if(left) { + player.turn_left(); + } + if(right) { + player.turn_right(); + } + if(stop) { + player.x_vel = 0; + player.y_vel = 0; + } + if(four) { + temp.x_pos = player.x_pos + player.hit_rad * cos(player.angle); + temp.y_pos = player.y_pos + player.hit_rad * sin(player.angle); + temp.x_vel = BULSP * cos(player.angle); + temp.y_vel = BULSP * sin(player.angle); + temp.angle = player.angle; + temp.hit_rad = 3; + temp.wrap = 0; + bullets.push_back(temp); + } + + //move + move_all(player, asteroids, bullets); + garbage(bullets); + calc_collisions(player, asteroids, bullets); + draw_objs(player, asteroids, bullets); + Thread::wait(game_speed); } - if(left) { - player.turn_left(); - } - if(right) { - player.turn_right(); - } - if(stop) { - player.x_vel = 0; - player.y_vel = 0; - } - //move - //player.move(); - - move_all(player, asteroids, bullets); - calc_collisions(player, asteroids, bullets); - draw_objs(player, asteroids, bullets); - Thread::wait(game_speed); - } -} \ No newline at end of file + } \ No newline at end of file