Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Committer:
evanso
Date:
Mon May 18 00:18:58 2020 +0000
Revision:
42:3aed75338272
Parent:
41:5959256f4aab
Child:
43:d43759dbddb9
Play game part of the menu works. Gamepad launches into the menu and plays the game when selected.

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