![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
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@3:14a2729625f6, 2016-03-12 (annotated)
- 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?
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 | 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 | } |