Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Sun May 24 19:20:23 2020 +0000
Revision:
77:2ee9d1f9e282
Parent:
76:6daba3002424
Child:
79:66bcf8fa2d2d
High score area in the menu now displays the high score. High score updates correctly and correct error messages show when sd card isn't present or no high score is set.

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