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