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
main.cpp@4:563648944ecc, 2016-03-12 (annotated)
- Committer:
- agamemaker
- Date:
- Sat Mar 12 03:57:01 2016 +0000
- Revision:
- 4:563648944ecc
- Parent:
- 3:14a2729625f6
- Child:
- 5:f41d3bfc6701
Draw
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:563648944ecc | 90 | void draw_triangle(Movement p){ |
agamemaker | 4:563648944ecc | 91 | int x1 = p.x_pos + p.hit_rad * cos(p.angle); |
agamemaker | 4:563648944ecc | 92 | int y1 = p.y_pos + p.hit_rad * cos(p.angle); |
agamemaker | 4:563648944ecc | 93 | int x2 = p.x_pos + p.hit_rad * cos(p.angle); |
agamemaker | 4:563648944ecc | 94 | int y2 = p.y_pos + p.hit_rad * cos(p.angle); |
agamemaker | 4:563648944ecc | 95 | int x3 = p.x_pos + p.hit_rad * cos(p.angle); |
agamemaker | 4:563648944ecc | 96 | int y3 = p.y_pos + p.hit_rad * cos(p.angle); |
agamemaker | 4:563648944ecc | 97 | ulcd.triangle(x1,y1,x2,y2,x3,y3,BLUE); |
agamemaker | 4:563648944ecc | 98 | } |
agamemaker | 4:563648944ecc | 99 | |
agamemaker | 2:332ca4f1a3e3 | 100 | void draw_objs(Movement player, list<Movement> asteroids, list<Movement> bullets) |
agamemaker | 2:332ca4f1a3e3 | 101 | { |
agamemaker | 4:563648944ecc | 102 | draw_triangle(player); |
agamemaker | 4:563648944ecc | 103 | ulcd.circle(player.x_pos,player.y_pos,player.hit_rad,BLUE); |
agamemaker | 2:332ca4f1a3e3 | 104 | } |
agamemaker | 1:0328ad927150 | 105 | |
agamemaker | 1:0328ad927150 | 106 | int main() |
agamemaker | 1:0328ad927150 | 107 | { |
agamemaker | 1:0328ad927150 | 108 | Movement player(50, 100, 0, -5, 0, 5, 1); |
agamemaker | 1:0328ad927150 | 109 | list<Movement> asteroids(); |
agamemaker | 1:0328ad927150 | 110 | list<Movement> bullets(); |
agamemaker | 0:16094a49131e | 111 | while(1) { |
agamemaker | 0:16094a49131e | 112 | player.move(); |
agamemaker | 3:14a2729625f6 | 113 | //calc_collisions(); |
agamemaker | 1:0328ad927150 | 114 | //draw_objs(player, asteroids, bullets); |
agamemaker | 1:0328ad927150 | 115 | |
agamemaker | 0:16094a49131e | 116 | } |
agamemaker | 4:563648944ecc | 117 | } |