Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Sun May 17 23:40:34 2020 +0000
Revision:
41:5959256f4aab
Parent:
40:71f947254fda
Child:
42:3aed75338272
Added function to main to select between different menu parts;

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 32:c006a9882778 16 #include <cmath>
evanso 18:11068b98e261 17 #include <vector>
evanso 7:0af4ced868f5 18
evanso 11:ab578a151f67 19 /** GameEngine class
evanso 27:8bb2bd97c319 20 * @brief Runs the different parts of the game
evanso 27:8bb2bd97c319 21 * @author Benjamin Evans, University of Leeds
evanso 27:8bb2bd97c319 22 * @date April 2020
evanso 27:8bb2bd97c319 23 */
evanso 7:0af4ced868f5 24 class GameEngine {
evanso 7:0af4ced868f5 25 public:
evanso 7:0af4ced868f5 26 /** Constructor */
evanso 7:0af4ced868f5 27 GameEngine();
evanso 7:0af4ced868f5 28
evanso 7:0af4ced868f5 29 /** Destructor */
evanso 7:0af4ced868f5 30 ~GameEngine();
evanso 7:0af4ced868f5 31
evanso 14:7419c680656f 32 /** Initalises GameEngine */
evanso 13:12276eed13ac 33 void init();
evanso 7:0af4ced868f5 34
evanso 14:7419c680656f 35 /** Main gameplay loop that runs playable part of game */
evanso 13:12276eed13ac 36 void gameplay_loop();
evanso 15:90b6821bcf64 37
evanso 27:8bb2bd97c319 38 // Accessors and mutators --------------------------------------------------
evanso 11:ab578a151f67 39
evanso 11:ab578a151f67 40 private:
evanso 27:8bb2bd97c319 41 // Function prototypes -----------------------------------------------------
evanso 39:fc5586b930e3 42
evanso 41:5959256f4aab 43 // Menu Control
evanso 41:5959256f4aab 44 /** Switch statement to run run different menu options */
evanso 41:5959256f4aab 45 void game_select_part();
evanso 41:5959256f4aab 46
evanso 41:5959256f4aab 47 /** Runs the menu */
evanso 41:5959256f4aab 48 void run_menu();
evanso 41:5959256f4aab 49
evanso 41:5959256f4aab 50 /** Runs the play game part of menu */
evanso 41:5959256f4aab 51 void run_play();
evanso 41:5959256f4aab 52
evanso 41:5959256f4aab 53 /** Runs settings part of games */
evanso 41:5959256f4aab 54 void run_settings();
evanso 41:5959256f4aab 55
evanso 41:5959256f4aab 56 /** Runs settings part of games*/
evanso 41:5959256f4aab 57 void run_saved_games();
evanso 41:5959256f4aab 58
evanso 41:5959256f4aab 59
evanso 39:fc5586b930e3 60 //Spaceship Control
evanso 27:8bb2bd97c319 61 /** Gets joystick direction from gamepad and stores it in d_ */
evanso 18:11068b98e261 62 void read_joystick_direction();
evanso 11:ab578a151f67 63
evanso 39:fc5586b930e3 64 /** Turns on specific leds depending on how many lives left */
evanso 39:fc5586b930e3 65 void spaceship_lives_leds();
evanso 39:fc5586b930e3 66
evanso 36:27aa597db3d2 67 //Weapon Control
evanso 39:fc5586b930e3 68 /** Creates weapons object if button A is pressed and stores in vector*/
evanso 36:27aa597db3d2 69 void create_weapons_bullets();
evanso 36:27aa597db3d2 70
evanso 36:27aa597db3d2 71 /** Creates smart bomb if button B is pressed */
evanso 36:27aa597db3d2 72 void create_weapons_smart_bomb();
evanso 19:1bc0a2d22054 73
evanso 27:8bb2bd97c319 74 /** Draws each bullet object and deleted object after set movement
evanso 27:8bb2bd97c319 75 * distance
evanso 27:8bb2bd97c319 76 */
evanso 19:1bc0a2d22054 77 void draw_bullets();
evanso 13:12276eed13ac 78
evanso 36:27aa597db3d2 79 //Alien Control
evanso 36:27aa597db3d2 80 /** Spawns aliens in random position of the screen*/
evanso 36:27aa597db3d2 81 void spawn_aliens();
evanso 36:27aa597db3d2 82
evanso 22:053c11a202e1 83 /** Creats alien object and stores in vector*/
evanso 20:febd920ec29e 84 void create_alien();
evanso 20:febd920ec29e 85
evanso 36:27aa597db3d2 86 /** Checks for alien people collision and sets abduction movements
evanso 36:27aa597db3d2 87 * @param i @details iterator from draw_alien for loop
evanso 36:27aa597db3d2 88 */
evanso 36:27aa597db3d2 89 void check_alien_people_collision(int i);
evanso 36:27aa597db3d2 90
evanso 36:27aa597db3d2 91 /** Gets alien to fire bullets randomley towards spaceship
evanso 36:27aa597db3d2 92 * @param i @details iterator from draw_alien for loop
evanso 36:27aa597db3d2 93 */
evanso 36:27aa597db3d2 94 void alliens_fire_bullets(int i);
evanso 36:27aa597db3d2 95
evanso 36:27aa597db3d2 96 /**Deletes bullet and alien if collision detected and draws explosion
evanso 36:27aa597db3d2 97 * @param i @details iterator from draw_alien for loop
evanso 36:27aa597db3d2 98 */
evanso 36:27aa597db3d2 99 void delete_aliens(int i);
evanso 36:27aa597db3d2 100
evanso 27:8bb2bd97c319 101 /** Draws each alien object and deletes both objects if collision
evanso 27:8bb2bd97c319 102 * detected
evanso 27:8bb2bd97c319 103 */
evanso 20:febd920ec29e 104 void draw_aliens();
evanso 20:febd920ec29e 105
evanso 36:27aa597db3d2 106 //Explotion Control
evanso 36:27aa597db3d2 107 /** Creates bullet object if button A is pressed and stores in vector */
evanso 29:e96d91f1d39c 108 void create_explosion(Vector2D destroyed_position);
evanso 25:70b55f5bfc87 109
evanso 27:8bb2bd97c319 110 /** Draws each explosion object if collision detected */
evanso 25:70b55f5bfc87 111 void draw_explosions();
evanso 25:70b55f5bfc87 112
evanso 36:27aa597db3d2 113 //People Control
evanso 36:27aa597db3d2 114 /** Spawns people in random places at bottom of screen */
evanso 36:27aa597db3d2 115 void spawn_people();
evanso 32:c006a9882778 116
evanso 33:7fedd8029473 117 /** Spawns people in random position at bottom of the screen*/
evanso 33:7fedd8029473 118 void create_people();
evanso 33:7fedd8029473 119
evanso 33:7fedd8029473 120 /** Draws each people object */
evanso 33:7fedd8029473 121 void draw_people();
evanso 36:27aa597db3d2 122
evanso 36:27aa597db3d2 123 //Map Control
evanso 36:27aa597db3d2 124 /** Resets map after set time so spaceship explosion animation showes */
evanso 36:27aa597db3d2 125 void reset_map_timer();
evanso 33:7fedd8029473 126
evanso 36:27aa597db3d2 127 /** Resets the map after spaceship death and timer has ended */
evanso 36:27aa597db3d2 128 void reset_map();
evanso 36:27aa597db3d2 129
evanso 27:8bb2bd97c319 130 // Variables ---------------------------------------------------------------
evanso 41:5959256f4aab 131
evanso 41:5959256f4aab 132 // Menu Control
evanso 41:5959256f4aab 133
evanso 41:5959256f4aab 134 MenuParts current_menu_part_;
evanso 39:fc5586b930e3 135
evanso 39:fc5586b930e3 136 //Spacehip Control
evanso 39:fc5586b930e3 137 /** Define points*/
evanso 39:fc5586b930e3 138 int points;
evanso 18:11068b98e261 139
evanso 27:8bb2bd97c319 140 /** Define direction d of joystick*/
evanso 15:90b6821bcf64 141 Direction d_;
evanso 18:11068b98e261 142
evanso 36:27aa597db3d2 143 /** Flag for if spaceship is destroyed*/
evanso 36:27aa597db3d2 144 bool spaceship_destroyed;
evanso 36:27aa597db3d2 145
evanso 30:814674b189f0 146 /** Number of spaceship lives remaining*/
evanso 30:814674b189f0 147 int spaceship_lives;
evanso 30:814674b189f0 148
evanso 39:fc5586b930e3 149 // Map Control
evanso 31:6015e8ed859c 150 /** Counter to reset map after set amount of frames*/
evanso 30:814674b189f0 151 int reset_map_counter;
evanso 39:fc5586b930e3 152
evanso 39:fc5586b930e3 153 // Alien Control
evanso 32:c006a9882778 154 /** Counter for spawning aliens*/
evanso 33:7fedd8029473 155 int spawn_alien_counter;
evanso 32:c006a9882778 156
evanso 34:85ccc16f24d2 157 /** Counter for numeber of aliens*/
evanso 34:85ccc16f24d2 158 int alien_number_counter;
evanso 34:85ccc16f24d2 159
evanso 36:27aa597db3d2 160 /** Counter for spawning aliens*/
evanso 36:27aa597db3d2 161 double spawn_alien_rate;
evanso 39:fc5586b930e3 162
evanso 39:fc5586b930e3 163 // Weapon Control
evanso 39:fc5586b930e3 164 /** Counter for smart bomb timer*/
evanso 39:fc5586b930e3 165 int smart_bomb_timer;
evanso 39:fc5586b930e3 166
evanso 39:fc5586b930e3 167 /** Counter for bullet timer*/
evanso 39:fc5586b930e3 168 int bullet_timer;
evanso 39:fc5586b930e3 169
evanso 39:fc5586b930e3 170 /** Counter for how smart bombs left*/
evanso 39:fc5586b930e3 171 int smart_bomb_counter;
evanso 36:27aa597db3d2 172
evanso 27:8bb2bd97c319 173 // Vectors -----------------------------------------------------------------
evanso 27:8bb2bd97c319 174
evanso 27:8bb2bd97c319 175 /** Vector to store each new bullet object*/
evanso 19:1bc0a2d22054 176 std::vector<Weapons> bullet_vector;
evanso 19:1bc0a2d22054 177
evanso 28:a5958497d5ce 178 /** Vector to store each alien bullet object*/
evanso 28:a5958497d5ce 179 std::vector<Weapons> alien_bullet_vector;
evanso 28:a5958497d5ce 180
evanso 27:8bb2bd97c319 181 /** Vector to store each new alien object*/
evanso 20:febd920ec29e 182 std::vector<Alien> alien_vector;
evanso 20:febd920ec29e 183
evanso 27:8bb2bd97c319 184 /** Vector to store each new eplosion object*/
evanso 25:70b55f5bfc87 185 std::vector<Explosion> explosion_vector;
evanso 25:70b55f5bfc87 186
evanso 33:7fedd8029473 187 /** Vector to store each new people object*/
evanso 33:7fedd8029473 188 std::vector<People> people_vector;
evanso 33:7fedd8029473 189
evanso 27:8bb2bd97c319 190 // Objects -----------------------------------------------------------------
evanso 27:8bb2bd97c319 191
evanso 27:8bb2bd97c319 192 /** Define Gamepad object*/
evanso 13:12276eed13ac 193 Gamepad pad;
evanso 13:12276eed13ac 194
evanso 27:8bb2bd97c319 195 /** Define LCD object*/
evanso 13:12276eed13ac 196 N5110 lcd;
evanso 13:12276eed13ac 197
evanso 27:8bb2bd97c319 198 /** Define Spaceship object */
evanso 13:12276eed13ac 199 Spaceship spaceship;
evanso 13:12276eed13ac 200
evanso 27:8bb2bd97c319 201 /** Define Map object*/
evanso 19:1bc0a2d22054 202 Map map;
evanso 33:7fedd8029473 203
evanso 33:7fedd8029473 204 /** Define Weapons object*/
evanso 33:7fedd8029473 205 Weapons weapons;
evanso 39:fc5586b930e3 206
evanso 39:fc5586b930e3 207 /** Define HUD object*/
evanso 39:fc5586b930e3 208 HUD hud;
evanso 40:71f947254fda 209
evanso 40:71f947254fda 210 /** Define Menu object*/
evanso 40:71f947254fda 211 Menu menu;
evanso 7:0af4ced868f5 212 };
evanso 7:0af4ced868f5 213
evanso 7:0af4ced868f5 214 #endif