Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Fri May 22 17:47:48 2020 +0000
Revision:
71:bcbac2cfe005
Parent:
69:753ba27325ce
Child:
72:e7492591307e
Added setting controls method to playable part of game, but also separated it into another function in the game engine

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evanso 11:ab578a151f67 1 #ifndef GAMEENGINE_H
evanso 11:ab578a151f67 2 #define GAMEENGINE_H
evanso 7:0af4ced868f5 3
evanso 27:8bb2bd97c319 4 // Included libraries ----------------------------------------------------------
evanso 7:0af4ced868f5 5 #include "mbed.h"
evanso 7:0af4ced868f5 6 #include "N5110.h"
evanso 7:0af4ced868f5 7 #include "Gamepad.h"
evanso 8:dd1037c5435b 8 #include "Spaceship.h"
evanso 8:dd1037c5435b 9 #include "Map.h"
evanso 17:25d79cca203a 10 #include "Weapons.h"
evanso 19:1bc0a2d22054 11 #include "Alien.h"
evanso 25:70b55f5bfc87 12 #include "Explosion.h"
evanso 33:7fedd8029473 13 #include "People.h"
evanso 39:fc5586b930e3 14 #include "HUD.h"
evanso 40:71f947254fda 15 #include "Menu.h"
evanso 47:49fa1adc10b4 16 #include "FXOS8700CQ.h"
evanso 49:ed569eceeaa4 17 #include "SDFileSystem.h"
evanso 56:663d0546c235 18 #include "SavedGames.h"
evanso 69:753ba27325ce 19 #include "Settings.h"
evanso 67:a2984682d641 20
evanso 67:a2984682d641 21 #include <vector>
evanso 47:49fa1adc10b4 22
evanso 11:ab578a151f67 23 /** GameEngine class
evanso 27:8bb2bd97c319 24 * @brief Runs the different parts of the game
evanso 27:8bb2bd97c319 25 * @author Benjamin Evans, University of Leeds
evanso 27:8bb2bd97c319 26 * @date April 2020
evanso 27:8bb2bd97c319 27 */
evanso 7:0af4ced868f5 28 class GameEngine {
evanso 7:0af4ced868f5 29 public:
evanso 7:0af4ced868f5 30 /** Constructor */
evanso 7:0af4ced868f5 31 GameEngine();
evanso 7:0af4ced868f5 32
evanso 7:0af4ced868f5 33 /** Destructor */
evanso 7:0af4ced868f5 34 ~GameEngine();
evanso 7:0af4ced868f5 35
evanso 14:7419c680656f 36 /** Initalises GameEngine */
evanso 13:12276eed13ac 37 void init();
evanso 7:0af4ced868f5 38
evanso 47:49fa1adc10b4 39 /** Switch statement to run run different menu options */
evanso 42:3aed75338272 40 void game_select_part();
evanso 15:90b6821bcf64 41
evanso 27:8bb2bd97c319 42 // Accessors and mutators --------------------------------------------------
evanso 11:ab578a151f67 43
evanso 11:ab578a151f67 44 private:
evanso 27:8bb2bd97c319 45 // Function prototypes -----------------------------------------------------
evanso 64:e9dfc35a1738 46
evanso 41:5959256f4aab 47 // Menu Control
evanso 64:e9dfc35a1738 48 /** Runs the menu */
evanso 64:e9dfc35a1738 49 void run_menu();
evanso 64:e9dfc35a1738 50
evanso 64:e9dfc35a1738 51 // Menu Play
evanso 64:e9dfc35a1738 52 /** Runs the play game */
evanso 64:e9dfc35a1738 53 void run_play();
evanso 42:3aed75338272 54
evanso 64:e9dfc35a1738 55 /** Initialises the play part of the game*/
evanso 64:e9dfc35a1738 56 void play_init();
evanso 71:bcbac2cfe005 57
evanso 71:bcbac2cfe005 58 /** Only runs movement when the spaceship is not destroyed */
evanso 71:bcbac2cfe005 59 void spaceship_not_detroyed();
evanso 64:e9dfc35a1738 60
evanso 42:3aed75338272 61 /** Main gameplay loop that runs playable part of game */
evanso 42:3aed75338272 62 void gameplay_loop();
evanso 41:5959256f4aab 63
evanso 64:e9dfc35a1738 64 /** Draws the game over screen*/
evanso 64:e9dfc35a1738 65 void draw_game_over_screen();
evanso 41:5959256f4aab 66
evanso 56:663d0546c235 67 /** Runs the paused screen */
evanso 56:663d0546c235 68 void run_paused_game();
evanso 56:663d0546c235 69
evanso 55:c04568b25617 70 /** Draws the pause screen*/
evanso 55:c04568b25617 71 void draw_pause_screen();
evanso 55:c04568b25617 72
evanso 64:e9dfc35a1738 73 /** Runs saved games screen */
evanso 64:e9dfc35a1738 74 void run_saved_games();
evanso 64:e9dfc35a1738 75
evanso 64:e9dfc35a1738 76 /** Time-triggered interrupt to wake MCU from sleep */
evanso 64:e9dfc35a1738 77 void lcd_frame_time_isr();
evanso 57:d4ce42c24561 78
evanso 64:e9dfc35a1738 79 // Menu Setting
evanso 64:e9dfc35a1738 80 /** Runs settings screen*/
evanso 64:e9dfc35a1738 81 void run_settings();
evanso 58:a9a39424df52 82
evanso 64:e9dfc35a1738 83 // Menu Saved Games
evanso 59:0b2e43312d6b 84 /** Initialises the play part of the game and sets the variables to
evanso 59:0b2e43312d6b 85 * saved values
evanso 59:0b2e43312d6b 86 */
evanso 64:e9dfc35a1738 87 void saved_games_overide_init();
evanso 59:0b2e43312d6b 88
evanso 62:f0c86a854a9e 89 /** Runs save a game screen */
evanso 64:e9dfc35a1738 90 void run_save_a_game();
evanso 62:f0c86a854a9e 91
evanso 39:fc5586b930e3 92 //Spaceship Control
evanso 27:8bb2bd97c319 93 /** Gets joystick direction from gamepad and stores it in d_ */
evanso 18:11068b98e261 94 void read_joystick_direction();
evanso 11:ab578a151f67 95
evanso 47:49fa1adc10b4 96 /** Gets the pitch and roll of the gamepad and calculates d_ */
evanso 65:daa792a09e1f 97 void read_accelerometer_direction(float roll, float pitch);
evanso 47:49fa1adc10b4 98
evanso 39:fc5586b930e3 99 /** Turns on specific leds depending on how many lives left */
evanso 39:fc5586b930e3 100 void spaceship_lives_leds();
evanso 39:fc5586b930e3 101
evanso 36:27aa597db3d2 102 //Weapon Control
evanso 39:fc5586b930e3 103 /** Creates weapons object if button A is pressed and stores in vector*/
evanso 36:27aa597db3d2 104 void create_weapons_bullets();
evanso 36:27aa597db3d2 105
evanso 36:27aa597db3d2 106 /** Creates smart bomb if button B is pressed */
evanso 36:27aa597db3d2 107 void create_weapons_smart_bomb();
evanso 19:1bc0a2d22054 108
evanso 27:8bb2bd97c319 109 /** Draws each bullet object and deleted object after set movement
evanso 27:8bb2bd97c319 110 * distance
evanso 27:8bb2bd97c319 111 */
evanso 19:1bc0a2d22054 112 void draw_bullets();
evanso 13:12276eed13ac 113
evanso 36:27aa597db3d2 114 //Alien Control
evanso 36:27aa597db3d2 115 /** Spawns aliens in random position of the screen*/
evanso 36:27aa597db3d2 116 void spawn_aliens();
evanso 36:27aa597db3d2 117
evanso 22:053c11a202e1 118 /** Creats alien object and stores in vector*/
evanso 20:febd920ec29e 119 void create_alien();
evanso 20:febd920ec29e 120
evanso 36:27aa597db3d2 121 /** Checks for alien people collision and sets abduction movements
evanso 36:27aa597db3d2 122 * @param i @details iterator from draw_alien for loop
evanso 36:27aa597db3d2 123 */
evanso 36:27aa597db3d2 124 void check_alien_people_collision(int i);
evanso 36:27aa597db3d2 125
evanso 36:27aa597db3d2 126 /** Gets alien to fire bullets randomley towards spaceship
evanso 36:27aa597db3d2 127 * @param i @details iterator from draw_alien for loop
evanso 36:27aa597db3d2 128 */
evanso 36:27aa597db3d2 129 void alliens_fire_bullets(int i);
evanso 36:27aa597db3d2 130
evanso 36:27aa597db3d2 131 /**Deletes bullet and alien if collision detected and draws explosion
evanso 36:27aa597db3d2 132 * @param i @details iterator from draw_alien for loop
evanso 36:27aa597db3d2 133 */
evanso 36:27aa597db3d2 134 void delete_aliens(int i);
evanso 36:27aa597db3d2 135
evanso 27:8bb2bd97c319 136 /** Draws each alien object and deletes both objects if collision
evanso 27:8bb2bd97c319 137 * detected
evanso 27:8bb2bd97c319 138 */
evanso 20:febd920ec29e 139 void draw_aliens();
evanso 20:febd920ec29e 140
evanso 36:27aa597db3d2 141 //Explotion Control
evanso 36:27aa597db3d2 142 /** Creates bullet object if button A is pressed and stores in vector */
evanso 29:e96d91f1d39c 143 void create_explosion(Vector2D destroyed_position);
evanso 25:70b55f5bfc87 144
evanso 27:8bb2bd97c319 145 /** Draws each explosion object if collision detected */
evanso 25:70b55f5bfc87 146 void draw_explosions();
evanso 25:70b55f5bfc87 147
evanso 36:27aa597db3d2 148 //People Control
evanso 36:27aa597db3d2 149 /** Spawns people in random places at bottom of screen */
evanso 36:27aa597db3d2 150 void spawn_people();
evanso 32:c006a9882778 151
evanso 33:7fedd8029473 152 /** Spawns people in random position at bottom of the screen*/
evanso 33:7fedd8029473 153 void create_people();
evanso 33:7fedd8029473 154
evanso 33:7fedd8029473 155 /** Draws each people object */
evanso 33:7fedd8029473 156 void draw_people();
evanso 36:27aa597db3d2 157
evanso 36:27aa597db3d2 158 //Map Control
evanso 36:27aa597db3d2 159 /** Resets map after set time so spaceship explosion animation showes */
evanso 36:27aa597db3d2 160 void reset_map_timer();
evanso 33:7fedd8029473 161
evanso 36:27aa597db3d2 162 /** Resets the map after spaceship death and timer has ended */
evanso 36:27aa597db3d2 163 void reset_map();
evanso 36:27aa597db3d2 164
evanso 27:8bb2bd97c319 165 // Variables ---------------------------------------------------------------
evanso 41:5959256f4aab 166
evanso 41:5959256f4aab 167 // Menu Control
evanso 43:d43759dbddb9 168 /** The part of the menu that is currently selected and in*/
evanso 41:5959256f4aab 169 MenuParts current_menu_part_;
evanso 42:3aed75338272 170
evanso 42:3aed75338272 171 /** Volatile flag for ISR */
evanso 45:fc3238cd28c6 172 volatile int lcd_frame_time_flag_;
evanso 56:663d0546c235 173
evanso 56:663d0546c235 174 /** Paused flag */
evanso 56:663d0546c235 175 bool paused_flag_;
evanso 56:663d0546c235 176
evanso 62:f0c86a854a9e 177 /** Flag to exit the play part of the game */
evanso 57:d4ce42c24561 178 bool exit_flag_;
evanso 62:f0c86a854a9e 179
evanso 62:f0c86a854a9e 180 /** Flag to run the save game screen */
evanso 64:e9dfc35a1738 181 bool run_save_a_game_flag_;
evanso 68:bb1650c657ef 182
evanso 68:bb1650c657ef 183 /** Counter for pause screen so pause button doesnt double press */
evanso 68:bb1650c657ef 184 int paused_counter_;
evanso 43:d43759dbddb9 185
evanso 39:fc5586b930e3 186 //Spacehip Control
evanso 39:fc5586b930e3 187 /** Define points*/
evanso 45:fc3238cd28c6 188 int points_;
evanso 18:11068b98e261 189
evanso 27:8bb2bd97c319 190 /** Define direction d of joystick*/
evanso 15:90b6821bcf64 191 Direction d_;
evanso 18:11068b98e261 192
evanso 36:27aa597db3d2 193 /** Flag for if spaceship is destroyed*/
evanso 45:fc3238cd28c6 194 bool spaceship_destroyed_;
evanso 36:27aa597db3d2 195
evanso 30:814674b189f0 196 /** Number of spaceship lives remaining*/
evanso 45:fc3238cd28c6 197 int spaceship_lives_;
evanso 30:814674b189f0 198
evanso 64:e9dfc35a1738 199 // Weapon Control
evanso 64:e9dfc35a1738 200 /** Counter for smart bomb timer*/
evanso 64:e9dfc35a1738 201 int smart_bomb_timer_;
evanso 64:e9dfc35a1738 202
evanso 64:e9dfc35a1738 203 /** Counter for bullet timer*/
evanso 64:e9dfc35a1738 204 int bullet_timer_;
evanso 64:e9dfc35a1738 205
evanso 64:e9dfc35a1738 206 /** Counter for how smart bombs left*/
evanso 64:e9dfc35a1738 207 int smart_bomb_counter_;
evanso 64:e9dfc35a1738 208
evanso 39:fc5586b930e3 209 // Alien Control
evanso 32:c006a9882778 210 /** Counter for spawning aliens*/
evanso 45:fc3238cd28c6 211 int spawn_alien_counter_;
evanso 32:c006a9882778 212
evanso 51:35cb8e604b72 213 /** Numeber of aliens on the screen at a time*/
evanso 51:35cb8e604b72 214 int alien_number_;
evanso 34:85ccc16f24d2 215
evanso 45:fc3238cd28c6 216 /** Miltiplier to increase number of alien as time goes on */
evanso 45:fc3238cd28c6 217 int spawn_time_multipler_;
evanso 64:e9dfc35a1738 218
evanso 64:e9dfc35a1738 219 // Map Control
evanso 64:e9dfc35a1738 220 /** Counter to reset map after set amount of frames*/
evanso 64:e9dfc35a1738 221 int reset_map_counter_;
evanso 64:e9dfc35a1738 222
evanso 27:8bb2bd97c319 223 // Vectors -----------------------------------------------------------------
evanso 27:8bb2bd97c319 224
evanso 27:8bb2bd97c319 225 /** Vector to store each new bullet object*/
evanso 19:1bc0a2d22054 226 std::vector<Weapons> bullet_vector;
evanso 19:1bc0a2d22054 227
evanso 28:a5958497d5ce 228 /** Vector to store each alien bullet object*/
evanso 28:a5958497d5ce 229 std::vector<Weapons> alien_bullet_vector;
evanso 28:a5958497d5ce 230
evanso 27:8bb2bd97c319 231 /** Vector to store each new alien object*/
evanso 20:febd920ec29e 232 std::vector<Alien> alien_vector;
evanso 20:febd920ec29e 233
evanso 27:8bb2bd97c319 234 /** Vector to store each new eplosion object*/
evanso 25:70b55f5bfc87 235 std::vector<Explosion> explosion_vector;
evanso 25:70b55f5bfc87 236
evanso 33:7fedd8029473 237 /** Vector to store each new people object*/
evanso 33:7fedd8029473 238 std::vector<People> people_vector;
evanso 33:7fedd8029473 239
evanso 27:8bb2bd97c319 240 // Objects -----------------------------------------------------------------
evanso 27:8bb2bd97c319 241
evanso 43:d43759dbddb9 242 /** Define Gamepad object */
evanso 13:12276eed13ac 243 Gamepad pad;
evanso 13:12276eed13ac 244
evanso 43:d43759dbddb9 245 /** Define LCD object */
evanso 13:12276eed13ac 246 N5110 lcd;
evanso 13:12276eed13ac 247
evanso 27:8bb2bd97c319 248 /** Define Spaceship object */
evanso 13:12276eed13ac 249 Spaceship spaceship;
evanso 13:12276eed13ac 250
evanso 43:d43759dbddb9 251 /** Define Map object */
evanso 19:1bc0a2d22054 252 Map map;
evanso 33:7fedd8029473 253
evanso 43:d43759dbddb9 254 /** Define Weapons object */
evanso 33:7fedd8029473 255 Weapons weapons;
evanso 39:fc5586b930e3 256
evanso 43:d43759dbddb9 257 /** Define HUD object */
evanso 39:fc5586b930e3 258 HUD hud;
evanso 40:71f947254fda 259
evanso 43:d43759dbddb9 260 /** Define Menu object */
evanso 40:71f947254fda 261 Menu menu;
evanso 42:3aed75338272 262
evanso 69:753ba27325ce 263 /** Define Setting object */
evanso 69:753ba27325ce 264 Settings setting;
evanso 69:753ba27325ce 265
evanso 64:e9dfc35a1738 266 /** Define Ticker object for lcd framerate */
evanso 47:49fa1adc10b4 267 Ticker ticker;
evanso 56:663d0546c235 268
evanso 64:e9dfc35a1738 269 /** Define SavedGames object */
evanso 56:663d0546c235 270 SavedGames saved;
evanso 7:0af4ced868f5 271 };
evanso 7:0af4ced868f5 272
evanso 7:0af4ced868f5 273 #endif