![](/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@7:ff87ab834590, 2016-03-12 (annotated)
- Committer:
- agamemaker
- Date:
- Sat Mar 12 18:50:30 2016 +0000
- Revision:
- 7:ff87ab834590
- Parent:
- 6:7d1d8945b2f7
- Child:
- 9:49f4b9dcab22
bullet collision;
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 | 7:ff87ab834590 | 6 | #include "SongPlayer.h" |
agamemaker | 1:0328ad927150 | 7 | using namespace std; |
agamemaker | 3:14a2729625f6 | 8 | |
agamemaker | 2:332ca4f1a3e3 | 9 | //constants |
agamemaker | 3:14a2729625f6 | 10 | #define ACCEL .5 |
agamemaker | 3:14a2729625f6 | 11 | #define ROTTA .2 |
agamemaker | 7:ff87ab834590 | 12 | #define MAXSP 7 |
agamemaker | 7:ff87ab834590 | 13 | #define BULSP 10 |
agamemaker | 3:14a2729625f6 | 14 | |
agamemaker | 2:332ca4f1a3e3 | 15 | //devices |
agamemaker | 5:f41d3bfc6701 | 16 | //DigitalOut myled(LED1); |
agamemaker | 2:332ca4f1a3e3 | 17 | uLCD_4DGL ulcd(p28,p27,p29); |
agamemaker | 5:f41d3bfc6701 | 18 | BusOut myled(LED1,LED2,LED3,LED4); |
agamemaker | 5:f41d3bfc6701 | 19 | Serial blue(p13,p14); |
agamemaker | 5:f41d3bfc6701 | 20 | |
agamemaker | 5:f41d3bfc6701 | 21 | //Globals |
agamemaker | 5:f41d3bfc6701 | 22 | int game_speed = 25; |
agamemaker | 5:f41d3bfc6701 | 23 | bool up = 0; |
agamemaker | 5:f41d3bfc6701 | 24 | bool left = 0; |
agamemaker | 5:f41d3bfc6701 | 25 | bool right = 0; |
agamemaker | 6:7d1d8945b2f7 | 26 | bool stop = 0; |
agamemaker | 5:f41d3bfc6701 | 27 | bool four = 0; |
agamemaker | 5:f41d3bfc6701 | 28 | |
agamemaker | 0:16094a49131e | 29 | |
agamemaker | 0:16094a49131e | 30 | class Movement |
agamemaker | 0:16094a49131e | 31 | { |
agamemaker | 1:0328ad927150 | 32 | public: |
agamemaker | 1:0328ad927150 | 33 | double x_pos; // x position of object |
agamemaker | 1:0328ad927150 | 34 | double y_pos; // |
agamemaker | 1:0328ad927150 | 35 | double x_vel; // x velocity of object |
agamemaker | 1:0328ad927150 | 36 | double y_vel; // |
agamemaker | 1:0328ad927150 | 37 | double angle; // angle of object |
agamemaker | 1:0328ad927150 | 38 | int hit_rad; // hit box radius of object |
agamemaker | 1:0328ad927150 | 39 | bool wrap; |
agamemaker | 1:0328ad927150 | 40 | Movement(double xp,double yp,double xv,double yv,double a,double r,double w); |
agamemaker | 6:7d1d8945b2f7 | 41 | void assign(double xp,double yp,double xv,double yv,double a,double r,double w); |
agamemaker | 6:7d1d8945b2f7 | 42 | //void move(); |
agamemaker | 1:0328ad927150 | 43 | void accelerate(); |
agamemaker | 3:14a2729625f6 | 44 | void turn_left(); |
agamemaker | 3:14a2729625f6 | 45 | void turn_right(); |
agamemaker | 1:0328ad927150 | 46 | |
agamemaker | 0:16094a49131e | 47 | }; |
agamemaker | 0:16094a49131e | 48 | |
agamemaker | 1:0328ad927150 | 49 | Movement::Movement(double xp,double yp,double xv,double yv,double a,double r,double w) |
agamemaker | 1:0328ad927150 | 50 | { |
agamemaker | 1:0328ad927150 | 51 | x_pos = xp; |
agamemaker | 1:0328ad927150 | 52 | y_pos = yp; |
agamemaker | 1:0328ad927150 | 53 | x_vel = xv; |
agamemaker | 1:0328ad927150 | 54 | y_vel = yv; |
agamemaker | 1:0328ad927150 | 55 | angle = a; |
agamemaker | 1:0328ad927150 | 56 | hit_rad = r; |
agamemaker | 1:0328ad927150 | 57 | wrap = w; |
agamemaker | 1:0328ad927150 | 58 | } |
agamemaker | 1:0328ad927150 | 59 | |
agamemaker | 6:7d1d8945b2f7 | 60 | void Movement::assign(double xp,double yp,double xv,double yv,double a,double r,double w) |
agamemaker | 6:7d1d8945b2f7 | 61 | { |
agamemaker | 6:7d1d8945b2f7 | 62 | x_pos = xp; |
agamemaker | 6:7d1d8945b2f7 | 63 | y_pos = yp; |
agamemaker | 6:7d1d8945b2f7 | 64 | x_vel = xv; |
agamemaker | 6:7d1d8945b2f7 | 65 | y_vel = yv; |
agamemaker | 6:7d1d8945b2f7 | 66 | angle = a; |
agamemaker | 6:7d1d8945b2f7 | 67 | hit_rad = r; |
agamemaker | 6:7d1d8945b2f7 | 68 | wrap = w; |
agamemaker | 6:7d1d8945b2f7 | 69 | } |
agamemaker | 1:0328ad927150 | 70 | |
agamemaker | 6:7d1d8945b2f7 | 71 | /*void Movement::move() |
agamemaker | 1:0328ad927150 | 72 | { |
agamemaker | 1:0328ad927150 | 73 | x_pos += x_vel; |
agamemaker | 1:0328ad927150 | 74 | y_pos += y_vel; |
agamemaker | 6:7d1d8945b2f7 | 75 | if(x_pos < 0 || x_pos > 144 || y_pos < 0 || y_pos > 144) { |
agamemaker | 2:332ca4f1a3e3 | 76 | if(wrap) { |
agamemaker | 3:14a2729625f6 | 77 | x_pos += 144*(1 - ceil(x_pos/144)); |
agamemaker | 3:14a2729625f6 | 78 | y_pos += 144*(1 - ceil(y_pos/144)); |
agamemaker | 2:332ca4f1a3e3 | 79 | } else { |
agamemaker | 6:7d1d8945b2f7 | 80 | } |
agamemaker | 2:332ca4f1a3e3 | 81 | } |
agamemaker | 6:7d1d8945b2f7 | 82 | }*/ |
agamemaker | 1:0328ad927150 | 83 | |
agamemaker | 1:0328ad927150 | 84 | void Movement::accelerate() |
agamemaker | 1:0328ad927150 | 85 | { |
agamemaker | 2:332ca4f1a3e3 | 86 | x_vel += ACCEL * cos(angle); |
agamemaker | 2:332ca4f1a3e3 | 87 | y_vel += ACCEL * sin(angle); |
agamemaker | 5:f41d3bfc6701 | 88 | if(sqrt(pow(x_vel,2) + pow(y_vel,2)) > MAXSP) { |
agamemaker | 5:f41d3bfc6701 | 89 | x_vel = x_vel * MAXSP / sqrt(pow(x_vel,2) + pow(y_vel,2)); |
agamemaker | 5:f41d3bfc6701 | 90 | y_vel = y_vel * MAXSP / sqrt(pow(x_vel,2) + pow(y_vel,2)); |
agamemaker | 1:0328ad927150 | 91 | } |
agamemaker | 1:0328ad927150 | 92 | } |
agamemaker | 1:0328ad927150 | 93 | |
agamemaker | 6:7d1d8945b2f7 | 94 | void Movement::turn_left() |
agamemaker | 6:7d1d8945b2f7 | 95 | { |
agamemaker | 3:14a2729625f6 | 96 | angle -= ROTTA; |
agamemaker | 3:14a2729625f6 | 97 | } |
agamemaker | 3:14a2729625f6 | 98 | |
agamemaker | 6:7d1d8945b2f7 | 99 | void Movement::turn_right() |
agamemaker | 6:7d1d8945b2f7 | 100 | { |
agamemaker | 3:14a2729625f6 | 101 | angle += ROTTA; |
agamemaker | 3:14a2729625f6 | 102 | } |
agamemaker | 5:f41d3bfc6701 | 103 | |
agamemaker | 5:f41d3bfc6701 | 104 | //Threads |
agamemaker | 5:f41d3bfc6701 | 105 | //Controls |
agamemaker | 5:f41d3bfc6701 | 106 | int read_getc(Serial &blue) |
agamemaker | 5:f41d3bfc6701 | 107 | { |
agamemaker | 6:7d1d8945b2f7 | 108 | while(!blue.readable()) { |
agamemaker | 5:f41d3bfc6701 | 109 | Thread::yield(); |
agamemaker | 5:f41d3bfc6701 | 110 | } |
agamemaker | 5:f41d3bfc6701 | 111 | return blue.getc(); |
agamemaker | 5:f41d3bfc6701 | 112 | } |
agamemaker | 5:f41d3bfc6701 | 113 | |
agamemaker | 5:f41d3bfc6701 | 114 | void controls(void const *args) |
agamemaker | 5:f41d3bfc6701 | 115 | { |
agamemaker | 5:f41d3bfc6701 | 116 | char bnum=0; |
agamemaker | 5:f41d3bfc6701 | 117 | char bhit=0; |
agamemaker | 5:f41d3bfc6701 | 118 | while(1) { |
agamemaker | 6:7d1d8945b2f7 | 119 | //Thread::wait(100); |
agamemaker | 5:f41d3bfc6701 | 120 | if (read_getc(blue)=='!') { |
agamemaker | 5:f41d3bfc6701 | 121 | if (read_getc(blue)=='B') { //button data packet |
agamemaker | 5:f41d3bfc6701 | 122 | bnum = read_getc(blue); //button number |
agamemaker | 5:f41d3bfc6701 | 123 | bhit = read_getc(blue); //1=hit, 0=release |
agamemaker | 5:f41d3bfc6701 | 124 | if (read_getc(blue)==char(~('!' + 'B' + bnum + bhit))) { //checksum OK? |
agamemaker | 5:f41d3bfc6701 | 125 | myled = bnum - '0'; //current button number will appear on LEDs |
agamemaker | 5:f41d3bfc6701 | 126 | switch (bnum) { |
agamemaker | 5:f41d3bfc6701 | 127 | case '1': //number button 1 |
agamemaker | 5:f41d3bfc6701 | 128 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 129 | game_speed = 25; |
agamemaker | 5:f41d3bfc6701 | 130 | } else { |
agamemaker | 5:f41d3bfc6701 | 131 | //add release code here |
agamemaker | 5:f41d3bfc6701 | 132 | } |
agamemaker | 5:f41d3bfc6701 | 133 | break; |
agamemaker | 5:f41d3bfc6701 | 134 | case '2': //number button 2 |
agamemaker | 5:f41d3bfc6701 | 135 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 136 | game_speed = 100; |
agamemaker | 5:f41d3bfc6701 | 137 | } else { |
agamemaker | 5:f41d3bfc6701 | 138 | //add release code here |
agamemaker | 5:f41d3bfc6701 | 139 | } |
agamemaker | 5:f41d3bfc6701 | 140 | break; |
agamemaker | 5:f41d3bfc6701 | 141 | case '3': //number button 3 |
agamemaker | 5:f41d3bfc6701 | 142 | if (bhit=='1') { |
agamemaker | 5:f41d3bfc6701 | 143 | //add hit code here |
agamemaker | 5:f41d3bfc6701 | 144 | } else { |
agamemaker | 5:f41d3bfc6701 | 145 | //add release code here |
agamemaker | 5:f41d3bfc6701 | 146 | } |
agamemaker | 5:f41d3bfc6701 | 147 | break; |
agamemaker | 5:f41d3bfc6701 | 148 | case '4': //number button 4 |
agamemaker | 5:f41d3bfc6701 | 149 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 150 | four = 1; |
agamemaker | 5:f41d3bfc6701 | 151 | } else { |
agamemaker | 6:7d1d8945b2f7 | 152 | four = 0; |
agamemaker | 5:f41d3bfc6701 | 153 | } |
agamemaker | 5:f41d3bfc6701 | 154 | break; |
agamemaker | 5:f41d3bfc6701 | 155 | case '5': //button 5 up arrow |
agamemaker | 5:f41d3bfc6701 | 156 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 157 | up = 1; |
agamemaker | 5:f41d3bfc6701 | 158 | } else { |
agamemaker | 6:7d1d8945b2f7 | 159 | up = 0; |
agamemaker | 6:7d1d8945b2f7 | 160 | } |
agamemaker | 6:7d1d8945b2f7 | 161 | break; |
agamemaker | 6:7d1d8945b2f7 | 162 | case '6': //button 6 down arrow |
agamemaker | 6:7d1d8945b2f7 | 163 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 164 | stop = 1; |
agamemaker | 6:7d1d8945b2f7 | 165 | } else { |
agamemaker | 6:7d1d8945b2f7 | 166 | stop = 0; |
agamemaker | 5:f41d3bfc6701 | 167 | } |
agamemaker | 5:f41d3bfc6701 | 168 | break; |
agamemaker | 5:f41d3bfc6701 | 169 | case '7': //button 7 left arrow |
agamemaker | 5:f41d3bfc6701 | 170 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 171 | left = 1; |
agamemaker | 5:f41d3bfc6701 | 172 | } else { |
agamemaker | 6:7d1d8945b2f7 | 173 | left = 0; |
agamemaker | 5:f41d3bfc6701 | 174 | } |
agamemaker | 7:ff87ab834590 | 175 | break; |
agamemaker | 5:f41d3bfc6701 | 176 | case '8': //button 8 right arrow |
agamemaker | 5:f41d3bfc6701 | 177 | if (bhit=='1') { |
agamemaker | 6:7d1d8945b2f7 | 178 | right = 1; |
agamemaker | 5:f41d3bfc6701 | 179 | } else { |
agamemaker | 6:7d1d8945b2f7 | 180 | right = 0; |
agamemaker | 5:f41d3bfc6701 | 181 | } |
agamemaker | 5:f41d3bfc6701 | 182 | break; |
agamemaker | 5:f41d3bfc6701 | 183 | default: |
agamemaker | 5:f41d3bfc6701 | 184 | break; |
agamemaker | 5:f41d3bfc6701 | 185 | } |
agamemaker | 5:f41d3bfc6701 | 186 | } |
agamemaker | 5:f41d3bfc6701 | 187 | } |
agamemaker | 5:f41d3bfc6701 | 188 | } |
agamemaker | 5:f41d3bfc6701 | 189 | } |
agamemaker | 5:f41d3bfc6701 | 190 | } |
agamemaker | 6:7d1d8945b2f7 | 191 | |
agamemaker | 6:7d1d8945b2f7 | 192 | void move(Movement &p) |
agamemaker | 6:7d1d8945b2f7 | 193 | { |
agamemaker | 6:7d1d8945b2f7 | 194 | p.x_pos += p.x_vel; |
agamemaker | 6:7d1d8945b2f7 | 195 | p.y_pos += p.y_vel; |
agamemaker | 6:7d1d8945b2f7 | 196 | if(p.x_pos < 0 || p.x_pos > 144 || p.y_pos < 0 || p.y_pos > 144) { |
agamemaker | 6:7d1d8945b2f7 | 197 | if(p.wrap) { |
agamemaker | 6:7d1d8945b2f7 | 198 | p.x_pos += 144*(1 - ceil(p.x_pos/144)); |
agamemaker | 6:7d1d8945b2f7 | 199 | p.y_pos += 144*(1 - ceil(p.y_pos/144)); |
agamemaker | 6:7d1d8945b2f7 | 200 | } else { |
agamemaker | 6:7d1d8945b2f7 | 201 | } |
agamemaker | 6:7d1d8945b2f7 | 202 | } |
agamemaker | 6:7d1d8945b2f7 | 203 | } |
agamemaker | 6:7d1d8945b2f7 | 204 | |
agamemaker | 6:7d1d8945b2f7 | 205 | //move |
agamemaker | 6:7d1d8945b2f7 | 206 | void move_all(Movement &player, list<Movement> &asteroids, list<Movement> &bullets) |
agamemaker | 6:7d1d8945b2f7 | 207 | { |
agamemaker | 6:7d1d8945b2f7 | 208 | move(player); |
agamemaker | 6:7d1d8945b2f7 | 209 | list<Movement>::iterator iterator; |
agamemaker | 6:7d1d8945b2f7 | 210 | for (iterator = asteroids.begin(); iterator != asteroids.end(); ++iterator) { |
agamemaker | 6:7d1d8945b2f7 | 211 | move(*iterator); |
agamemaker | 6:7d1d8945b2f7 | 212 | } |
agamemaker | 7:ff87ab834590 | 213 | for (iterator = bullets.begin(); iterator != bullets.end(); ++iterator) { |
agamemaker | 7:ff87ab834590 | 214 | move(*iterator); |
agamemaker | 7:ff87ab834590 | 215 | } |
agamemaker | 7:ff87ab834590 | 216 | } |
agamemaker | 7:ff87ab834590 | 217 | |
agamemaker | 7:ff87ab834590 | 218 | //garbage |
agamemaker | 7:ff87ab834590 | 219 | void garbage(list<Movement> &bullets) |
agamemaker | 7:ff87ab834590 | 220 | { |
agamemaker | 7:ff87ab834590 | 221 | bool del = 0; |
agamemaker | 7:ff87ab834590 | 222 | list<Movement>::iterator iterator; |
agamemaker | 7:ff87ab834590 | 223 | list<Movement>::iterator itcpy; |
agamemaker | 7:ff87ab834590 | 224 | for (iterator = bullets.begin(); iterator != bullets.end(); ++iterator) { |
agamemaker | 7:ff87ab834590 | 225 | if(iterator->x_pos < 0 || iterator->x_pos > 144 || iterator->y_pos < 0 || iterator->y_pos > 144) { |
agamemaker | 7:ff87ab834590 | 226 | //bullets.erase(iterator); |
agamemaker | 7:ff87ab834590 | 227 | del = 1; |
agamemaker | 7:ff87ab834590 | 228 | itcpy = iterator; |
agamemaker | 7:ff87ab834590 | 229 | } |
agamemaker | 7:ff87ab834590 | 230 | } |
agamemaker | 7:ff87ab834590 | 231 | if(del) { |
agamemaker | 7:ff87ab834590 | 232 | bullets.erase(itcpy); |
agamemaker | 7:ff87ab834590 | 233 | } |
agamemaker | 6:7d1d8945b2f7 | 234 | } |
agamemaker | 6:7d1d8945b2f7 | 235 | |
agamemaker | 2:332ca4f1a3e3 | 236 | //collisions |
agamemaker | 1:0328ad927150 | 237 | bool collision(Movement p1, Movement p2) |
agamemaker | 1:0328ad927150 | 238 | { |
agamemaker | 1:0328ad927150 | 239 | int rad = p1.hit_rad + p2.hit_rad; |
agamemaker | 1:0328ad927150 | 240 | double dist = sqrt(pow((p1.x_pos - p2.x_pos),2) + pow((p1.y_pos - p2.y_pos),2)); |
agamemaker | 1:0328ad927150 | 241 | return dist < rad; |
agamemaker | 1:0328ad927150 | 242 | } |
agamemaker | 1:0328ad927150 | 243 | |
agamemaker | 6:7d1d8945b2f7 | 244 | void calc_collisions(Movement &player, list<Movement> &asteroids, list<Movement> &bullets) |
agamemaker | 2:332ca4f1a3e3 | 245 | { |
agamemaker | 7:ff87ab834590 | 246 | bool hit = 0; |
agamemaker | 7:ff87ab834590 | 247 | list<Movement>::iterator it; |
agamemaker | 7:ff87ab834590 | 248 | list<Movement>::iterator it2; |
agamemaker | 7:ff87ab834590 | 249 | list<Movement>::iterator itacpy; |
agamemaker | 7:ff87ab834590 | 250 | list<Movement>::iterator itbcpy; |
agamemaker | 7:ff87ab834590 | 251 | for (it = asteroids.begin(); it != asteroids.end(); ++it) { |
agamemaker | 7:ff87ab834590 | 252 | if(collision(player,*it)) { |
agamemaker | 6:7d1d8945b2f7 | 253 | ulcd.printf("crash"); |
agamemaker | 6:7d1d8945b2f7 | 254 | } |
agamemaker | 6:7d1d8945b2f7 | 255 | } |
agamemaker | 7:ff87ab834590 | 256 | for (it = asteroids.begin(); it != asteroids.end(); ++it) { |
agamemaker | 7:ff87ab834590 | 257 | for (it2 = bullets.begin(); it2 != bullets.end(); ++it2) { |
agamemaker | 7:ff87ab834590 | 258 | if(collision(*it,*it2)) { |
agamemaker | 7:ff87ab834590 | 259 | ulcd.printf("hit"); |
agamemaker | 7:ff87ab834590 | 260 | hit = 1; |
agamemaker | 7:ff87ab834590 | 261 | itacpy = it; |
agamemaker | 7:ff87ab834590 | 262 | itbcpy = it2; |
agamemaker | 7:ff87ab834590 | 263 | } |
agamemaker | 7:ff87ab834590 | 264 | } |
agamemaker | 7:ff87ab834590 | 265 | } |
agamemaker | 7:ff87ab834590 | 266 | if(hit) { |
agamemaker | 7:ff87ab834590 | 267 | asteroids.erase(itacpy); |
agamemaker | 7:ff87ab834590 | 268 | bullets.erase(itbcpy); |
agamemaker | 7:ff87ab834590 | 269 | } |
agamemaker | 7:ff87ab834590 | 270 | } |
agamemaker | 1:0328ad927150 | 271 | |
agamemaker | 2:332ca4f1a3e3 | 272 | //drawing |
agamemaker | 7:ff87ab834590 | 273 | void draw_triangle(Movement p) { |
agamemaker | 7:ff87ab834590 | 274 | int x1 = p.x_pos + p.hit_rad * cos(p.angle); |
agamemaker | 7:ff87ab834590 | 275 | int y1 = p.y_pos + p.hit_rad * sin(p.angle); |
agamemaker | 7:ff87ab834590 | 276 | int x2 = p.x_pos + p.hit_rad * cos(p.angle + 2.5); |
agamemaker | 7:ff87ab834590 | 277 | int y2 = p.y_pos + p.hit_rad * sin(p.angle + 2.5); |
agamemaker | 7:ff87ab834590 | 278 | int x3 = p.x_pos + p.hit_rad * cos(p.angle - 2.5); |
agamemaker | 7:ff87ab834590 | 279 | int y3 = p.y_pos + p.hit_rad * sin(p.angle - 2.5); |
agamemaker | 7:ff87ab834590 | 280 | ulcd.triangle(x1,y1,x2,y2,x3,y3,BLUE); |
agamemaker | 7:ff87ab834590 | 281 | } |
agamemaker | 6:7d1d8945b2f7 | 282 | |
agamemaker | 7:ff87ab834590 | 283 | void draw_objs(Movement player, list<Movement> asteroids, list<Movement> bullets) { |
agamemaker | 7:ff87ab834590 | 284 | ulcd.cls(); |
agamemaker | 7:ff87ab834590 | 285 | draw_triangle(player); |
agamemaker | 7:ff87ab834590 | 286 | ulcd.circle(player.x_pos,player.y_pos,player.hit_rad,BLUE); |
agamemaker | 7:ff87ab834590 | 287 | list<Movement>::const_iterator iterator; |
agamemaker | 7:ff87ab834590 | 288 | for (iterator = asteroids.begin(); iterator != asteroids.end(); ++iterator) { |
agamemaker | 7:ff87ab834590 | 289 | ulcd.circle(iterator->x_pos,iterator->y_pos,iterator->hit_rad,RED); |
agamemaker | 7:ff87ab834590 | 290 | } |
agamemaker | 7:ff87ab834590 | 291 | for (iterator = bullets.begin(); iterator != bullets.end(); ++iterator) { |
agamemaker | 7:ff87ab834590 | 292 | ulcd.filled_circle(iterator->x_pos,iterator->y_pos,iterator->hit_rad,WHITE); |
agamemaker | 7:ff87ab834590 | 293 | } |
agamemaker | 6:7d1d8945b2f7 | 294 | } |
agamemaker | 1:0328ad927150 | 295 | |
agamemaker | 7:ff87ab834590 | 296 | int main() { |
agamemaker | 7:ff87ab834590 | 297 | Thread buttons(controls); |
agamemaker | 7:ff87ab834590 | 298 | Movement temp(100, 0, 0, 5, 0, 10, 1); |
agamemaker | 7:ff87ab834590 | 299 | Movement player(50, 100, 0, -5, 0, 10, 1); |
agamemaker | 7:ff87ab834590 | 300 | list<Movement> asteroids; |
agamemaker | 7:ff87ab834590 | 301 | list<Movement> bullets; |
agamemaker | 7:ff87ab834590 | 302 | asteroids.push_back(temp); |
agamemaker | 7:ff87ab834590 | 303 | temp.assign(20, 0, 0, 5, 0, 10, 1); |
agamemaker | 7:ff87ab834590 | 304 | asteroids.push_back(temp); |
agamemaker | 7:ff87ab834590 | 305 | while(1) { |
agamemaker | 7:ff87ab834590 | 306 | //controls |
agamemaker | 7:ff87ab834590 | 307 | if(up) { |
agamemaker | 7:ff87ab834590 | 308 | player.accelerate(); |
agamemaker | 7:ff87ab834590 | 309 | } |
agamemaker | 7:ff87ab834590 | 310 | if(left) { |
agamemaker | 7:ff87ab834590 | 311 | player.turn_left(); |
agamemaker | 7:ff87ab834590 | 312 | } |
agamemaker | 7:ff87ab834590 | 313 | if(right) { |
agamemaker | 7:ff87ab834590 | 314 | player.turn_right(); |
agamemaker | 7:ff87ab834590 | 315 | } |
agamemaker | 7:ff87ab834590 | 316 | if(stop) { |
agamemaker | 7:ff87ab834590 | 317 | player.x_vel = 0; |
agamemaker | 7:ff87ab834590 | 318 | player.y_vel = 0; |
agamemaker | 7:ff87ab834590 | 319 | } |
agamemaker | 7:ff87ab834590 | 320 | if(four) { |
agamemaker | 7:ff87ab834590 | 321 | temp.x_pos = player.x_pos + player.hit_rad * cos(player.angle); |
agamemaker | 7:ff87ab834590 | 322 | temp.y_pos = player.y_pos + player.hit_rad * sin(player.angle); |
agamemaker | 7:ff87ab834590 | 323 | temp.x_vel = BULSP * cos(player.angle); |
agamemaker | 7:ff87ab834590 | 324 | temp.y_vel = BULSP * sin(player.angle); |
agamemaker | 7:ff87ab834590 | 325 | temp.angle = player.angle; |
agamemaker | 7:ff87ab834590 | 326 | temp.hit_rad = 3; |
agamemaker | 7:ff87ab834590 | 327 | temp.wrap = 0; |
agamemaker | 7:ff87ab834590 | 328 | bullets.push_back(temp); |
agamemaker | 7:ff87ab834590 | 329 | } |
agamemaker | 7:ff87ab834590 | 330 | |
agamemaker | 7:ff87ab834590 | 331 | //move |
agamemaker | 7:ff87ab834590 | 332 | move_all(player, asteroids, bullets); |
agamemaker | 7:ff87ab834590 | 333 | garbage(bullets); |
agamemaker | 7:ff87ab834590 | 334 | calc_collisions(player, asteroids, bullets); |
agamemaker | 7:ff87ab834590 | 335 | draw_objs(player, asteroids, bullets); |
agamemaker | 7:ff87ab834590 | 336 | Thread::wait(game_speed); |
agamemaker | 6:7d1d8945b2f7 | 337 | } |
agamemaker | 7:ff87ab834590 | 338 | } |