Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Tue May 19 12:40:14 2020 +0000
Revision:
45:fc3238cd28c6
Parent:
44:2d957de3bce3
Child:
47:49fa1adc10b4
Added progression to the game so as the time goes on it gets harder.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 8:dd1037c5435b 1 #include "GameEngine.h"
evanso 8:dd1037c5435b 2
evanso 8:dd1037c5435b 3 GameEngine::GameEngine() {
evanso 44:2d957de3bce3 4 //attach ticker to isr
evanso 42:3aed75338272 5 ticker.attach(callback(this, &GameEngine::lcd_frame_time_isr), 0.04 );
evanso 8:dd1037c5435b 6 }
evanso 8:dd1037c5435b 7
evanso 8:dd1037c5435b 8 GameEngine::~GameEngine() {
evanso 8:dd1037c5435b 9
evanso 8:dd1037c5435b 10 }
evanso 8:dd1037c5435b 11
evanso 13:12276eed13ac 12 void GameEngine::init() {
evanso 36:27aa597db3d2 13 // Initalise objects
evanso 8:dd1037c5435b 14 pad.init();
evanso 8:dd1037c5435b 15 lcd.init();
evanso 8:dd1037c5435b 16 spaceship.init();
evanso 13:12276eed13ac 17 map.init(pad);
evanso 40:71f947254fda 18 menu.init();
evanso 36:27aa597db3d2 19
evanso 36:27aa597db3d2 20 // Set seed value
evanso 36:27aa597db3d2 21 srand(pad.read_adc()*64000);
evanso 36:27aa597db3d2 22
evanso 36:27aa597db3d2 23 // Assign values to variables
evanso 45:fc3238cd28c6 24 spawn_time_multipler_ = 1;
evanso 45:fc3238cd28c6 25 alien_number_counter_ = 3;
evanso 45:fc3238cd28c6 26 spawn_alien_counter_ = 0;
evanso 45:fc3238cd28c6 27 spaceship_lives_ = 3;
evanso 45:fc3238cd28c6 28 spaceship_destroyed_ = false;
evanso 45:fc3238cd28c6 29 reset_map_counter_ = 0;
evanso 45:fc3238cd28c6 30 smart_bomb_counter_ = 4;
evanso 33:7fedd8029473 31 create_people();
evanso 45:fc3238cd28c6 32 points_ = 0;
evanso 45:fc3238cd28c6 33 smart_bomb_timer_ = 0;
evanso 45:fc3238cd28c6 34 bullet_timer_ = 0;
evanso 41:5959256f4aab 35 current_menu_part_= menu.get_current_menu_part();
evanso 45:fc3238cd28c6 36 lcd_frame_time_flag_ = 0;
evanso 8:dd1037c5435b 37 }
evanso 8:dd1037c5435b 38
evanso 44:2d957de3bce3 39 // Menu Control-----------------------------------------------------------------
evanso 44:2d957de3bce3 40
evanso 44:2d957de3bce3 41 void GameEngine::game_select_part(){
evanso 44:2d957de3bce3 42 switch (current_menu_part_) {
evanso 44:2d957de3bce3 43 case main_menu: run_menu(); break;
evanso 44:2d957de3bce3 44 case play: run_play(); break;
evanso 44:2d957de3bce3 45 case settings: run_settings(); break;
evanso 44:2d957de3bce3 46 case saved_games: run_saved_games(); break;
evanso 44:2d957de3bce3 47 }
evanso 44:2d957de3bce3 48 }
evanso 44:2d957de3bce3 49
evanso 44:2d957de3bce3 50 void GameEngine::run_menu(){
evanso 44:2d957de3bce3 51 lcd.setContrast(pad.read_pot1());
evanso 44:2d957de3bce3 52 lcd.clear();
evanso 44:2d957de3bce3 53
evanso 44:2d957de3bce3 54 // Scrolls, draws and selcts menu parts
evanso 44:2d957de3bce3 55 read_joystick_direction();
evanso 44:2d957de3bce3 56 menu.menu_scroll(pad, d_);
evanso 44:2d957de3bce3 57 menu.draw_part(lcd);
evanso 44:2d957de3bce3 58 menu.select_part(lcd, pad);
evanso 44:2d957de3bce3 59
evanso 44:2d957de3bce3 60 current_menu_part_ = menu.get_current_menu_part();
evanso 44:2d957de3bce3 61
evanso 44:2d957de3bce3 62 lcd.refresh();
evanso 44:2d957de3bce3 63 }
evanso 44:2d957de3bce3 64
evanso 44:2d957de3bce3 65 void GameEngine::run_play(){
evanso 44:2d957de3bce3 66 while (1) {
evanso 44:2d957de3bce3 67 // Checks flag and prints spaceship on lcd then resets flag
evanso 45:fc3238cd28c6 68 if (lcd_frame_time_flag_) {
evanso 44:2d957de3bce3 69 // resets ISR flag
evanso 45:fc3238cd28c6 70 lcd_frame_time_flag_ = 0;
evanso 44:2d957de3bce3 71
evanso 44:2d957de3bce3 72 gameplay_loop();
evanso 44:2d957de3bce3 73
evanso 44:2d957de3bce3 74 // break out of game loop when lives = 0
evanso 45:fc3238cd28c6 75 if(!spaceship_lives_){
evanso 44:2d957de3bce3 76 break;
evanso 44:2d957de3bce3 77
evanso 44:2d957de3bce3 78 }
evanso 44:2d957de3bce3 79 }
evanso 44:2d957de3bce3 80
evanso 44:2d957de3bce3 81 // MCU put to sleep between each frame to save power
evanso 44:2d957de3bce3 82 sleep();
evanso 44:2d957de3bce3 83 }
evanso 44:2d957de3bce3 84 lcd.clear();
evanso 44:2d957de3bce3 85 lcd.printString("Game Over",15,3);
evanso 44:2d957de3bce3 86 lcd.refresh();
evanso 44:2d957de3bce3 87 wait(3);
evanso 44:2d957de3bce3 88 current_menu_part_ = main_menu;
evanso 44:2d957de3bce3 89 }
evanso 44:2d957de3bce3 90
evanso 13:12276eed13ac 91 void GameEngine::gameplay_loop() {
evanso 41:5959256f4aab 92
evanso 30:814674b189f0 93 // clear screen and set contrast
evanso 13:12276eed13ac 94 lcd.setContrast(pad.read_pot1());
evanso 8:dd1037c5435b 95 lcd.clear();
evanso 11:ab578a151f67 96
evanso 41:5959256f4aab 97 // creat objects
evanso 41:5959256f4aab 98 create_weapons_bullets();
evanso 41:5959256f4aab 99 create_weapons_smart_bomb();
evanso 41:5959256f4aab 100 spawn_aliens();
evanso 41:5959256f4aab 101 spawn_people();
evanso 41:5959256f4aab 102
evanso 41:5959256f4aab 103 //If spaceship is destroyed stop joystick input, dont draw spaceship sprite
evanso 45:fc3238cd28c6 104 if (!spaceship_destroyed_){
evanso 41:5959256f4aab 105 read_joystick_direction();
evanso 41:5959256f4aab 106 spaceship.movement(d_);
evanso 41:5959256f4aab 107 spaceship.draw(lcd);
evanso 41:5959256f4aab 108 }
evanso 41:5959256f4aab 109
evanso 41:5959256f4aab 110 // Draws objects
evanso 41:5959256f4aab 111 map.draw_map(lcd, d_);
evanso 41:5959256f4aab 112 draw_aliens();
evanso 41:5959256f4aab 113 draw_bullets();
evanso 41:5959256f4aab 114 draw_explosions();
evanso 41:5959256f4aab 115 draw_people();
evanso 45:fc3238cd28c6 116 hud.draw_HUD(lcd, spaceship_lives_, points_, smart_bomb_counter_);
evanso 41:5959256f4aab 117 spaceship_lives_leds();
evanso 41:5959256f4aab 118
evanso 41:5959256f4aab 119 reset_map_timer();
evanso 30:814674b189f0 120
evanso 18:11068b98e261 121 // refresh's screen
evanso 18:11068b98e261 122 lcd.refresh();
evanso 13:12276eed13ac 123 }
evanso 13:12276eed13ac 124
evanso 41:5959256f4aab 125 void GameEngine::run_settings(){
evanso 41:5959256f4aab 126
evanso 41:5959256f4aab 127 }
evanso 41:5959256f4aab 128
evanso 41:5959256f4aab 129 void GameEngine::run_saved_games(){
evanso 41:5959256f4aab 130
evanso 41:5959256f4aab 131 }
evanso 41:5959256f4aab 132
evanso 42:3aed75338272 133 void GameEngine::lcd_frame_time_isr(){
evanso 42:3aed75338272 134 // set ISR flag
evanso 45:fc3238cd28c6 135 lcd_frame_time_flag_ = 1;
evanso 42:3aed75338272 136 }
evanso 42:3aed75338272 137
evanso 44:2d957de3bce3 138
evanso 44:2d957de3bce3 139
evanso 39:fc5586b930e3 140 //Spaceship control ------------------------------------------------------------
evanso 39:fc5586b930e3 141
evanso 15:90b6821bcf64 142 void GameEngine::read_joystick_direction(){
evanso 13:12276eed13ac 143 d_ = pad.get_direction();
evanso 18:11068b98e261 144 }
evanso 18:11068b98e261 145
evanso 39:fc5586b930e3 146 void GameEngine::spaceship_lives_leds(){
evanso 39:fc5586b930e3 147 pad.leds_off();
evanso 39:fc5586b930e3 148
evanso 39:fc5586b930e3 149 //top two red leds on if 1 lives left
evanso 45:fc3238cd28c6 150 if(spaceship_lives_ >= 1){
evanso 39:fc5586b930e3 151 pad.led(1,1);
evanso 39:fc5586b930e3 152 pad.led(4,1);
evanso 39:fc5586b930e3 153 }
evanso 39:fc5586b930e3 154
evanso 39:fc5586b930e3 155 //middle two orange leds also on if 2 lives left
evanso 45:fc3238cd28c6 156 if(spaceship_lives_ >= 2){
evanso 39:fc5586b930e3 157 pad.led(2,1);
evanso 39:fc5586b930e3 158 pad.led(5,1);
evanso 39:fc5586b930e3 159 }
evanso 39:fc5586b930e3 160
evanso 39:fc5586b930e3 161 //bottom two red leds also on if 3 lives left
evanso 45:fc3238cd28c6 162 if(spaceship_lives_ == 3){
evanso 39:fc5586b930e3 163 pad.led(3,1);
evanso 39:fc5586b930e3 164 pad.led(6,1);
evanso 39:fc5586b930e3 165 }
evanso 39:fc5586b930e3 166 }
evanso 39:fc5586b930e3 167
evanso 44:2d957de3bce3 168
evanso 44:2d957de3bce3 169
evanso 36:27aa597db3d2 170 //Weapon control ---------------------------------------------------------------
evanso 36:27aa597db3d2 171
evanso 36:27aa597db3d2 172 void GameEngine::create_weapons_bullets(){
evanso 39:fc5586b930e3 173 // controlls speed that bullet can be fired
evanso 45:fc3238cd28c6 174 if(bullet_timer_ <=0){
evanso 39:fc5586b930e3 175 if (pad.A_pressed()){
evanso 36:27aa597db3d2 176 // Bullet object
evanso 36:27aa597db3d2 177 Weapons new_bullet;
evanso 36:27aa597db3d2 178
evanso 36:27aa597db3d2 179 new_bullet.init(spaceship.get_pos(),
evanso 36:27aa597db3d2 180 spaceship.get_spaceship_sprite_direction(), true);
evanso 36:27aa597db3d2 181
evanso 36:27aa597db3d2 182 // Stores bullet object in vector
evanso 36:27aa597db3d2 183 bullet_vector.push_back(new_bullet);
evanso 39:fc5586b930e3 184 }
evanso 45:fc3238cd28c6 185 bullet_timer_ = 5;
evanso 39:fc5586b930e3 186 }
evanso 45:fc3238cd28c6 187 bullet_timer_--;
evanso 36:27aa597db3d2 188 }
evanso 36:27aa597db3d2 189
evanso 36:27aa597db3d2 190 void GameEngine::create_weapons_smart_bomb(){
evanso 39:fc5586b930e3 191 // timer to stop smart bomb button be accidently pressed twice
evanso 45:fc3238cd28c6 192 if(smart_bomb_timer_ <=0){
evanso 45:fc3238cd28c6 193 if (pad.B_pressed() && smart_bomb_counter_ > 0){
evanso 39:fc5586b930e3 194 weapons.smart_bomb(lcd);
evanso 45:fc3238cd28c6 195 smart_bomb_counter_--;
evanso 39:fc5586b930e3 196
evanso 39:fc5586b930e3 197 //Deletes alien object if on screen
evanso 39:fc5586b930e3 198 for (int i = (alien_vector.size() -1) ; i >= 0 ; i--){
evanso 39:fc5586b930e3 199 Vector2D alien_pos = alien_vector[i].get_pos();
evanso 36:27aa597db3d2 200
evanso 39:fc5586b930e3 201 // Creats explosion if alien was on the screen
evanso 39:fc5586b930e3 202 if(alien_pos.x <= 84 && alien_pos.x >= -6){
evanso 39:fc5586b930e3 203 create_explosion(alien_pos);
evanso 39:fc5586b930e3 204
evanso 39:fc5586b930e3 205 //delete person object if was being abducted by destroyed alien
evanso 39:fc5586b930e3 206 if(alien_vector[i].get_collision_people_element() > -1){
evanso 39:fc5586b930e3 207 people_vector.erase(people_vector.begin() +
evanso 39:fc5586b930e3 208 alien_vector[i].get_collision_people_element());
evanso 39:fc5586b930e3 209 }
evanso 39:fc5586b930e3 210
evanso 39:fc5586b930e3 211 alien_vector.erase(alien_vector.begin()+ i);
evanso 45:fc3238cd28c6 212 points_ ++;
evanso 39:fc5586b930e3 213 }
evanso 36:27aa597db3d2 214 }
evanso 45:fc3238cd28c6 215 smart_bomb_timer_ = 30;
evanso 39:fc5586b930e3 216 }
evanso 39:fc5586b930e3 217 }
evanso 45:fc3238cd28c6 218 smart_bomb_timer_--;
evanso 36:27aa597db3d2 219 }
evanso 36:27aa597db3d2 220
evanso 36:27aa597db3d2 221 void GameEngine::draw_bullets(){
evanso 36:27aa597db3d2 222 // interates over bullet vectors, moves and draws bullet objects
evanso 36:27aa597db3d2 223
evanso 36:27aa597db3d2 224 // Alien bullets
evanso 36:27aa597db3d2 225 for (int i = 0; i < alien_bullet_vector.size(); i++){
evanso 36:27aa597db3d2 226 alien_bullet_vector[i].draw_alien_bullet(lcd, d_);
evanso 36:27aa597db3d2 227
evanso 36:27aa597db3d2 228 // deletes alien bullet object after bullet has moved set distance
evanso 36:27aa597db3d2 229 if(alien_bullet_vector[i].get_bullet_delete_counter() >> 5){
evanso 36:27aa597db3d2 230 alien_bullet_vector.erase(alien_bullet_vector.begin()+ i);
evanso 36:27aa597db3d2 231 }
evanso 36:27aa597db3d2 232
evanso 36:27aa597db3d2 233 // Deletes bullet and shpaceship if collision detected
evanso 36:27aa597db3d2 234 if (spaceship.check_collision(alien_bullet_vector[i]) &&
evanso 45:fc3238cd28c6 235 !spaceship_destroyed_ ){
evanso 36:27aa597db3d2 236 create_explosion(spaceship.get_pos());
evanso 36:27aa597db3d2 237
evanso 45:fc3238cd28c6 238 spaceship_destroyed_ = true;
evanso 36:27aa597db3d2 239 alien_bullet_vector.erase(alien_bullet_vector.begin()+ i);
evanso 36:27aa597db3d2 240 }
evanso 36:27aa597db3d2 241 }
evanso 36:27aa597db3d2 242
evanso 36:27aa597db3d2 243 // Spaceship bullets
evanso 36:27aa597db3d2 244 for (int i = 0; i < bullet_vector.size(); i++){
evanso 36:27aa597db3d2 245 bullet_vector[i].draw_bullet(lcd);
evanso 36:27aa597db3d2 246
evanso 36:27aa597db3d2 247 // deletes bullet object after bullet has moved set distance
evanso 36:27aa597db3d2 248 if(bullet_vector[i].get_bullet_delete_counter() >> 5){
evanso 36:27aa597db3d2 249 bullet_vector.erase(bullet_vector.begin()+ i);
evanso 36:27aa597db3d2 250 }
evanso 36:27aa597db3d2 251 }
evanso 36:27aa597db3d2 252 }
evanso 36:27aa597db3d2 253
evanso 36:27aa597db3d2 254
evanso 36:27aa597db3d2 255
evanso 36:27aa597db3d2 256 //Alien Control ----------------------------------------------------------------
evanso 36:27aa597db3d2 257
evanso 32:c006a9882778 258 void GameEngine::spawn_aliens(){
evanso 45:fc3238cd28c6 259 if(alien_vector.size() <= alien_number_counter_){
evanso 34:85ccc16f24d2 260 create_alien();
evanso 32:c006a9882778 261 }
evanso 32:c006a9882778 262
evanso 45:fc3238cd28c6 263 //printf( " alien_number_counter_ = %d\n",alien_number_counter_);
evanso 45:fc3238cd28c6 264
evanso 34:85ccc16f24d2 265 //slowley incresing the alien counter as game goes on to make harder
evanso 45:fc3238cd28c6 266 if(spawn_alien_counter_%(500*spawn_time_multipler_) == 0){
evanso 45:fc3238cd28c6 267 alien_number_counter_++;
evanso 45:fc3238cd28c6 268 spawn_time_multipler_++;
evanso 32:c006a9882778 269 }
evanso 34:85ccc16f24d2 270
evanso 45:fc3238cd28c6 271 spawn_alien_counter_++;
evanso 32:c006a9882778 272 }
evanso 32:c006a9882778 273
evanso 36:27aa597db3d2 274 void GameEngine::create_alien(){
evanso 36:27aa597db3d2 275 int position_x_start = 0;
evanso 36:27aa597db3d2 276
evanso 36:27aa597db3d2 277 // Alien object
evanso 36:27aa597db3d2 278 Alien new_alien;
evanso 36:27aa597db3d2 279
evanso 36:27aa597db3d2 280 //spawns aliens between x > 84 and x <0
evanso 36:27aa597db3d2 281 if(rand() % 2){
evanso 36:27aa597db3d2 282 position_x_start = rand() % 84 + 84;
evanso 36:27aa597db3d2 283 }else{
evanso 36:27aa597db3d2 284 position_x_start =rand() % 83 - 84;
evanso 36:27aa597db3d2 285 }
evanso 39:fc5586b930e3 286 new_alien.init(pad, position_x_start, (rand() % 33 + 9));
evanso 36:27aa597db3d2 287
evanso 36:27aa597db3d2 288 // Stores alien object in vector
evanso 36:27aa597db3d2 289 alien_vector.push_back(new_alien);
evanso 36:27aa597db3d2 290 }
evanso 36:27aa597db3d2 291
evanso 36:27aa597db3d2 292 void GameEngine::check_alien_people_collision(int i){
evanso 40:71f947254fda 293 // only a collision if all three of theses conditions are met:
evanso 40:71f947254fda 294 // check all these codition for every alien to every person
evanso 40:71f947254fda 295 // 1)person hasn't already had a collision
evanso 40:71f947254fda 296 // 2)There is an acutaual collision of people and alien
evanso 36:27aa597db3d2 297 for (int x = 0; x < people_vector.size(); x++){
evanso 36:27aa597db3d2 298 if (!people_vector[x].get_alien_collision_flag() &&
evanso 36:27aa597db3d2 299 people_vector[x].check_alien_collision(alien_vector[i])){
evanso 36:27aa597db3d2 300 alien_vector[i].set_collision_people_element(x);
evanso 36:27aa597db3d2 301 }
evanso 36:27aa597db3d2 302 }
evanso 36:27aa597db3d2 303
evanso 36:27aa597db3d2 304 //draws collision if detected
evanso 36:27aa597db3d2 305 if(alien_vector[i].get_collision_people_element() > -1){
evanso 36:27aa597db3d2 306 alien_vector[i].draw_alien(lcd,spaceship.get_pos(),d_,
evanso 36:27aa597db3d2 307 map.get_length_map(), map.get_position_x_map(),true);
evanso 36:27aa597db3d2 308 }else{
evanso 36:27aa597db3d2 309 alien_vector[i].draw_alien(lcd,spaceship.get_pos(),d_,
evanso 36:27aa597db3d2 310 map.get_length_map(), map.get_position_x_map(),false);
evanso 36:27aa597db3d2 311 }
evanso 36:27aa597db3d2 312 }
evanso 36:27aa597db3d2 313
evanso 36:27aa597db3d2 314 void GameEngine::alliens_fire_bullets(int i){
evanso 36:27aa597db3d2 315 if (alien_vector[i].get_alien_fire_counter()%60 == 0){
evanso 36:27aa597db3d2 316 Weapons alien_bullet;
evanso 36:27aa597db3d2 317
evanso 36:27aa597db3d2 318 // fires bullet towards direction of spaceship
evanso 36:27aa597db3d2 319 bool alien_bullet_direction = false;
evanso 36:27aa597db3d2 320 Vector2D spaceship_pos = spaceship.get_pos();
evanso 36:27aa597db3d2 321 Vector2D alien_pos = alien_vector[i].get_pos();
evanso 36:27aa597db3d2 322 if(spaceship_pos.x > alien_pos.x){
evanso 36:27aa597db3d2 323 alien_bullet_direction = true;
evanso 36:27aa597db3d2 324 }
evanso 36:27aa597db3d2 325
evanso 36:27aa597db3d2 326 alien_bullet.init(alien_vector[i].get_pos(),
evanso 36:27aa597db3d2 327 alien_bullet_direction , false);
evanso 36:27aa597db3d2 328
evanso 36:27aa597db3d2 329 // Stores bullet object in vector
evanso 36:27aa597db3d2 330 alien_bullet_vector.push_back(alien_bullet);
evanso 36:27aa597db3d2 331 }
evanso 36:27aa597db3d2 332 }
evanso 36:27aa597db3d2 333
evanso 36:27aa597db3d2 334 void GameEngine::delete_aliens(int i){
evanso 36:27aa597db3d2 335 for (int x = 0; x < bullet_vector.size(); x++){
evanso 36:27aa597db3d2 336 if (alien_vector[i].check_collision(bullet_vector[x])){
evanso 36:27aa597db3d2 337 create_explosion(alien_vector[i].get_pos());
evanso 36:27aa597db3d2 338
evanso 36:27aa597db3d2 339 //delete person object if was carried by destroyed alien
evanso 36:27aa597db3d2 340 if(alien_vector[i].get_collision_people_element() > -1){
evanso 36:27aa597db3d2 341 people_vector.erase(people_vector.begin() +
evanso 36:27aa597db3d2 342 alien_vector[i].get_collision_people_element());
evanso 36:27aa597db3d2 343 }
evanso 36:27aa597db3d2 344
evanso 39:fc5586b930e3 345 bullet_vector.erase(bullet_vector.begin()+ x);
evanso 39:fc5586b930e3 346 alien_vector.erase(alien_vector.begin()+ i);
evanso 45:fc3238cd28c6 347 points_ ++;
evanso 36:27aa597db3d2 348 }
evanso 36:27aa597db3d2 349 }
evanso 36:27aa597db3d2 350 }
evanso 36:27aa597db3d2 351
evanso 36:27aa597db3d2 352 void GameEngine::draw_aliens(){
evanso 36:27aa597db3d2 353 // interates over alien vector and draws each new_alien object
evanso 36:27aa597db3d2 354 for (int i = 0; i < alien_vector.size(); i++){
evanso 36:27aa597db3d2 355
evanso 36:27aa597db3d2 356 check_alien_people_collision(i);
evanso 36:27aa597db3d2 357
evanso 36:27aa597db3d2 358 // deleted spaceship if alien ship touches spaceship
evanso 36:27aa597db3d2 359 if (spaceship.check_alien_collision(alien_vector[i]) &&
evanso 45:fc3238cd28c6 360 !spaceship_destroyed_){
evanso 36:27aa597db3d2 361 create_explosion(spaceship.get_pos());
evanso 45:fc3238cd28c6 362 spaceship_destroyed_ = true;
evanso 36:27aa597db3d2 363 }
evanso 36:27aa597db3d2 364
evanso 36:27aa597db3d2 365 alliens_fire_bullets(i);
evanso 36:27aa597db3d2 366
evanso 36:27aa597db3d2 367 delete_aliens(i);
evanso 34:85ccc16f24d2 368 }
evanso 34:85ccc16f24d2 369 }
evanso 34:85ccc16f24d2 370
evanso 36:27aa597db3d2 371
evanso 36:27aa597db3d2 372
evanso 36:27aa597db3d2 373 //Explotion Control ------------------------------------------------------------
evanso 36:27aa597db3d2 374
evanso 36:27aa597db3d2 375 void GameEngine::create_explosion(Vector2D destroyed_position){
evanso 36:27aa597db3d2 376 // explosion object
evanso 36:27aa597db3d2 377 Explosion new_explosion;
evanso 36:27aa597db3d2 378
evanso 36:27aa597db3d2 379 new_explosion.init(destroyed_position);
evanso 33:7fedd8029473 380
evanso 36:27aa597db3d2 381 // Stores explosion object in vector
evanso 36:27aa597db3d2 382 explosion_vector.push_back(new_explosion);
evanso 36:27aa597db3d2 383 }
evanso 36:27aa597db3d2 384
evanso 36:27aa597db3d2 385 void GameEngine::draw_explosions(){
evanso 36:27aa597db3d2 386 // interates over expoltion vector and draws each explosion object then
evanso 36:27aa597db3d2 387 // deleted object after set size
evanso 36:27aa597db3d2 388 for (int i = 0; i < explosion_vector.size(); i++){
evanso 36:27aa597db3d2 389 explosion_vector[i].draw_explosion(lcd);
evanso 31:6015e8ed859c 390
evanso 36:27aa597db3d2 391 // delete explosion after reaches set size
evanso 36:27aa597db3d2 392 if(explosion_vector[i].get_explosion_radius() == 8){
evanso 36:27aa597db3d2 393 explosion_vector.erase(explosion_vector.begin()+ i);
evanso 31:6015e8ed859c 394 }
evanso 36:27aa597db3d2 395 }
evanso 36:27aa597db3d2 396 }
evanso 36:27aa597db3d2 397
evanso 36:27aa597db3d2 398
evanso 36:27aa597db3d2 399
evanso 36:27aa597db3d2 400 //People Control ---------------------------------------------------------------
evanso 36:27aa597db3d2 401
evanso 36:27aa597db3d2 402 void GameEngine::spawn_people(){
evanso 36:27aa597db3d2 403 // Keeps number of people objects constant as people objecs are erased
evanso 36:27aa597db3d2 404 if(people_vector.size() <= 5){
evanso 36:27aa597db3d2 405 create_people();
evanso 31:6015e8ed859c 406 }
evanso 20:febd920ec29e 407 }
evanso 20:febd920ec29e 408
evanso 33:7fedd8029473 409 void GameEngine::create_people(){
evanso 33:7fedd8029473 410 // People object
evanso 33:7fedd8029473 411 People people;
evanso 33:7fedd8029473 412
evanso 33:7fedd8029473 413 people.init(pad, (rand() % 168 - 84));
evanso 33:7fedd8029473 414
evanso 33:7fedd8029473 415 // Stores alien object in vector
evanso 33:7fedd8029473 416 people_vector.push_back(people);
evanso 33:7fedd8029473 417 }
evanso 33:7fedd8029473 418
evanso 33:7fedd8029473 419 void GameEngine::draw_people(){
evanso 33:7fedd8029473 420 for (int i = 0; i < people_vector.size(); i++){
evanso 34:85ccc16f24d2 421 people_vector[i].draw_people(lcd, d_,
evanso 34:85ccc16f24d2 422 map.get_length_map(), map.get_position_x_map());
evanso 34:85ccc16f24d2 423
evanso 34:85ccc16f24d2 424 //errase person if at top of screen as captured by alien and alien is
evanso 34:85ccc16f24d2 425 //set to track mode
evanso 34:85ccc16f24d2 426 Vector2D people_pos = people_vector[i].get_pos();
evanso 40:71f947254fda 427
evanso 40:71f947254fda 428 for (int x = 0; x < alien_vector.size(); x++){
evanso 40:71f947254fda 429 Vector2D alien_pos = alien_vector[x].get_pos();
evanso 40:71f947254fda 430 if(people_pos.y < 30 && alien_pos.y < 9){
evanso 40:71f947254fda 431
evanso 40:71f947254fda 432 //set alien who abducted person to track mode
evanso 34:85ccc16f24d2 433 if(alien_vector[x].get_collision_people_element() == i){
evanso 34:85ccc16f24d2 434 alien_vector[x].set_track_flag(true);
evanso 40:71f947254fda 435 people_vector.erase(people_vector.begin()+ i);
evanso 34:85ccc16f24d2 436 }
evanso 40:71f947254fda 437
evanso 40:71f947254fda 438 }
evanso 34:85ccc16f24d2 439
evanso 34:85ccc16f24d2 440 }
evanso 33:7fedd8029473 441 }
evanso 33:7fedd8029473 442 }
evanso 33:7fedd8029473 443
evanso 19:1bc0a2d22054 444
evanso 25:70b55f5bfc87 445
evanso 36:27aa597db3d2 446 //Map Control-------------------------------------------------------------------
evanso 19:1bc0a2d22054 447
evanso 36:27aa597db3d2 448 void GameEngine::reset_map_timer(){
evanso 45:fc3238cd28c6 449 if(spaceship_destroyed_){
evanso 45:fc3238cd28c6 450 reset_map_counter_++;
evanso 36:27aa597db3d2 451
evanso 36:27aa597db3d2 452 // stops map movement
evanso 36:27aa597db3d2 453 d_ = CENTRE;
evanso 36:27aa597db3d2 454
evanso 36:27aa597db3d2 455 // reset map after set time
evanso 45:fc3238cd28c6 456 if(reset_map_counter_ == 50){
evanso 36:27aa597db3d2 457 reset_map();
evanso 25:70b55f5bfc87 458 }
evanso 36:27aa597db3d2 459 }
evanso 25:70b55f5bfc87 460 }
evanso 36:27aa597db3d2 461
evanso 30:814674b189f0 462 void GameEngine::reset_map(){
evanso 36:27aa597db3d2 463 // Reassign values to variables
evanso 30:814674b189f0 464 spaceship.init();
evanso 45:fc3238cd28c6 465 spaceship_lives_--;
evanso 45:fc3238cd28c6 466 spaceship_destroyed_ = false;
evanso 45:fc3238cd28c6 467 reset_map_counter_ = 0;
evanso 33:7fedd8029473 468
evanso 34:85ccc16f24d2 469 // erase aliens so redrawn in random positions when respawning spaceship
evanso 34:85ccc16f24d2 470 for (int i = (alien_vector.size() - 1); i >= 0 ; i--){
evanso 34:85ccc16f24d2 471 alien_vector.erase(alien_vector.begin()+ i);
evanso 34:85ccc16f24d2 472 }
evanso 36:27aa597db3d2 473
evanso 34:85ccc16f24d2 474 // erase all people so redrawn at bottom of map
evanso 34:85ccc16f24d2 475 for (int i = (people_vector.size() - 1); i >= 0 ; i--){
evanso 34:85ccc16f24d2 476 people_vector.erase(people_vector.begin()+ i);
evanso 34:85ccc16f24d2 477 }
evanso 36:27aa597db3d2 478
evanso 36:27aa597db3d2 479 // erase all alien bullets
evanso 34:85ccc16f24d2 480 for (int i = (alien_bullet_vector.size() - 1); i >= 0 ; i--){
evanso 34:85ccc16f24d2 481 alien_bullet_vector.erase(alien_bullet_vector.begin()+ i);
evanso 33:7fedd8029473 482 }
evanso 20:febd920ec29e 483 }