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

Revision:
7:ff87ab834590
Parent:
6:7d1d8945b2f7
Child:
9:49f4b9dcab22
--- 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