Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Sun May 24 21:11:55 2020 +0000
Revision:
79:66bcf8fa2d2d
Parent:
77:2ee9d1f9e282
Child:
80:870bc6b4bf08
Added high score unit test which it passed!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 8:dd1037c5435b 1 #include "GameEngine.h"
evanso 67:a2984682d641 2
evanso 47:49fa1adc10b4 3 /** Define acelleromter object */
evanso 47:49fa1adc10b4 4 FXOS8700CQ accelerometer(I2C_SDA,I2C_SCL);
evanso 8:dd1037c5435b 5
evanso 49:ed569eceeaa4 6 /** Define SD card object */
evanso 49:ed569eceeaa4 7 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
evanso 67:a2984682d641 8
evanso 8:dd1037c5435b 9 GameEngine::GameEngine() {
evanso 44:2d957de3bce3 10 //attach ticker to isr
evanso 42:3aed75338272 11 ticker.attach(callback(this, &GameEngine::lcd_frame_time_isr), 0.04 );
evanso 8:dd1037c5435b 12 }
evanso 8:dd1037c5435b 13
evanso 8:dd1037c5435b 14 GameEngine::~GameEngine() {
evanso 8:dd1037c5435b 15
evanso 8:dd1037c5435b 16 }
evanso 8:dd1037c5435b 17
evanso 13:12276eed13ac 18 void GameEngine::init() {
evanso 36:27aa597db3d2 19 // Initalise objects
evanso 8:dd1037c5435b 20 pad.init();
evanso 8:dd1037c5435b 21 lcd.init();
evanso 8:dd1037c5435b 22 spaceship.init();
evanso 13:12276eed13ac 23 map.init(pad);
evanso 40:71f947254fda 24 menu.init();
evanso 47:49fa1adc10b4 25 accelerometer.init();
evanso 67:a2984682d641 26 saved.init();
evanso 69:753ba27325ce 27 setting.init();
evanso 77:2ee9d1f9e282 28 h_score.init();
evanso 72:e7492591307e 29
evanso 58:a9a39424df52 30 //set first screen to main menu
evanso 58:a9a39424df52 31 current_menu_part_= menu.get_current_menu_part();
evanso 36:27aa597db3d2 32
evanso 74:6827b43c689d 33 play_music();
evanso 36:27aa597db3d2 34 // Set seed value
evanso 36:27aa597db3d2 35 srand(pad.read_adc()*64000);
evanso 67:a2984682d641 36
evanso 67:a2984682d641 37 //Had to inlcude save test here as getting the error sd couldnt be created
evanso 67:a2984682d641 38 #ifdef SD_TEST
evanso 79:66bcf8fa2d2d 39 saved.run_save_test(sd,lcd);
evanso 79:66bcf8fa2d2d 40 h_score.run_save_test(sd,lcd);
evanso 67:a2984682d641 41 #endif
evanso 8:dd1037c5435b 42 }
evanso 8:dd1037c5435b 43
evanso 64:e9dfc35a1738 44 void GameEngine::lcd_frame_time_isr(){
evanso 64:e9dfc35a1738 45 // set ISR flag
evanso 64:e9dfc35a1738 46 lcd_frame_time_flag_ = 1;
evanso 64:e9dfc35a1738 47 }
evanso 64:e9dfc35a1738 48
evanso 44:2d957de3bce3 49 // Menu Control-----------------------------------------------------------------
evanso 44:2d957de3bce3 50
evanso 44:2d957de3bce3 51 void GameEngine::game_select_part(){
evanso 44:2d957de3bce3 52 switch (current_menu_part_) {
evanso 44:2d957de3bce3 53 case main_menu: run_menu(); break;
evanso 44:2d957de3bce3 54 case play: run_play(); break;
evanso 44:2d957de3bce3 55 case settings: run_settings(); break;
evanso 44:2d957de3bce3 56 case saved_games: run_saved_games(); break;
evanso 76:6daba3002424 57 case high_score: run_highscore(); break;
evanso 44:2d957de3bce3 58 }
evanso 44:2d957de3bce3 59 }
evanso 44:2d957de3bce3 60
evanso 44:2d957de3bce3 61 void GameEngine::run_menu(){
evanso 44:2d957de3bce3 62 lcd.setContrast(pad.read_pot1());
evanso 44:2d957de3bce3 63 lcd.clear();
evanso 64:e9dfc35a1738 64
evanso 44:2d957de3bce3 65 // Scrolls, draws and selcts menu parts
evanso 44:2d957de3bce3 66 read_joystick_direction();
evanso 65:daa792a09e1f 67 menu.menu_scroll(d_);
evanso 44:2d957de3bce3 68 menu.draw_part(lcd);
evanso 65:daa792a09e1f 69 menu.select_part(pad.A_pressed());
evanso 69:753ba27325ce 70
evanso 44:2d957de3bce3 71 current_menu_part_ = menu.get_current_menu_part();
evanso 69:753ba27325ce 72
evanso 74:6827b43c689d 73 //sets sound and music setting
evanso 73:d1aea9b8da92 74 sound_fx_ = setting.get_sound_method();
evanso 74:6827b43c689d 75 music_fx_ = setting.get_music_method();
evanso 74:6827b43c689d 76 stop_music();
evanso 74:6827b43c689d 77
evanso 79:66bcf8fa2d2d 78 //printf("sound%d\n",sound_fx_ );
evanso 69:753ba27325ce 79 //stops double button press
evanso 69:753ba27325ce 80 if(pad.A_pressed()){
evanso 69:753ba27325ce 81 wait(0.3);
evanso 70:8c4572d17441 82 }
evanso 70:8c4572d17441 83
evanso 59:0b2e43312d6b 84 //inititialise the game if play
evanso 59:0b2e43312d6b 85 if (current_menu_part_ == play){
evanso 59:0b2e43312d6b 86 play_init();
evanso 59:0b2e43312d6b 87 }
evanso 72:e7492591307e 88
evanso 64:e9dfc35a1738 89 lcd.refresh();
evanso 44:2d957de3bce3 90 }
evanso 44:2d957de3bce3 91
evanso 64:e9dfc35a1738 92
evanso 64:e9dfc35a1738 93
evanso 64:e9dfc35a1738 94
evanso 64:e9dfc35a1738 95 // Menu Play -------------------------------------------------------------------
evanso 58:a9a39424df52 96
evanso 44:2d957de3bce3 97 void GameEngine::run_play(){
evanso 72:e7492591307e 98 //stops melody playing
evanso 76:6daba3002424 99 pad.play_melody(2, melody_off, melody_off_note_time, 1, false);
evanso 64:e9dfc35a1738 100 int paused_flag = false;
evanso 44:2d957de3bce3 101 while (1) {
evanso 64:e9dfc35a1738 102 // Timer interupt to set frame rate of game
evanso 45:fc3238cd28c6 103 if (lcd_frame_time_flag_) {
evanso 44:2d957de3bce3 104 // resets ISR flag
evanso 45:fc3238cd28c6 105 lcd_frame_time_flag_ = 0;
evanso 44:2d957de3bce3 106
evanso 64:e9dfc35a1738 107 //Pause button pressed
evanso 68:bb1650c657ef 108 if (pad.start_pressed() && paused_counter_ > 10 ){
evanso 64:e9dfc35a1738 109 paused_flag = !paused_flag;
evanso 68:bb1650c657ef 110 paused_counter_ = 0 ;
evanso 58:a9a39424df52 111 }
evanso 68:bb1650c657ef 112 paused_counter_++;
evanso 64:e9dfc35a1738 113
evanso 64:e9dfc35a1738 114 //Draws pause screen if paused button presed
evanso 64:e9dfc35a1738 115 if (paused_flag){
evanso 68:bb1650c657ef 116 run_paused_game();
evanso 68:bb1650c657ef 117
evanso 64:e9dfc35a1738 118 //Otherwise draw gameplay screen
evanso 56:663d0546c235 119 }else{
evanso 56:663d0546c235 120 gameplay_loop();
evanso 56:663d0546c235 121 }
evanso 44:2d957de3bce3 122
evanso 68:bb1650c657ef 123 // break out of run play loop when lives = 0 or exite flag set
evanso 68:bb1650c657ef 124 if(!spaceship_lives_||exit_flag_){
evanso 59:0b2e43312d6b 125 if(!spaceship_lives_){
evanso 59:0b2e43312d6b 126 draw_game_over_screen();
evanso 68:bb1650c657ef 127 }
evanso 59:0b2e43312d6b 128 reset_map();
evanso 65:daa792a09e1f 129 pad.leds_off();
evanso 59:0b2e43312d6b 130 break;
evanso 56:663d0546c235 131 }
evanso 44:2d957de3bce3 132 }
evanso 44:2d957de3bce3 133
evanso 64:e9dfc35a1738 134 // MCU put to sleep between each frame to save power
evanso 64:e9dfc35a1738 135 sleep();
evanso 57:d4ce42c24561 136 }
evanso 65:daa792a09e1f 137 //stop taking double a press
evanso 69:753ba27325ce 138 wait(0.4);
evanso 74:6827b43c689d 139 play_music();
evanso 74:6827b43c689d 140 }
evanso 74:6827b43c689d 141
evanso 74:6827b43c689d 142 void GameEngine::play_music(){
evanso 74:6827b43c689d 143 if(music_fx_ == music_on){
evanso 74:6827b43c689d 144 pad.play_melody(88, star_wars, star_wars_note_time, 108, true);
evanso 74:6827b43c689d 145 }
evanso 74:6827b43c689d 146
evanso 74:6827b43c689d 147 }
evanso 74:6827b43c689d 148
evanso 74:6827b43c689d 149 void GameEngine::stop_music(){
evanso 74:6827b43c689d 150 if(music_fx_ == music_off){
evanso 74:6827b43c689d 151 pad.play_melody(2, melody_off, melody_off_note_time, 50, false);
evanso 74:6827b43c689d 152 }
evanso 44:2d957de3bce3 153 }
evanso 44:2d957de3bce3 154
evanso 64:e9dfc35a1738 155 void GameEngine::play_init(){
evanso 64:e9dfc35a1738 156 // Define variables
evanso 64:e9dfc35a1738 157 spawn_time_multipler_ = 1;
evanso 64:e9dfc35a1738 158 alien_number_ = 5;
evanso 64:e9dfc35a1738 159 spawn_alien_counter_ = 0;
evanso 64:e9dfc35a1738 160 spaceship_lives_ = 3;
evanso 64:e9dfc35a1738 161 reset_map_counter_ = 0;
evanso 64:e9dfc35a1738 162 smart_bomb_counter_ = 4;
evanso 64:e9dfc35a1738 163 create_people();
evanso 64:e9dfc35a1738 164 points_ = 0;
evanso 64:e9dfc35a1738 165 smart_bomb_timer_ = 0;
evanso 64:e9dfc35a1738 166 bullet_timer_ = 0;
evanso 64:e9dfc35a1738 167 lcd_frame_time_flag_ = 0;
evanso 68:bb1650c657ef 168 paused_counter_ = 25;
evanso 64:e9dfc35a1738 169
evanso 64:e9dfc35a1738 170 //Flags for screen control
evanso 64:e9dfc35a1738 171 exit_flag_ = false;
evanso 64:e9dfc35a1738 172 run_save_a_game_flag_ = false;
evanso 64:e9dfc35a1738 173 spaceship_destroyed_ = false;
evanso 76:6daba3002424 174 saved.init();
evanso 64:e9dfc35a1738 175 }
evanso 64:e9dfc35a1738 176
evanso 13:12276eed13ac 177 void GameEngine::gameplay_loop() {
evanso 30:814674b189f0 178 // clear screen and set contrast
evanso 13:12276eed13ac 179 lcd.setContrast(pad.read_pot1());
evanso 8:dd1037c5435b 180 lcd.clear();
evanso 11:ab578a151f67 181
evanso 64:e9dfc35a1738 182 // creats aliens and people
evanso 41:5959256f4aab 183 spawn_aliens();
evanso 41:5959256f4aab 184 spawn_people();
evanso 41:5959256f4aab 185
evanso 41:5959256f4aab 186 //If spaceship is destroyed stop joystick input, dont draw spaceship sprite
evanso 71:bcbac2cfe005 187 spaceship_not_detroyed();
evanso 41:5959256f4aab 188
evanso 41:5959256f4aab 189 // Draws objects
evanso 41:5959256f4aab 190 map.draw_map(lcd, d_);
evanso 41:5959256f4aab 191 draw_aliens();
evanso 41:5959256f4aab 192 draw_bullets();
evanso 41:5959256f4aab 193 draw_explosions();
evanso 41:5959256f4aab 194 draw_people();
evanso 45:fc3238cd28c6 195 hud.draw_HUD(lcd, spaceship_lives_, points_, smart_bomb_counter_);
evanso 41:5959256f4aab 196 spaceship_lives_leds();
evanso 41:5959256f4aab 197
evanso 41:5959256f4aab 198 reset_map_timer();
evanso 30:814674b189f0 199
evanso 18:11068b98e261 200 // refresh's screen
evanso 18:11068b98e261 201 lcd.refresh();
evanso 13:12276eed13ac 202 }
evanso 13:12276eed13ac 203
evanso 71:bcbac2cfe005 204 void GameEngine::spaceship_not_detroyed(){
evanso 71:bcbac2cfe005 205 if (!spaceship_destroyed_){
evanso 71:bcbac2cfe005 206
evanso 71:bcbac2cfe005 207 //changes the control method depedning whats selected in the setting
evanso 71:bcbac2cfe005 208 if(setting.get_control_method() == joy ){
evanso 71:bcbac2cfe005 209 read_joystick_direction();
evanso 71:bcbac2cfe005 210 }else {
evanso 71:bcbac2cfe005 211 read_accelerometer_direction(accelerometer.get_roll_angle(),
evanso 71:bcbac2cfe005 212 accelerometer.get_pitch_angle());
evanso 71:bcbac2cfe005 213 }
evanso 71:bcbac2cfe005 214
evanso 72:e7492591307e 215 //Stops movement of spaceship and map after destroyed
evanso 71:bcbac2cfe005 216 spaceship.movement(d_);
evanso 71:bcbac2cfe005 217 spaceship.draw(lcd);
evanso 71:bcbac2cfe005 218 create_weapons_bullets();
evanso 71:bcbac2cfe005 219 create_weapons_smart_bomb();
evanso 71:bcbac2cfe005 220 }
evanso 71:bcbac2cfe005 221 }
evanso 71:bcbac2cfe005 222
evanso 64:e9dfc35a1738 223 void GameEngine::draw_game_over_screen(){
evanso 76:6daba3002424 224 //Draws game over screen then back to menu
evanso 76:6daba3002424 225 lcd.clear();
evanso 76:6daba3002424 226 lcd.printString("Game Over",15,0);
evanso 76:6daba3002424 227
evanso 76:6daba3002424 228 //draws score/highscore part of screen
evanso 76:6daba3002424 229 char buffer[11];
evanso 76:6daba3002424 230 sprintf(buffer,"Score = %d",points_);
evanso 79:66bcf8fa2d2d 231 lcd.printString(buffer,12,2);
evanso 77:2ee9d1f9e282 232 h_score.set_error(false);
evanso 76:6daba3002424 233
evanso 77:2ee9d1f9e282 234 //Prints new high score if a high score and no error
evanso 77:2ee9d1f9e282 235 if(calculate_new_score()&& !h_score.get_error()){
evanso 76:6daba3002424 236 lcd.printString("NEW HIGH SCORE",0,4);
evanso 76:6daba3002424 237
evanso 76:6daba3002424 238 if(music_fx_ == music_on){
evanso 76:6daba3002424 239 pad.play_melody(61, take_on_me, take_on_me_note_time, 140, false);
evanso 76:6daba3002424 240 }
evanso 76:6daba3002424 241
evanso 76:6daba3002424 242 }else if(music_fx_ == music_on){
evanso 74:6827b43c689d 243 pad.play_melody(23, god_farther, god_farther_note_time, 80, false);
evanso 74:6827b43c689d 244 }
evanso 76:6daba3002424 245
evanso 64:e9dfc35a1738 246 lcd.refresh();
evanso 72:e7492591307e 247 wait(6);
evanso 64:e9dfc35a1738 248 current_menu_part_ = main_menu;
evanso 62:f0c86a854a9e 249 }
evanso 62:f0c86a854a9e 250
evanso 62:f0c86a854a9e 251 void GameEngine::run_paused_game(){
evanso 64:e9dfc35a1738 252 //Lunch save a game screen
evanso 64:e9dfc35a1738 253 if (pad.B_pressed()||run_save_a_game_flag_){
evanso 64:e9dfc35a1738 254 run_save_a_game_flag_ = true;
evanso 64:e9dfc35a1738 255 run_save_a_game();
evanso 64:e9dfc35a1738 256
evanso 64:e9dfc35a1738 257 //Draw pause screen
evanso 62:f0c86a854a9e 258 }else{
evanso 62:f0c86a854a9e 259 draw_pause_screen();
evanso 62:f0c86a854a9e 260 paused_flag_ = true;
evanso 62:f0c86a854a9e 261 }
evanso 64:e9dfc35a1738 262
evanso 64:e9dfc35a1738 263 //Exit to main menu
evanso 63:4631447440cf 264 if (pad.A_pressed()||saved.get_error()){
evanso 56:663d0546c235 265 current_menu_part_ = main_menu;
evanso 74:6827b43c689d 266 play_music();
evanso 56:663d0546c235 267 exit_flag_ = true;
evanso 76:6daba3002424 268 saved.set_error(false);
evanso 56:663d0546c235 269 }
evanso 56:663d0546c235 270 }
evanso 56:663d0546c235 271
evanso 56:663d0546c235 272 void GameEngine::draw_pause_screen(){
evanso 56:663d0546c235 273 // clear screen and set contrast
evanso 56:663d0546c235 274 lcd.setContrast(pad.read_pot1());
evanso 56:663d0546c235 275 lcd.clear();
evanso 56:663d0546c235 276
evanso 56:663d0546c235 277 //Draw strings
evanso 56:663d0546c235 278 lcd.printString("Paused!",24,0);
evanso 69:753ba27325ce 279 lcd.printString("Exit(A)",24,3);
evanso 69:753ba27325ce 280 lcd.printString("Save&Exit(B)",6,4);
evanso 56:663d0546c235 281
evanso 56:663d0546c235 282 // refresh's screen
evanso 56:663d0546c235 283 lcd.refresh();
evanso 56:663d0546c235 284 }
evanso 56:663d0546c235 285
evanso 64:e9dfc35a1738 286 void GameEngine::run_save_a_game(){
evanso 64:e9dfc35a1738 287 //Draw and interact with save ya game screen
evanso 64:e9dfc35a1738 288 read_joystick_direction();
evanso 64:e9dfc35a1738 289 saved.saved_games_scroll(d_);
evanso 64:e9dfc35a1738 290 saved.save_game_screen(lcd);
evanso 64:e9dfc35a1738 291
evanso 64:e9dfc35a1738 292 //Save game to save file that is displayed
evanso 68:bb1650c657ef 293 if (pad.A_pressed()){
evanso 64:e9dfc35a1738 294 //Define struct data
evanso 64:e9dfc35a1738 295 SavedGamesData data;
evanso 64:e9dfc35a1738 296
evanso 64:e9dfc35a1738 297 //Set values in struct data and saves them selected file
evanso 64:e9dfc35a1738 298 data.score = points_;
evanso 64:e9dfc35a1738 299 data.lives = spaceship_lives_;
evanso 64:e9dfc35a1738 300 data.smart_bombs = smart_bomb_counter_;
evanso 64:e9dfc35a1738 301 data.alien_number = alien_number_;
evanso 64:e9dfc35a1738 302 saved.add_saved_data(sd, data, lcd);
evanso 64:e9dfc35a1738 303
evanso 64:e9dfc35a1738 304 //exit to main menu
evanso 64:e9dfc35a1738 305 current_menu_part_ = main_menu;
evanso 64:e9dfc35a1738 306 exit_flag_ = true;
evanso 64:e9dfc35a1738 307 }
evanso 64:e9dfc35a1738 308 }
evanso 64:e9dfc35a1738 309
evanso 64:e9dfc35a1738 310
evanso 64:e9dfc35a1738 311
evanso 64:e9dfc35a1738 312
evanso 64:e9dfc35a1738 313 // Menu Setting ----------------------------------------------------------------
evanso 64:e9dfc35a1738 314
evanso 69:753ba27325ce 315 void GameEngine::run_settings(){
evanso 69:753ba27325ce 316 lcd.clear();
evanso 69:753ba27325ce 317 lcd.setContrast(pad.read_pot1());
evanso 69:753ba27325ce 318
evanso 69:753ba27325ce 319 // Scrolls, draws and changes different parts
evanso 69:753ba27325ce 320 read_joystick_direction();
evanso 69:753ba27325ce 321 setting.settings_scroll(d_);
evanso 69:753ba27325ce 322 setting.display_settings_screen(lcd, pad.read_pot1());
evanso 69:753ba27325ce 323 setting.change_setting(pad.A_pressed());
evanso 74:6827b43c689d 324
evanso 74:6827b43c689d 325 //stops music emedently changed
evanso 74:6827b43c689d 326 music_fx_ = setting.get_music_method();
evanso 74:6827b43c689d 327 stop_music();
evanso 69:753ba27325ce 328
evanso 69:753ba27325ce 329 //go back to main menu if b
evanso 69:753ba27325ce 330 if (pad.B_pressed()){
evanso 69:753ba27325ce 331 current_menu_part_ = main_menu;
evanso 69:753ba27325ce 332 }
evanso 69:753ba27325ce 333
evanso 69:753ba27325ce 334 lcd.refresh();
evanso 57:d4ce42c24561 335 }
evanso 57:d4ce42c24561 336
evanso 64:e9dfc35a1738 337
evanso 64:e9dfc35a1738 338
evanso 64:e9dfc35a1738 339 // Menu Saved Games ------------------------------------------------------------
evanso 64:e9dfc35a1738 340
evanso 64:e9dfc35a1738 341 void GameEngine::run_saved_games(){
evanso 64:e9dfc35a1738 342 // Draws and interact with save screen
evanso 64:e9dfc35a1738 343 read_joystick_direction();
evanso 64:e9dfc35a1738 344 saved.saved_games_scroll(d_);
evanso 64:e9dfc35a1738 345 saved.display_saved_games(lcd);
evanso 64:e9dfc35a1738 346
evanso 64:e9dfc35a1738 347 //go back to main menu
evanso 69:753ba27325ce 348 if (pad.B_pressed()){
evanso 64:e9dfc35a1738 349 current_menu_part_ = main_menu;
evanso 64:e9dfc35a1738 350 }
evanso 64:e9dfc35a1738 351
evanso 69:753ba27325ce 352 //Load save, if no file press go back to main menu
evanso 64:e9dfc35a1738 353 if (pad.A_pressed()){
evanso 64:e9dfc35a1738 354 wait(0.035);
evanso 64:e9dfc35a1738 355 saved_games_overide_init();
evanso 64:e9dfc35a1738 356 if(saved.get_error()) {
evanso 64:e9dfc35a1738 357 saved.set_error(false);
evanso 64:e9dfc35a1738 358 current_menu_part_ = main_menu;
evanso 64:e9dfc35a1738 359 }else{
evanso 64:e9dfc35a1738 360 current_menu_part_ = play;
evanso 64:e9dfc35a1738 361 }
evanso 64:e9dfc35a1738 362 }
evanso 64:e9dfc35a1738 363 }
evanso 64:e9dfc35a1738 364
evanso 64:e9dfc35a1738 365 void GameEngine::saved_games_overide_init(){
evanso 64:e9dfc35a1738 366 play_init();
evanso 64:e9dfc35a1738 367
evanso 64:e9dfc35a1738 368 //Creats data object add sett it values to data saved in the file
evanso 64:e9dfc35a1738 369 SavedGamesData displayed_game;
evanso 64:e9dfc35a1738 370 displayed_game = saved.read_saved_data(sd, lcd);
evanso 64:e9dfc35a1738 371
evanso 64:e9dfc35a1738 372 //Set the variables to value in the displayed saved struct
evanso 64:e9dfc35a1738 373 points_ = displayed_game.score;
evanso 64:e9dfc35a1738 374 spaceship_lives_ = displayed_game.lives;
evanso 64:e9dfc35a1738 375 smart_bomb_counter_= displayed_game.smart_bombs;
evanso 64:e9dfc35a1738 376 alien_number_ = displayed_game.alien_number;
evanso 64:e9dfc35a1738 377 }
evanso 64:e9dfc35a1738 378
evanso 76:6daba3002424 379 // Menu High score -------------------------------------------------------------
evanso 64:e9dfc35a1738 380
evanso 76:6daba3002424 381 void GameEngine::run_highscore(){
evanso 77:2ee9d1f9e282 382 lcd.clear();
evanso 77:2ee9d1f9e282 383 lcd.printString("High Scores",9,0);
evanso 77:2ee9d1f9e282 384 lcd.printString("Back(B)",21,5);
evanso 76:6daba3002424 385
evanso 77:2ee9d1f9e282 386 //sets error to false as may of become true from privuous error
evanso 77:2ee9d1f9e282 387 h_score.set_error(false);
evanso 77:2ee9d1f9e282 388
evanso 77:2ee9d1f9e282 389 //draws score/highscore part of screen
evanso 77:2ee9d1f9e282 390 char buffer[11];
evanso 77:2ee9d1f9e282 391 sprintf(buffer,"Score = %d",h_score.read_high_score(sd));
evanso 77:2ee9d1f9e282 392 lcd.printString(buffer,9,3);
evanso 77:2ee9d1f9e282 393
evanso 77:2ee9d1f9e282 394 // If error reading high score just say no high score or sd card
evanso 77:2ee9d1f9e282 395 if (h_score.get_error()){
evanso 77:2ee9d1f9e282 396 h_score.no_high_scores(lcd);
evanso 77:2ee9d1f9e282 397 wait(3);
evanso 77:2ee9d1f9e282 398 current_menu_part_ = main_menu;
evanso 77:2ee9d1f9e282 399 }
evanso 77:2ee9d1f9e282 400
evanso 77:2ee9d1f9e282 401 //go back to main menu when b pressed
evanso 77:2ee9d1f9e282 402 if (pad.B_pressed()){
evanso 77:2ee9d1f9e282 403 current_menu_part_ = main_menu;
evanso 77:2ee9d1f9e282 404 }
evanso 77:2ee9d1f9e282 405
evanso 77:2ee9d1f9e282 406 lcd.refresh();
evanso 76:6daba3002424 407 }
evanso 76:6daba3002424 408
evanso 76:6daba3002424 409 bool GameEngine::calculate_new_score(){
evanso 76:6daba3002424 410 bool new_high_score = false;
evanso 76:6daba3002424 411
evanso 76:6daba3002424 412 //gets old high score and return true if current score is greater
evanso 76:6daba3002424 413 int saved_high_score = h_score.read_high_score(sd);
evanso 76:6daba3002424 414 if (points_ > saved_high_score){
evanso 76:6daba3002424 415 new_high_score = true;
evanso 77:2ee9d1f9e282 416 h_score.save_new_high_score(sd, lcd, points_);
evanso 76:6daba3002424 417 }
evanso 76:6daba3002424 418 return new_high_score;
evanso 76:6daba3002424 419 }
evanso 64:e9dfc35a1738 420
evanso 42:3aed75338272 421
evanso 39:fc5586b930e3 422 //Spaceship control ------------------------------------------------------------
evanso 39:fc5586b930e3 423
evanso 15:90b6821bcf64 424 void GameEngine::read_joystick_direction(){
evanso 13:12276eed13ac 425 d_ = pad.get_direction();
evanso 18:11068b98e261 426 }
evanso 18:11068b98e261 427
evanso 65:daa792a09e1f 428 void GameEngine::read_accelerometer_direction(float roll,float pitch){
evanso 47:49fa1adc10b4 429 // printf("Pitch = %f Roll = %f\n", pitch, roll);
evanso 47:49fa1adc10b4 430
evanso 47:49fa1adc10b4 431 //north
evanso 47:49fa1adc10b4 432 if(pitch >= -35){
evanso 47:49fa1adc10b4 433 if(roll >= 10){
evanso 47:49fa1adc10b4 434 d_ = NE;
evanso 47:49fa1adc10b4 435 }else if (roll <= -10){
evanso 47:49fa1adc10b4 436 d_ = NW;
evanso 47:49fa1adc10b4 437 }else {
evanso 47:49fa1adc10b4 438 d_ = N;
evanso 47:49fa1adc10b4 439 }
evanso 47:49fa1adc10b4 440 //south
evanso 47:49fa1adc10b4 441 }else if(pitch <= -55){
evanso 47:49fa1adc10b4 442 if (roll >= 10){
evanso 47:49fa1adc10b4 443 d_ = SE;
evanso 47:49fa1adc10b4 444 }else if(roll <= -10){
evanso 47:49fa1adc10b4 445 d_ = SW;
evanso 47:49fa1adc10b4 446 }else {
evanso 47:49fa1adc10b4 447 d_ = S;
evanso 47:49fa1adc10b4 448 }
evanso 47:49fa1adc10b4 449 // East/west
evanso 47:49fa1adc10b4 450 }else {
evanso 47:49fa1adc10b4 451 if (roll >= 10){
evanso 47:49fa1adc10b4 452 d_ = E;
evanso 47:49fa1adc10b4 453 }else if(roll <= -10){
evanso 47:49fa1adc10b4 454 d_ = W;
evanso 47:49fa1adc10b4 455 }else{
evanso 47:49fa1adc10b4 456 d_ = CENTRE;
evanso 47:49fa1adc10b4 457 }
evanso 47:49fa1adc10b4 458 }
evanso 47:49fa1adc10b4 459 }
evanso 47:49fa1adc10b4 460
evanso 39:fc5586b930e3 461 void GameEngine::spaceship_lives_leds(){
evanso 39:fc5586b930e3 462 pad.leds_off();
evanso 39:fc5586b930e3 463
evanso 39:fc5586b930e3 464 //top two red leds on if 1 lives left
evanso 45:fc3238cd28c6 465 if(spaceship_lives_ >= 1){
evanso 39:fc5586b930e3 466 pad.led(1,1);
evanso 39:fc5586b930e3 467 pad.led(4,1);
evanso 39:fc5586b930e3 468 }
evanso 39:fc5586b930e3 469
evanso 39:fc5586b930e3 470 //middle two orange leds also on if 2 lives left
evanso 45:fc3238cd28c6 471 if(spaceship_lives_ >= 2){
evanso 39:fc5586b930e3 472 pad.led(2,1);
evanso 39:fc5586b930e3 473 pad.led(5,1);
evanso 39:fc5586b930e3 474 }
evanso 39:fc5586b930e3 475
evanso 39:fc5586b930e3 476 //bottom two red leds also on if 3 lives left
evanso 45:fc3238cd28c6 477 if(spaceship_lives_ == 3){
evanso 39:fc5586b930e3 478 pad.led(3,1);
evanso 39:fc5586b930e3 479 pad.led(6,1);
evanso 39:fc5586b930e3 480 }
evanso 39:fc5586b930e3 481 }
evanso 39:fc5586b930e3 482
evanso 44:2d957de3bce3 483
evanso 44:2d957de3bce3 484
evanso 36:27aa597db3d2 485 //Weapon control ---------------------------------------------------------------
evanso 36:27aa597db3d2 486
evanso 36:27aa597db3d2 487 void GameEngine::create_weapons_bullets(){
evanso 39:fc5586b930e3 488 // controlls speed that bullet can be fired
evanso 45:fc3238cd28c6 489 if(bullet_timer_ <=0){
evanso 39:fc5586b930e3 490 if (pad.A_pressed()){
evanso 36:27aa597db3d2 491 // Bullet object
evanso 36:27aa597db3d2 492 Weapons new_bullet;
evanso 36:27aa597db3d2 493
evanso 36:27aa597db3d2 494 new_bullet.init(spaceship.get_pos(),
evanso 36:27aa597db3d2 495 spaceship.get_spaceship_sprite_direction(), true);
evanso 36:27aa597db3d2 496
evanso 36:27aa597db3d2 497 // Stores bullet object in vector
evanso 36:27aa597db3d2 498 bullet_vector.push_back(new_bullet);
evanso 39:fc5586b930e3 499 }
evanso 77:2ee9d1f9e282 500 bullet_timer_ = 10;
evanso 39:fc5586b930e3 501 }
evanso 45:fc3238cd28c6 502 bullet_timer_--;
evanso 36:27aa597db3d2 503 }
evanso 36:27aa597db3d2 504
evanso 36:27aa597db3d2 505 void GameEngine::create_weapons_smart_bomb(){
evanso 39:fc5586b930e3 506 // timer to stop smart bomb button be accidently pressed twice
evanso 45:fc3238cd28c6 507 if(smart_bomb_timer_ <=0){
evanso 45:fc3238cd28c6 508 if (pad.B_pressed() && smart_bomb_counter_ > 0){
evanso 39:fc5586b930e3 509 weapons.smart_bomb(lcd);
evanso 45:fc3238cd28c6 510 smart_bomb_counter_--;
evanso 39:fc5586b930e3 511
evanso 39:fc5586b930e3 512 //Deletes alien object if on screen
evanso 39:fc5586b930e3 513 for (int i = (alien_vector.size() -1) ; i >= 0 ; i--){
evanso 39:fc5586b930e3 514 Vector2D alien_pos = alien_vector[i].get_pos();
evanso 36:27aa597db3d2 515
evanso 72:e7492591307e 516
evanso 39:fc5586b930e3 517 // Creats explosion if alien was on the screen
evanso 39:fc5586b930e3 518 if(alien_pos.x <= 84 && alien_pos.x >= -6){
evanso 39:fc5586b930e3 519 create_explosion(alien_pos);
evanso 39:fc5586b930e3 520
evanso 39:fc5586b930e3 521 //delete person object if was being abducted by destroyed alien
evanso 39:fc5586b930e3 522 if(alien_vector[i].get_collision_people_element() > -1){
evanso 39:fc5586b930e3 523 people_vector.erase(people_vector.begin() +
evanso 39:fc5586b930e3 524 alien_vector[i].get_collision_people_element());
evanso 39:fc5586b930e3 525 }
evanso 39:fc5586b930e3 526
evanso 39:fc5586b930e3 527 alien_vector.erase(alien_vector.begin()+ i);
evanso 45:fc3238cd28c6 528 points_ ++;
evanso 39:fc5586b930e3 529 }
evanso 36:27aa597db3d2 530 }
evanso 45:fc3238cd28c6 531 smart_bomb_timer_ = 30;
evanso 39:fc5586b930e3 532 }
evanso 39:fc5586b930e3 533 }
evanso 45:fc3238cd28c6 534 smart_bomb_timer_--;
evanso 36:27aa597db3d2 535 }
evanso 36:27aa597db3d2 536
evanso 36:27aa597db3d2 537 void GameEngine::draw_bullets(){
evanso 36:27aa597db3d2 538 // interates over bullet vectors, moves and draws bullet objects
evanso 36:27aa597db3d2 539
evanso 36:27aa597db3d2 540 // Alien bullets
evanso 36:27aa597db3d2 541 for (int i = 0; i < alien_bullet_vector.size(); i++){
evanso 36:27aa597db3d2 542 alien_bullet_vector[i].draw_alien_bullet(lcd, d_);
evanso 36:27aa597db3d2 543
evanso 36:27aa597db3d2 544 // deletes alien bullet object after bullet has moved set distance
evanso 36:27aa597db3d2 545 if(alien_bullet_vector[i].get_bullet_delete_counter() >> 5){
evanso 36:27aa597db3d2 546 alien_bullet_vector.erase(alien_bullet_vector.begin()+ i);
evanso 36:27aa597db3d2 547 }
evanso 36:27aa597db3d2 548
evanso 36:27aa597db3d2 549 // Deletes bullet and shpaceship if collision detected
evanso 36:27aa597db3d2 550 if (spaceship.check_collision(alien_bullet_vector[i]) &&
evanso 45:fc3238cd28c6 551 !spaceship_destroyed_ ){
evanso 36:27aa597db3d2 552 create_explosion(spaceship.get_pos());
evanso 36:27aa597db3d2 553
evanso 45:fc3238cd28c6 554 spaceship_destroyed_ = true;
evanso 36:27aa597db3d2 555 alien_bullet_vector.erase(alien_bullet_vector.begin()+ i);
evanso 36:27aa597db3d2 556 }
evanso 36:27aa597db3d2 557 }
evanso 36:27aa597db3d2 558
evanso 36:27aa597db3d2 559 // Spaceship bullets
evanso 36:27aa597db3d2 560 for (int i = 0; i < bullet_vector.size(); i++){
evanso 36:27aa597db3d2 561 bullet_vector[i].draw_bullet(lcd);
evanso 36:27aa597db3d2 562
evanso 36:27aa597db3d2 563 // deletes bullet object after bullet has moved set distance
evanso 36:27aa597db3d2 564 if(bullet_vector[i].get_bullet_delete_counter() >> 5){
evanso 36:27aa597db3d2 565 bullet_vector.erase(bullet_vector.begin()+ i);
evanso 36:27aa597db3d2 566 }
evanso 36:27aa597db3d2 567 }
evanso 36:27aa597db3d2 568 }
evanso 36:27aa597db3d2 569
evanso 36:27aa597db3d2 570
evanso 36:27aa597db3d2 571
evanso 36:27aa597db3d2 572 //Alien Control ----------------------------------------------------------------
evanso 36:27aa597db3d2 573
evanso 32:c006a9882778 574 void GameEngine::spawn_aliens(){
evanso 51:35cb8e604b72 575 if(alien_vector.size() <= alien_number_){
evanso 34:85ccc16f24d2 576 create_alien();
evanso 32:c006a9882778 577 }
evanso 32:c006a9882778 578
evanso 45:fc3238cd28c6 579 //printf( " alien_number_counter_ = %d\n",alien_number_counter_);
evanso 45:fc3238cd28c6 580
evanso 34:85ccc16f24d2 581 //slowley incresing the alien counter as game goes on to make harder
evanso 45:fc3238cd28c6 582 if(spawn_alien_counter_%(500*spawn_time_multipler_) == 0){
evanso 51:35cb8e604b72 583 alien_number_++;
evanso 45:fc3238cd28c6 584 spawn_time_multipler_++;
evanso 32:c006a9882778 585 }
evanso 34:85ccc16f24d2 586
evanso 45:fc3238cd28c6 587 spawn_alien_counter_++;
evanso 32:c006a9882778 588 }
evanso 32:c006a9882778 589
evanso 36:27aa597db3d2 590 void GameEngine::create_alien(){
evanso 36:27aa597db3d2 591 int position_x_start = 0;
evanso 36:27aa597db3d2 592
evanso 36:27aa597db3d2 593 // Alien object
evanso 36:27aa597db3d2 594 Alien new_alien;
evanso 36:27aa597db3d2 595
evanso 36:27aa597db3d2 596 //spawns aliens between x > 84 and x <0
evanso 36:27aa597db3d2 597 if(rand() % 2){
evanso 36:27aa597db3d2 598 position_x_start = rand() % 84 + 84;
evanso 36:27aa597db3d2 599 }else{
evanso 36:27aa597db3d2 600 position_x_start =rand() % 83 - 84;
evanso 36:27aa597db3d2 601 }
evanso 39:fc5586b930e3 602 new_alien.init(pad, position_x_start, (rand() % 33 + 9));
evanso 36:27aa597db3d2 603
evanso 36:27aa597db3d2 604 // Stores alien object in vector
evanso 36:27aa597db3d2 605 alien_vector.push_back(new_alien);
evanso 36:27aa597db3d2 606 }
evanso 36:27aa597db3d2 607
evanso 36:27aa597db3d2 608 void GameEngine::check_alien_people_collision(int i){
evanso 40:71f947254fda 609 // only a collision if all three of theses conditions are met:
evanso 40:71f947254fda 610 // check all these codition for every alien to every person
evanso 40:71f947254fda 611 // 1)person hasn't already had a collision
evanso 40:71f947254fda 612 // 2)There is an acutaual collision of people and alien
evanso 36:27aa597db3d2 613 for (int x = 0; x < people_vector.size(); x++){
evanso 36:27aa597db3d2 614 if (!people_vector[x].get_alien_collision_flag() &&
evanso 36:27aa597db3d2 615 people_vector[x].check_alien_collision(alien_vector[i])){
evanso 36:27aa597db3d2 616 alien_vector[i].set_collision_people_element(x);
evanso 36:27aa597db3d2 617 }
evanso 36:27aa597db3d2 618 }
evanso 36:27aa597db3d2 619
evanso 36:27aa597db3d2 620 //draws collision if detected
evanso 36:27aa597db3d2 621 if(alien_vector[i].get_collision_people_element() > -1){
evanso 36:27aa597db3d2 622 alien_vector[i].draw_alien(lcd,spaceship.get_pos(),d_,
evanso 36:27aa597db3d2 623 map.get_length_map(), map.get_position_x_map(),true);
evanso 36:27aa597db3d2 624 }else{
evanso 36:27aa597db3d2 625 alien_vector[i].draw_alien(lcd,spaceship.get_pos(),d_,
evanso 36:27aa597db3d2 626 map.get_length_map(), map.get_position_x_map(),false);
evanso 36:27aa597db3d2 627 }
evanso 36:27aa597db3d2 628 }
evanso 36:27aa597db3d2 629
evanso 36:27aa597db3d2 630 void GameEngine::alliens_fire_bullets(int i){
evanso 36:27aa597db3d2 631 if (alien_vector[i].get_alien_fire_counter()%60 == 0){
evanso 36:27aa597db3d2 632 Weapons alien_bullet;
evanso 36:27aa597db3d2 633
evanso 36:27aa597db3d2 634 // fires bullet towards direction of spaceship
evanso 36:27aa597db3d2 635 bool alien_bullet_direction = false;
evanso 36:27aa597db3d2 636 Vector2D spaceship_pos = spaceship.get_pos();
evanso 36:27aa597db3d2 637 Vector2D alien_pos = alien_vector[i].get_pos();
evanso 36:27aa597db3d2 638 if(spaceship_pos.x > alien_pos.x){
evanso 36:27aa597db3d2 639 alien_bullet_direction = true;
evanso 36:27aa597db3d2 640 }
evanso 36:27aa597db3d2 641
evanso 36:27aa597db3d2 642 alien_bullet.init(alien_vector[i].get_pos(),
evanso 36:27aa597db3d2 643 alien_bullet_direction , false);
evanso 36:27aa597db3d2 644
evanso 36:27aa597db3d2 645 // Stores bullet object in vector
evanso 36:27aa597db3d2 646 alien_bullet_vector.push_back(alien_bullet);
evanso 36:27aa597db3d2 647 }
evanso 36:27aa597db3d2 648 }
evanso 36:27aa597db3d2 649
evanso 36:27aa597db3d2 650 void GameEngine::delete_aliens(int i){
evanso 36:27aa597db3d2 651 for (int x = 0; x < bullet_vector.size(); x++){
evanso 36:27aa597db3d2 652 if (alien_vector[i].check_collision(bullet_vector[x])){
evanso 36:27aa597db3d2 653 create_explosion(alien_vector[i].get_pos());
evanso 36:27aa597db3d2 654
evanso 36:27aa597db3d2 655 //delete person object if was carried by destroyed alien
evanso 36:27aa597db3d2 656 if(alien_vector[i].get_collision_people_element() > -1){
evanso 36:27aa597db3d2 657 people_vector.erase(people_vector.begin() +
evanso 36:27aa597db3d2 658 alien_vector[i].get_collision_people_element());
evanso 36:27aa597db3d2 659 }
evanso 72:e7492591307e 660
evanso 39:fc5586b930e3 661 bullet_vector.erase(bullet_vector.begin()+ x);
evanso 39:fc5586b930e3 662 alien_vector.erase(alien_vector.begin()+ i);
evanso 45:fc3238cd28c6 663 points_ ++;
evanso 36:27aa597db3d2 664 }
evanso 36:27aa597db3d2 665 }
evanso 36:27aa597db3d2 666 }
evanso 36:27aa597db3d2 667
evanso 36:27aa597db3d2 668 void GameEngine::draw_aliens(){
evanso 36:27aa597db3d2 669 // interates over alien vector and draws each new_alien object
evanso 36:27aa597db3d2 670 for (int i = 0; i < alien_vector.size(); i++){
evanso 36:27aa597db3d2 671
evanso 36:27aa597db3d2 672 check_alien_people_collision(i);
evanso 36:27aa597db3d2 673
evanso 36:27aa597db3d2 674 // deleted spaceship if alien ship touches spaceship
evanso 36:27aa597db3d2 675 if (spaceship.check_alien_collision(alien_vector[i]) &&
evanso 45:fc3238cd28c6 676 !spaceship_destroyed_){
evanso 36:27aa597db3d2 677 create_explosion(spaceship.get_pos());
evanso 45:fc3238cd28c6 678 spaceship_destroyed_ = true;
evanso 36:27aa597db3d2 679 }
evanso 36:27aa597db3d2 680
evanso 36:27aa597db3d2 681 alliens_fire_bullets(i);
evanso 36:27aa597db3d2 682
evanso 36:27aa597db3d2 683 delete_aliens(i);
evanso 34:85ccc16f24d2 684 }
evanso 34:85ccc16f24d2 685 }
evanso 34:85ccc16f24d2 686
evanso 36:27aa597db3d2 687
evanso 36:27aa597db3d2 688
evanso 36:27aa597db3d2 689 //Explotion Control ------------------------------------------------------------
evanso 36:27aa597db3d2 690
evanso 36:27aa597db3d2 691 void GameEngine::create_explosion(Vector2D destroyed_position){
evanso 36:27aa597db3d2 692 // explosion object
evanso 36:27aa597db3d2 693 Explosion new_explosion;
evanso 36:27aa597db3d2 694
evanso 36:27aa597db3d2 695 new_explosion.init(destroyed_position);
evanso 33:7fedd8029473 696
evanso 36:27aa597db3d2 697 // Stores explosion object in vector
evanso 36:27aa597db3d2 698 explosion_vector.push_back(new_explosion);
evanso 72:e7492591307e 699
evanso 72:e7492591307e 700
evanso 73:d1aea9b8da92 701 //plays explosion sound if sound fx on
evanso 73:d1aea9b8da92 702 if (sound_fx_ == on){
evanso 73:d1aea9b8da92 703 pad.tone(40,0.1);
evanso 73:d1aea9b8da92 704 }
evanso 36:27aa597db3d2 705 }
evanso 36:27aa597db3d2 706
evanso 36:27aa597db3d2 707 void GameEngine::draw_explosions(){
evanso 36:27aa597db3d2 708 // interates over expoltion vector and draws each explosion object then
evanso 36:27aa597db3d2 709 // deleted object after set size
evanso 36:27aa597db3d2 710 for (int i = 0; i < explosion_vector.size(); i++){
evanso 36:27aa597db3d2 711 explosion_vector[i].draw_explosion(lcd);
evanso 31:6015e8ed859c 712
evanso 36:27aa597db3d2 713 // delete explosion after reaches set size
evanso 36:27aa597db3d2 714 if(explosion_vector[i].get_explosion_radius() == 8){
evanso 36:27aa597db3d2 715 explosion_vector.erase(explosion_vector.begin()+ i);
evanso 31:6015e8ed859c 716 }
evanso 36:27aa597db3d2 717 }
evanso 36:27aa597db3d2 718 }
evanso 36:27aa597db3d2 719
evanso 36:27aa597db3d2 720
evanso 36:27aa597db3d2 721
evanso 36:27aa597db3d2 722 //People Control ---------------------------------------------------------------
evanso 36:27aa597db3d2 723
evanso 36:27aa597db3d2 724 void GameEngine::spawn_people(){
evanso 36:27aa597db3d2 725 // Keeps number of people objects constant as people objecs are erased
evanso 36:27aa597db3d2 726 if(people_vector.size() <= 5){
evanso 36:27aa597db3d2 727 create_people();
evanso 31:6015e8ed859c 728 }
evanso 20:febd920ec29e 729 }
evanso 20:febd920ec29e 730
evanso 33:7fedd8029473 731 void GameEngine::create_people(){
evanso 33:7fedd8029473 732 // People object
evanso 33:7fedd8029473 733 People people;
evanso 33:7fedd8029473 734
evanso 33:7fedd8029473 735 people.init(pad, (rand() % 168 - 84));
evanso 33:7fedd8029473 736
evanso 33:7fedd8029473 737 // Stores alien object in vector
evanso 33:7fedd8029473 738 people_vector.push_back(people);
evanso 33:7fedd8029473 739 }
evanso 33:7fedd8029473 740
evanso 33:7fedd8029473 741 void GameEngine::draw_people(){
evanso 33:7fedd8029473 742 for (int i = 0; i < people_vector.size(); i++){
evanso 34:85ccc16f24d2 743 people_vector[i].draw_people(lcd, d_,
evanso 34:85ccc16f24d2 744 map.get_length_map(), map.get_position_x_map());
evanso 34:85ccc16f24d2 745
evanso 34:85ccc16f24d2 746 //errase person if at top of screen as captured by alien and alien is
evanso 34:85ccc16f24d2 747 //set to track mode
evanso 34:85ccc16f24d2 748 Vector2D people_pos = people_vector[i].get_pos();
evanso 40:71f947254fda 749
evanso 40:71f947254fda 750 for (int x = 0; x < alien_vector.size(); x++){
evanso 40:71f947254fda 751 Vector2D alien_pos = alien_vector[x].get_pos();
evanso 40:71f947254fda 752 if(people_pos.y < 30 && alien_pos.y < 9){
evanso 40:71f947254fda 753
evanso 40:71f947254fda 754 //set alien who abducted person to track mode
evanso 34:85ccc16f24d2 755 if(alien_vector[x].get_collision_people_element() == i){
evanso 34:85ccc16f24d2 756 alien_vector[x].set_track_flag(true);
evanso 40:71f947254fda 757 people_vector.erase(people_vector.begin()+ i);
evanso 34:85ccc16f24d2 758 }
evanso 40:71f947254fda 759
evanso 40:71f947254fda 760 }
evanso 34:85ccc16f24d2 761
evanso 34:85ccc16f24d2 762 }
evanso 33:7fedd8029473 763 }
evanso 33:7fedd8029473 764 }
evanso 33:7fedd8029473 765
evanso 19:1bc0a2d22054 766
evanso 25:70b55f5bfc87 767
evanso 36:27aa597db3d2 768 //Map Control-------------------------------------------------------------------
evanso 19:1bc0a2d22054 769
evanso 36:27aa597db3d2 770 void GameEngine::reset_map_timer(){
evanso 45:fc3238cd28c6 771 if(spaceship_destroyed_){
evanso 45:fc3238cd28c6 772 reset_map_counter_++;
evanso 36:27aa597db3d2 773
evanso 36:27aa597db3d2 774 // stops map movement
evanso 36:27aa597db3d2 775 d_ = CENTRE;
evanso 36:27aa597db3d2 776
evanso 36:27aa597db3d2 777 // reset map after set time
evanso 45:fc3238cd28c6 778 if(reset_map_counter_ == 50){
evanso 36:27aa597db3d2 779 reset_map();
evanso 25:70b55f5bfc87 780 }
evanso 36:27aa597db3d2 781 }
evanso 25:70b55f5bfc87 782 }
evanso 36:27aa597db3d2 783
evanso 30:814674b189f0 784 void GameEngine::reset_map(){
evanso 36:27aa597db3d2 785 // Reassign values to variables
evanso 30:814674b189f0 786 spaceship.init();
evanso 45:fc3238cd28c6 787 spaceship_lives_--;
evanso 45:fc3238cd28c6 788 spaceship_destroyed_ = false;
evanso 45:fc3238cd28c6 789 reset_map_counter_ = 0;
evanso 33:7fedd8029473 790
evanso 34:85ccc16f24d2 791 // erase aliens so redrawn in random positions when respawning spaceship
evanso 34:85ccc16f24d2 792 for (int i = (alien_vector.size() - 1); i >= 0 ; i--){
evanso 34:85ccc16f24d2 793 alien_vector.erase(alien_vector.begin()+ i);
evanso 34:85ccc16f24d2 794 }
evanso 36:27aa597db3d2 795
evanso 34:85ccc16f24d2 796 // erase all people so redrawn at bottom of map
evanso 34:85ccc16f24d2 797 for (int i = (people_vector.size() - 1); i >= 0 ; i--){
evanso 34:85ccc16f24d2 798 people_vector.erase(people_vector.begin()+ i);
evanso 34:85ccc16f24d2 799 }
evanso 36:27aa597db3d2 800
evanso 36:27aa597db3d2 801 // erase all alien bullets
evanso 34:85ccc16f24d2 802 for (int i = (alien_bullet_vector.size() - 1); i >= 0 ; i--){
evanso 34:85ccc16f24d2 803 alien_bullet_vector.erase(alien_bullet_vector.begin()+ i);
evanso 33:7fedd8029473 804 }
evanso 20:febd920ec29e 805 }