ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Tue May 26 21:09:40 2020 +0000
Revision:
57:a6eb3a0e92bc
Parent:
56:2797166656e0
Child:
58:35560ce5eca3
started on commments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19tb 29:2151cd327a36 1 #ifndef FROGGER_H
el19tb 29:2151cd327a36 2 #define FROGGER_H
el19tb 3:648c9d5001be 3
el19tb 2:86cef2afa648 4 #include "mbed.h"
el19tb 2:86cef2afa648 5 #include "N5110.h"
el19tb 2:86cef2afa648 6 #include "Gamepad.h"
el19tb 44:f02510eeb165 7
el19tb 29:2151cd327a36 8 #include "Frog.h"
el19tb 44:f02510eeb165 9 #include "GraphicEngine.h"
el19tb 44:f02510eeb165 10 #include "WaterSprites.h"
el19tb 44:f02510eeb165 11 #include "Vehicle.h"
el19tb 44:f02510eeb165 12 #include "Background.h"
el19tb 50:9ffeb4a10c0a 13 #include "IntroScreen.h"
el19tb 13:cd6d2f999057 14
el19tb 4:aae7f8d4ab78 15 #include <vector>
el19tb 44:f02510eeb165 16 #include <stdio.h>
el19tb 44:f02510eeb165 17 #include <cstddef>
el19tb 44:f02510eeb165 18 #include <vector>
el19tb 2:86cef2afa648 19
el19tb 56:2797166656e0 20 /** Frogger Class
el19tb 56:2797166656e0 21 *
el19tb 56:2797166656e0 22 * @brief Frogger class that runs the entire game, in charge of lcd calls
el19tb 56:2797166656e0 23 * @brief moving objects, checking for collision etc.
el19tb 56:2797166656e0 24 * @author Tarek Bessalah
el19tb 56:2797166656e0 25 * @date May, 2020
el19tb 56:2797166656e0 26 */
el19tb 29:2151cd327a36 27 class Frogger
el19tb 29:2151cd327a36 28 {
el19tb 11:cc5861abfca5 29 public:
el19tb 57:a6eb3a0e92bc 30 /** @param frog object that frogger class keeps track of
el19tb 57:a6eb3a0e92bc 31 */
el19tb 44:f02510eeb165 32 Frog *frog; // one frog object
el19tb 44:f02510eeb165 33
el19tb 57:a6eb3a0e92bc 34 /** Constructor */
el19tb 57:a6eb3a0e92bc 35 Frogger();
el19tb 50:9ffeb4a10c0a 36
el19tb 57:a6eb3a0e92bc 37 /** Constructor
el19tb 57:a6eb3a0e92bc 38 * @brief This constructor is the main engine of the frogger class
el19tb 57:a6eb3a0e92bc 39 * @param frog - actual frog object that user controls
el19tb 57:a6eb3a0e92bc 40 * @param w - the size of the lcd width
el19tb 57:a6eb3a0e92bc 41 * @param h - the size of the lcd height
el19tb 57:a6eb3a0e92bc 42 */
el19tb 44:f02510eeb165 43 Frogger(Frog *frog, int grid, int w, int h); // constructor
el19tb 37:65c9e5a65738 44
el19tb 37:65c9e5a65738 45 public:
el19tb 57:a6eb3a0e92bc 46
el19tb 57:a6eb3a0e92bc 47 /** @param current level of the game (starts from 1)
el19tb 57:a6eb3a0e92bc 48 */
el19tb 37:65c9e5a65738 49 int current_level;
el19tb 57:a6eb3a0e92bc 50
el19tb 57:a6eb3a0e92bc 51 /** @param current state of the frog, used to draw the animation of the frog
el19tb 57:a6eb3a0e92bc 52 */
el19tb 47:29c4796a49e5 53 int state_frog;
el19tb 57:a6eb3a0e92bc 54
el19tb 57:a6eb3a0e92bc 55 /** @param if the frog is in the water level, it can die now if it is
el19tb 57:a6eb3a0e92bc 56 * not on the log
el19tb 57:a6eb3a0e92bc 57 */
el19tb 48:8ccfc74b60a5 58 bool frogDie;
el19tb 57:a6eb3a0e92bc 59
el19tb 57:a6eb3a0e92bc 60 /** @param store the x position of the goal post
el19tb 57:a6eb3a0e92bc 61 */
el19tb 50:9ffeb4a10c0a 62 int goal_post_xpos;
el19tb 57:a6eb3a0e92bc 63
el19tb 57:a6eb3a0e92bc 64 /** @param user is playing the game right now
el19tb 57:a6eb3a0e92bc 65 */
el19tb 50:9ffeb4a10c0a 66 bool play_game;
el19tb 57:a6eb3a0e92bc 67
el19tb 57:a6eb3a0e92bc 68 /** @param user is currently in the main menu
el19tb 57:a6eb3a0e92bc 69 */
el19tb 50:9ffeb4a10c0a 70 bool introScreen;
el19tb 57:a6eb3a0e92bc 71
el19tb 57:a6eb3a0e92bc 72 /** @param user is currently reading the tutorial manual
el19tb 57:a6eb3a0e92bc 73 */
el19tb 50:9ffeb4a10c0a 74 bool tutorial;
el19tb 57:a6eb3a0e92bc 75
el19tb 57:a6eb3a0e92bc 76 /** @param user is currently reading the settings
el19tb 57:a6eb3a0e92bc 77 */
el19tb 50:9ffeb4a10c0a 78 bool settings;
el19tb 57:a6eb3a0e92bc 79
el19tb 57:a6eb3a0e92bc 80 /** @param if this on, then there exists an end post
el19tb 57:a6eb3a0e92bc 81 */
el19tb 50:9ffeb4a10c0a 82 bool end_post;
el19tb 57:a6eb3a0e92bc 83
el19tb 57:a6eb3a0e92bc 84 /** @param frog is successful in current level
el19tb 57:a6eb3a0e92bc 85 */
el19tb 50:9ffeb4a10c0a 86 bool nextLevel;
el19tb 57:a6eb3a0e92bc 87
el19tb 57:a6eb3a0e92bc 88 /** @param informs if the frog reached end post
el19tb 57:a6eb3a0e92bc 89 */
el19tb 50:9ffeb4a10c0a 90 bool next_goal;
el19tb 57:a6eb3a0e92bc 91
el19tb 57:a6eb3a0e92bc 92 /** @param this means that bonus round is screen is on
el19tb 57:a6eb3a0e92bc 93 */
el19tb 53:b6bb4dab7823 94 bool bonus_round;
el19tb 50:9ffeb4a10c0a 95
el19tb 57:a6eb3a0e92bc 96 /** @param y coord (in rows) value of the water level
el19tb 57:a6eb3a0e92bc 97 */
el19tb 57:a6eb3a0e92bc 98 float water_level;
el19tb 57:a6eb3a0e92bc 99
el19tb 57:a6eb3a0e92bc 100 /** @param if the frog collides with log object and is above second
el19tb 57:a6eb3a0e92bc 101 * safety lane, it is attached to the object (going same speed)
el19tb 57:a6eb3a0e92bc 102 */
el19tb 57:a6eb3a0e92bc 103 bool frogOnLog;
el19tb 57:a6eb3a0e92bc 104
el19tb 57:a6eb3a0e92bc 105 /** @param current state of the turtles, this is used to draw the animation
el19tb 57:a6eb3a0e92bc 106 * of the turtle in level 2
el19tb 57:a6eb3a0e92bc 107 */
el19tb 51:4c1f49729d88 108 int turtle_state;
el19tb 29:2151cd327a36 109
el19tb 29:2151cd327a36 110 public:
el19tb 57:a6eb3a0e92bc 111 /** @param local hardware object, used for sounds, LED, and button controls etc.
el19tb 57:a6eb3a0e92bc 112 */
el19tb 57:a6eb3a0e92bc 113 Gamepad gamepad;
el19tb 57:a6eb3a0e92bc 114
el19tb 57:a6eb3a0e92bc 115 /** @param class object that keeps track of the current pointer position, current page
el19tb 57:a6eb3a0e92bc 116 */
el19tb 57:a6eb3a0e92bc 117 IntroScreen intro;
el19tb 57:a6eb3a0e92bc 118
el19tb 57:a6eb3a0e92bc 119 /** @param size of the game grid
el19tb 57:a6eb3a0e92bc 120 */
el19tb 57:a6eb3a0e92bc 121 int grid; // size of one game unit
el19tb 15:b15bf9357cd9 122 int row_number;
el19tb 18:6be4c3c94a3d 123 int grid_width; // screen width in grid units
el19tb 37:65c9e5a65738 124 int lcd_w;
el19tb 37:65c9e5a65738 125 int lcd_h;
el19tb 44:f02510eeb165 126
el19tb 44:f02510eeb165 127 public:
el19tb 44:f02510eeb165 128
el19tb 44:f02510eeb165 129 // Level One Car objects
el19tb 44:f02510eeb165 130 Object car_row_one_one[3];
el19tb 44:f02510eeb165 131 Object car_row_two_one[2];
el19tb 44:f02510eeb165 132 Object car_row_three_one[3];
el19tb 44:f02510eeb165 133 Object car_row_four_one[4];
el19tb 44:f02510eeb165 134
el19tb 44:f02510eeb165 135 // Level One Log objects
el19tb 44:f02510eeb165 136 Object row_one_log[3]; // large sized
el19tb 44:f02510eeb165 137 Object row_two_log[2]; // medium sized
el19tb 44:f02510eeb165 138 Object row_three_log[3]; // large sized
el19tb 44:f02510eeb165 139
el19tb 44:f02510eeb165 140 // Level two Car Objects
el19tb 44:f02510eeb165 141 Object car_row_one_two[4];
el19tb 44:f02510eeb165 142 Object car_row_two_two[3];
el19tb 44:f02510eeb165 143 Object car_row_three_two[4];
el19tb 44:f02510eeb165 144 Object car_row_four_two[3];
el19tb 44:f02510eeb165 145
el19tb 44:f02510eeb165 146 // level two log objects
el19tb 44:f02510eeb165 147 Object level_row_one[2];
el19tb 44:f02510eeb165 148 Object level_row_two[2];
el19tb 44:f02510eeb165 149 Object level_row_three[3];
el19tb 53:b6bb4dab7823 150
el19tb 53:b6bb4dab7823 151 //BONUS ROUND
el19tb 53:b6bb4dab7823 152 Object bonus_row_one[4];
el19tb 53:b6bb4dab7823 153 Object bonus_row_two[3];
el19tb 53:b6bb4dab7823 154 Object bonus_row_three[4];
el19tb 53:b6bb4dab7823 155 Object bonus_row_four[3];
el19tb 53:b6bb4dab7823 156 Object bonus_row_six[2];
el19tb 53:b6bb4dab7823 157 Object bonus_row_seven[2];
el19tb 53:b6bb4dab7823 158 Object bonus_row_eight[3];
el19tb 50:9ffeb4a10c0a 159
el19tb 44:f02510eeb165 160 public:
el19tb 50:9ffeb4a10c0a 161 void run();
el19tb 53:b6bb4dab7823 162 void run_bonus();
el19tb 53:b6bb4dab7823 163 void actOnFrogBonus();
el19tb 53:b6bb4dab7823 164 void checkBonusProgress();
el19tb 52:1145e99264ea 165 void updateTurtleState();
el19tb 50:9ffeb4a10c0a 166 void actOnFrogPos();
el19tb 50:9ffeb4a10c0a 167 void home();
el19tb 50:9ffeb4a10c0a 168 void determineSelection();
el19tb 50:9ffeb4a10c0a 169 void gotoPage();
el19tb 50:9ffeb4a10c0a 170 void selectOption();
el19tb 50:9ffeb4a10c0a 171 void checkLevelProgression();
el19tb 50:9ffeb4a10c0a 172 int randEndPost();
el19tb 44:f02510eeb165 173 void checkFrogOnWater();
el19tb 48:8ccfc74b60a5 174 void drownedFrog();
el19tb 46:e39abe665271 175 void checkFrogAction(Object log);
el19tb 44:f02510eeb165 176 void setupLevelTwoRows();
el19tb 53:b6bb4dab7823 177
el19tb 53:b6bb4dab7823 178 void runBonusRound();
el19tb 53:b6bb4dab7823 179 void setupBonusRows();
el19tb 53:b6bb4dab7823 180 void setupBonusXpos();
el19tb 53:b6bb4dab7823 181 void setupBonusTwoDir();
el19tb 53:b6bb4dab7823 182 void setupBonusSprites();
el19tb 53:b6bb4dab7823 183 void moveBonusObjects();
el19tb 53:b6bb4dab7823 184
el19tb 48:8ccfc74b60a5 185 void moveFrogWithLog(Object log);
el19tb 52:1145e99264ea 186 void checkTurtleDrown();
el19tb 50:9ffeb4a10c0a 187
el19tb 50:9ffeb4a10c0a 188 void drawBackGround();
el19tb 50:9ffeb4a10c0a 189 void generateLevelOneGoalPost();
el19tb 50:9ffeb4a10c0a 190 void setUpGoalPost();
el19tb 50:9ffeb4a10c0a 191
el19tb 44:f02510eeb165 192 void levelOneCollision();
el19tb 44:f02510eeb165 193 void levelTwoCollision();
el19tb 46:e39abe665271 194 void checkCollison(Object object);
el19tb 44:f02510eeb165 195
el19tb 44:f02510eeb165 196 void setupRowDistance(Object *objects, int dis, int array_size);
el19tb 44:f02510eeb165 197 void setDistance(Object *object, int dis);
el19tb 44:f02510eeb165 198
el19tb 44:f02510eeb165 199 void setRowObjects(Object *objecs, int row, int array_size);
el19tb 44:f02510eeb165 200 void createRow(Object *object, int row);
el19tb 44:f02510eeb165 201
el19tb 44:f02510eeb165 202 void setSpriteObjects(Object *objects, char c, int array_size);
el19tb 44:f02510eeb165 203 void setSprite(Object *object, char c);
el19tb 44:f02510eeb165 204
el19tb 44:f02510eeb165 205 void setDirObjects(Object *objecs, int dir, int array_size);
el19tb 44:f02510eeb165 206 void setDir(Object *objecs, int dir);
el19tb 44:f02510eeb165 207
el19tb 44:f02510eeb165 208 //void moveLogLevelTwo();
el19tb 44:f02510eeb165 209
el19tb 44:f02510eeb165 210 void moveLogsLevelOne();
el19tb 48:8ccfc74b60a5 211 void checkFrogReachedRiver();
el19tb 57:a6eb3a0e92bc 212 void gotoNextTutorialSlide();
el19tb 57:a6eb3a0e92bc 213 void displayTutorial();
el19tb 57:a6eb3a0e92bc 214 void goalReached();
el19tb 57:a6eb3a0e92bc 215 void checkProgression();
el19tb 44:f02510eeb165 216 void moveLogsLevelTwo();
el19tb 47:29c4796a49e5 217 void drawFrogStates();
el19tb 44:f02510eeb165 218
el19tb 44:f02510eeb165 219 void speedSlow();
el19tb 44:f02510eeb165 220 void speedMedium();
el19tb 44:f02510eeb165 221 void speedFast();
el19tb 51:4c1f49729d88 222
el19tb 51:4c1f49729d88 223 // BONUS ROUND
el19tb 51:4c1f49729d88 224 void setupBonusRound();
el19tb 51:4c1f49729d88 225
el19tb 44:f02510eeb165 226 // LEVEL ONE FUNCTIONS
el19tb 44:f02510eeb165 227 void setupLevelOne();
el19tb 44:f02510eeb165 228
el19tb 44:f02510eeb165 229 // set up vehicles
el19tb 44:f02510eeb165 230 void setupLevelOneRow();
el19tb 44:f02510eeb165 231 void setupLevelOneXPos();
el19tb 44:f02510eeb165 232 void setupLevelOneSprites();
el19tb 44:f02510eeb165 233 void setupLevelOneDir();
el19tb 44:f02510eeb165 234
el19tb 44:f02510eeb165 235 // set up logs
el19tb 44:f02510eeb165 236 void setupLogsLevelOne();
el19tb 44:f02510eeb165 237
el19tb 44:f02510eeb165 238 void setLogLevelOneXPos();
el19tb 44:f02510eeb165 239 void setLogLevelOneRow();
el19tb 44:f02510eeb165 240 void setLogLevelOneDir();
el19tb 44:f02510eeb165 241 void setLogLevelOneSprites();
el19tb 44:f02510eeb165 242
el19tb 44:f02510eeb165 243 // LEVEL TWO FUNCTIONS
el19tb 44:f02510eeb165 244 void setupLevelTwo();
el19tb 44:f02510eeb165 245 int randCars();
el19tb 44:f02510eeb165 246
el19tb 44:f02510eeb165 247 // setup vehicles
el19tb 44:f02510eeb165 248 void setupLevelTwoXPos();
el19tb 44:f02510eeb165 249 void setupLevelTwoSprites();
el19tb 44:f02510eeb165 250 void setupLevelTwoDir();
el19tb 44:f02510eeb165 251
el19tb 44:f02510eeb165 252 //log objects
el19tb 44:f02510eeb165 253 void setupLogLevelTwo();
el19tb 44:f02510eeb165 254
el19tb 44:f02510eeb165 255 void setLogLevelTwoXPos();
el19tb 44:f02510eeb165 256 void setLogLevelTwoRow();
el19tb 44:f02510eeb165 257 void setLogLevelTwoSprite();
el19tb 44:f02510eeb165 258 void setLogLevelTwoDir();
el19tb 44:f02510eeb165 259 void initializeLevelTwo();
el19tb 44:f02510eeb165 260
el19tb 44:f02510eeb165 261 void displayObject(Object &temp_object);
el19tb 11:cc5861abfca5 262
el19tb 2:86cef2afa648 263 public:
el19tb 44:f02510eeb165 264
el19tb 2:86cef2afa648 265 void start();
el19tb 2:86cef2afa648 266 void input();
el19tb 2:86cef2afa648 267 void process_input();
el19tb 2:86cef2afa648 268 void clear();
el19tb 44:f02510eeb165 269 void runLevelOne();
el19tb 44:f02510eeb165 270 void runLevelTwo();
el19tb 44:f02510eeb165 271 void moveVehiclesLevelOne();
el19tb 44:f02510eeb165 272 void moveVehiclesLevelTwo();
el19tb 44:f02510eeb165 273 void moveVehicle(Object *row, char c, int array_size);
el19tb 44:f02510eeb165 274 void moveIndividualObject(Object *vehicle, char c);
el19tb 44:f02510eeb165 275 void checkOutOfBounds(Object *vehicle);
el19tb 50:9ffeb4a10c0a 276 void displayLevelIntro();
el19tb 42:04e326dcf09b 277 void runCurrentLevel();
el19tb 42:04e326dcf09b 278 void initializeParams(int w, int h, int grid);
el19tb 42:04e326dcf09b 279 void initializeEmbeddedSystem();
el19tb 42:04e326dcf09b 280 void checkCurrentLevelCollision();
el19tb 42:04e326dcf09b 281 void checkIfFrogIsInWater();
el19tb 42:04e326dcf09b 282 void moveFrog(int xWay, int yWay);
el19tb 2:86cef2afa648 283 void game();
el19tb 2:86cef2afa648 284 void refresh();
el19tb 42:04e326dcf09b 285 void createWaterLane();
el19tb 42:04e326dcf09b 286 void createMultipleLanesWater();
el19tb 42:04e326dcf09b 287 void drawRoadObjects();
el19tb 42:04e326dcf09b 288 void createRoadLane();
el19tb 42:04e326dcf09b 289 void createMultipleRoadLane();
el19tb 42:04e326dcf09b 290 void drawSafety();
el19tb 42:04e326dcf09b 291 void createSafetyObject();
el19tb 42:04e326dcf09b 292 void createMultipleSafetyLane();
el19tb 42:04e326dcf09b 293
el19tb 42:04e326dcf09b 294 void drawEndPost();
el19tb 42:04e326dcf09b 295 void drawWater();
el19tb 42:04e326dcf09b 296 void loopWater();
el19tb 42:04e326dcf09b 297 void moveWater();
el19tb 3:648c9d5001be 298
el19tb 56:2797166656e0 299 void checkFrogInDeathZone();
el19tb 3:648c9d5001be 300 void move();
el19tb 44:f02510eeb165 301 void checkFrogOutOfBounds();
el19tb 56:2797166656e0 302 void displayIntro();
el19tb 3:648c9d5001be 303 void setup();
el19tb 42:04e326dcf09b 304 void createGoalPost();
el19tb 2:86cef2afa648 305 };
el19tb 2:86cef2afa648 306
el19tb 44:f02510eeb165 307 #endif
el19tb 2:86cef2afa648 308
el19tb 44:f02510eeb165 309
el19tb 44:f02510eeb165 310
el19tb 50:9ffeb4a10c0a 311