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

Committer:
agamemaker
Date:
Sat Mar 12 01:58:53 2016 +0000
Revision:
3:14a2729625f6
Parent:
2:332ca4f1a3e3
Child:
4:563648944ecc
added turns

Who changed what in which revision?

UserRevisionLine numberNew contents of line
agamemaker 0:16094a49131e 1 #include "mbed.h"
agamemaker 0:16094a49131e 2 #include "rtos.h"
agamemaker 0:16094a49131e 3 #include "uLCD_4DGL.h"
agamemaker 1:0328ad927150 4 #include <math.h>
agamemaker 1:0328ad927150 5 #include <list>
agamemaker 1:0328ad927150 6 using namespace std;
agamemaker 3:14a2729625f6 7
agamemaker 2:332ca4f1a3e3 8 //constants
agamemaker 3:14a2729625f6 9 #define ACCEL .5
agamemaker 3:14a2729625f6 10 #define ROTTA .2
agamemaker 3:14a2729625f6 11
agamemaker 2:332ca4f1a3e3 12 //devices
agamemaker 0:16094a49131e 13 DigitalOut myled(LED1);
agamemaker 2:332ca4f1a3e3 14 uLCD_4DGL ulcd(p28,p27,p29);
agamemaker 0:16094a49131e 15
agamemaker 0:16094a49131e 16 class Movement
agamemaker 0:16094a49131e 17 {
agamemaker 1:0328ad927150 18 public:
agamemaker 1:0328ad927150 19 double x_pos; // x position of object
agamemaker 1:0328ad927150 20 double y_pos; //
agamemaker 1:0328ad927150 21 double x_vel; // x velocity of object
agamemaker 1:0328ad927150 22 double y_vel; //
agamemaker 1:0328ad927150 23 double angle; // angle of object
agamemaker 1:0328ad927150 24 int hit_rad; // hit box radius of object
agamemaker 1:0328ad927150 25 bool wrap;
agamemaker 1:0328ad927150 26 Movement(double xp,double yp,double xv,double yv,double a,double r,double w);
agamemaker 1:0328ad927150 27 void move();
agamemaker 1:0328ad927150 28 void accelerate();
agamemaker 3:14a2729625f6 29 void turn_left();
agamemaker 3:14a2729625f6 30 void turn_right();
agamemaker 1:0328ad927150 31
agamemaker 0:16094a49131e 32 };
agamemaker 0:16094a49131e 33
agamemaker 1:0328ad927150 34 Movement::Movement(double xp,double yp,double xv,double yv,double a,double r,double w)
agamemaker 1:0328ad927150 35 {
agamemaker 1:0328ad927150 36 x_pos = xp;
agamemaker 1:0328ad927150 37 y_pos = yp;
agamemaker 1:0328ad927150 38 x_vel = xv;
agamemaker 1:0328ad927150 39 y_vel = yv;
agamemaker 1:0328ad927150 40 angle = a;
agamemaker 1:0328ad927150 41 hit_rad = r;
agamemaker 1:0328ad927150 42 wrap = w;
agamemaker 1:0328ad927150 43 }
agamemaker 1:0328ad927150 44
agamemaker 1:0328ad927150 45
agamemaker 1:0328ad927150 46 void Movement::move()
agamemaker 1:0328ad927150 47 {
agamemaker 1:0328ad927150 48 x_pos += x_vel;
agamemaker 1:0328ad927150 49 y_pos += y_vel;
agamemaker 2:332ca4f1a3e3 50 if(x_pos < 0 || x_pos > 144 && x_pos < 0 || x_pos > 144) {
agamemaker 2:332ca4f1a3e3 51 if(wrap) {
agamemaker 3:14a2729625f6 52 x_pos += 144*(1 - ceil(x_pos/144));
agamemaker 3:14a2729625f6 53 y_pos += 144*(1 - ceil(y_pos/144));
agamemaker 2:332ca4f1a3e3 54 } else {
agamemaker 2:332ca4f1a3e3 55 }
agamemaker 2:332ca4f1a3e3 56 }
agamemaker 1:0328ad927150 57 }
agamemaker 1:0328ad927150 58
agamemaker 1:0328ad927150 59 void Movement::accelerate()
agamemaker 1:0328ad927150 60 {
agamemaker 2:332ca4f1a3e3 61 x_vel += ACCEL * cos(angle);
agamemaker 2:332ca4f1a3e3 62 y_vel += ACCEL * sin(angle);
agamemaker 2:332ca4f1a3e3 63 if(sqrt(pow(x_vel,2) + pow(y_vel,2)) > 10) {
agamemaker 1:0328ad927150 64 x_vel = x_vel * 10 / sqrt(pow(x_vel,2) + pow(y_vel,2));
agamemaker 1:0328ad927150 65 y_vel = y_vel * 10 / sqrt(pow(x_vel,2) + pow(y_vel,2));
agamemaker 1:0328ad927150 66 }
agamemaker 1:0328ad927150 67 }
agamemaker 1:0328ad927150 68
agamemaker 3:14a2729625f6 69 void Movement::turn_left(){
agamemaker 3:14a2729625f6 70 angle -= ROTTA;
agamemaker 3:14a2729625f6 71 }
agamemaker 3:14a2729625f6 72
agamemaker 3:14a2729625f6 73 void Movement::turn_right(){
agamemaker 3:14a2729625f6 74 angle += ROTTA;
agamemaker 3:14a2729625f6 75 }
agamemaker 3:14a2729625f6 76
agamemaker 2:332ca4f1a3e3 77 //collisions
agamemaker 1:0328ad927150 78 bool collision(Movement p1, Movement p2)
agamemaker 1:0328ad927150 79 {
agamemaker 1:0328ad927150 80 int rad = p1.hit_rad + p2.hit_rad;
agamemaker 1:0328ad927150 81 double dist = sqrt(pow((p1.x_pos - p2.x_pos),2) + pow((p1.y_pos - p2.y_pos),2));
agamemaker 1:0328ad927150 82 return dist < rad;
agamemaker 1:0328ad927150 83 }
agamemaker 1:0328ad927150 84
agamemaker 2:332ca4f1a3e3 85 void calc_collisions(Movement player, list<Movement> asteroids, list<Movement> bullets)
agamemaker 2:332ca4f1a3e3 86 {
agamemaker 1:0328ad927150 87 }
agamemaker 1:0328ad927150 88
agamemaker 2:332ca4f1a3e3 89 //drawing
agamemaker 2:332ca4f1a3e3 90 void draw_objs(Movement player, list<Movement> asteroids, list<Movement> bullets)
agamemaker 2:332ca4f1a3e3 91 {
agamemaker 2:332ca4f1a3e3 92 }
agamemaker 1:0328ad927150 93
agamemaker 1:0328ad927150 94 int main()
agamemaker 1:0328ad927150 95 {
agamemaker 1:0328ad927150 96 Movement player(50, 100, 0, -5, 0, 5, 1);
agamemaker 1:0328ad927150 97 list<Movement> asteroids();
agamemaker 1:0328ad927150 98 list<Movement> bullets();
agamemaker 0:16094a49131e 99 while(1) {
agamemaker 0:16094a49131e 100 player.move();
agamemaker 3:14a2729625f6 101 //calc_collisions();
agamemaker 1:0328ad927150 102 //draw_objs(player, asteroids, bullets);
agamemaker 1:0328ad927150 103
agamemaker 0:16094a49131e 104 }
agamemaker 0:16094a49131e 105 }