ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Mon May 25 22:26:49 2020 +0000
Revision:
53:b6bb4dab7823
Parent:
52:1145e99264ea
Child:
55:b17b9931c010
added a bonus round to the frogger game, fixed bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19tb 37:65c9e5a65738 1 #include "Frogger.h"
el19tb 35:db257b7bdefc 2
el19tb 37:65c9e5a65738 3 // level one initiailization has already been done
el19tb 44:f02510eeb165 4 Frogger::Frogger(Frog *frog, int grid, int w, int h)
el19tb 35:db257b7bdefc 5 {
el19tb 35:db257b7bdefc 6 this->frog = frog; // one frog object per run
el19tb 35:db257b7bdefc 7
el19tb 42:04e326dcf09b 8 current_level = 1;
el19tb 37:65c9e5a65738 9 initializeParams(w, h, grid); // initialize the software parameters
el19tb 35:db257b7bdefc 10 initializeEmbeddedSystem(); // initialize the hardware paramaters
el19tb 44:f02510eeb165 11 setupLevelOne();
el19tb 50:9ffeb4a10c0a 12
el19tb 50:9ffeb4a10c0a 13 intro.selection = 0;
el19tb 50:9ffeb4a10c0a 14 intro.tutorial_screens = 0;
el19tb 50:9ffeb4a10c0a 15
el19tb 50:9ffeb4a10c0a 16 introScreen = true;
el19tb 50:9ffeb4a10c0a 17 nextLevel = false;
el19tb 50:9ffeb4a10c0a 18 play_game = false;
el19tb 50:9ffeb4a10c0a 19 tutorial = false;
el19tb 50:9ffeb4a10c0a 20 settings = false;
el19tb 35:db257b7bdefc 21 }
el19tb 35:db257b7bdefc 22
el19tb 44:f02510eeb165 23 GraphicEngine graphics;
el19tb 44:f02510eeb165 24
el19tb 37:65c9e5a65738 25 void Frogger::initializeParams(int w, int h, int grid)
el19tb 35:db257b7bdefc 26 {
el19tb 35:db257b7bdefc 27 // screen sizes
el19tb 37:65c9e5a65738 28 lcd_w = w; // width
el19tb 37:65c9e5a65738 29 lcd_h = h; // height
el19tb 50:9ffeb4a10c0a 30 state_frog = 0;
el19tb 50:9ffeb4a10c0a 31 end_post = false;
el19tb 51:4c1f49729d88 32 turtle_state = 0;
el19tb 35:db257b7bdefc 33
el19tb 48:8ccfc74b60a5 34 water_level = 48- 4*6; // row 7 and up is the water level
el19tb 48:8ccfc74b60a5 35 frogDie = false;
el19tb 48:8ccfc74b60a5 36 frogOnLog = false;
el19tb 53:b6bb4dab7823 37 goal_post_xpos = (36); // generate random position for end post
el19tb 50:9ffeb4a10c0a 38 next_goal = false;
el19tb 35:db257b7bdefc 39 // grid values
el19tb 35:db257b7bdefc 40 grid = 4; // size of game grid system
el19tb 35:db257b7bdefc 41 grid_width = 22; // size of screen width in grid units
el19tb 35:db257b7bdefc 42 }
el19tb 35:db257b7bdefc 43
el19tb 37:65c9e5a65738 44 void Frogger::initializeLevelTwo()
el19tb 37:65c9e5a65738 45 {
el19tb 44:f02510eeb165 46 setupLevelTwo();
el19tb 37:65c9e5a65738 47 }
el19tb 37:65c9e5a65738 48
el19tb 35:db257b7bdefc 49 void Frogger::initializeEmbeddedSystem()
el19tb 35:db257b7bdefc 50 {
el19tb 35:db257b7bdefc 51 //game setup
el19tb 44:f02510eeb165 52 graphics.init(); // initialize the LCD object
el19tb 44:f02510eeb165 53 graphics.contrast(); // set the contrast to 0.4
el19tb 44:f02510eeb165 54 graphics.backLightOn(); // turn on the backlight
el19tb 42:04e326dcf09b 55
el19tb 42:04e326dcf09b 56 gamepad.init(); // initialize the actual embedded system
el19tb 42:04e326dcf09b 57 }
el19tb 42:04e326dcf09b 58
el19tb 44:f02510eeb165 59 void Frogger::setupLevelOne()
el19tb 44:f02510eeb165 60 {
el19tb 44:f02510eeb165 61 // vehicle objects
el19tb 44:f02510eeb165 62 setupLevelOneRow();
el19tb 44:f02510eeb165 63 setupLevelOneXPos();
el19tb 44:f02510eeb165 64 setupLevelOneSprites();
el19tb 44:f02510eeb165 65 setupLevelOneDir();
el19tb 44:f02510eeb165 66
el19tb 44:f02510eeb165 67 // log objects
el19tb 44:f02510eeb165 68 setupLogsLevelOne();
el19tb 44:f02510eeb165 69 }
el19tb 44:f02510eeb165 70
el19tb 44:f02510eeb165 71 // called by frogger engine
el19tb 44:f02510eeb165 72 void Frogger::setupLevelTwo()
el19tb 44:f02510eeb165 73 {
el19tb 44:f02510eeb165 74 // setup vehicles
el19tb 44:f02510eeb165 75 setupLevelTwoRows();
el19tb 44:f02510eeb165 76 setupLevelTwoXPos();
el19tb 44:f02510eeb165 77 setupLevelTwoSprites();
el19tb 44:f02510eeb165 78 setupLevelTwoDir();
el19tb 44:f02510eeb165 79
el19tb 44:f02510eeb165 80 //log objects
el19tb 44:f02510eeb165 81 setupLogLevelTwo();
el19tb 44:f02510eeb165 82 }
el19tb 44:f02510eeb165 83
el19tb 53:b6bb4dab7823 84 void Frogger::setupBonusRound()
el19tb 53:b6bb4dab7823 85 {
el19tb 53:b6bb4dab7823 86 setupBonusRows();
el19tb 53:b6bb4dab7823 87 setupBonusXpos();
el19tb 53:b6bb4dab7823 88 setupBonusTwoDir();
el19tb 53:b6bb4dab7823 89 setupBonusSprites();
el19tb 53:b6bb4dab7823 90 }
el19tb 53:b6bb4dab7823 91
el19tb 44:f02510eeb165 92 /* SETUP CALLS */
el19tb 44:f02510eeb165 93 void Frogger::setupLogsLevelOne()
el19tb 44:f02510eeb165 94 {
el19tb 44:f02510eeb165 95 setLogLevelOneXPos();
el19tb 44:f02510eeb165 96 setLogLevelOneRow();
el19tb 44:f02510eeb165 97 setLogLevelOneDir();
el19tb 44:f02510eeb165 98 setLogLevelOneSprites();
el19tb 44:f02510eeb165 99 }
el19tb 44:f02510eeb165 100
el19tb 44:f02510eeb165 101 void Frogger::setupLogLevelTwo()
el19tb 44:f02510eeb165 102 {
el19tb 44:f02510eeb165 103 setLogLevelTwoXPos();
el19tb 44:f02510eeb165 104 setLogLevelTwoRow();
el19tb 44:f02510eeb165 105 setLogLevelTwoSprite();
el19tb 44:f02510eeb165 106 setLogLevelTwoDir();
el19tb 44:f02510eeb165 107 }
el19tb 44:f02510eeb165 108 /* SETUP CALLS */
el19tb 44:f02510eeb165 109
el19tb 42:04e326dcf09b 110 //main function that starts the game
el19tb 42:04e326dcf09b 111 void Frogger::start()
el19tb 42:04e326dcf09b 112 {
el19tb 42:04e326dcf09b 113 //keep reading and processing user input
el19tb 42:04e326dcf09b 114 while(1) {
el19tb 44:f02510eeb165 115 graphics.clear(); // clear the lcd screen
el19tb 49:6cad8b6ec5f2 116
el19tb 50:9ffeb4a10c0a 117 if(introScreen) { // shows tutorial, setting
el19tb 50:9ffeb4a10c0a 118 graphics.getPointerPos(intro.selection); // draw the initial pointer pos
el19tb 50:9ffeb4a10c0a 119 home(); // draw menu selections
el19tb 50:9ffeb4a10c0a 120 } else if (play_game) { // shows actual gameplay
el19tb 50:9ffeb4a10c0a 121 run();
el19tb 48:8ccfc74b60a5 122
el19tb 50:9ffeb4a10c0a 123 } else if(tutorial) {
el19tb 50:9ffeb4a10c0a 124 gotoPage();
el19tb 50:9ffeb4a10c0a 125
el19tb 53:b6bb4dab7823 126 } else if(bonus_round) {
el19tb 53:b6bb4dab7823 127 run_bonus();
el19tb 50:9ffeb4a10c0a 128 }
el19tb 50:9ffeb4a10c0a 129
el19tb 44:f02510eeb165 130 graphics.refresh(); // refresh the lcd screen
el19tb 42:04e326dcf09b 131
el19tb 46:e39abe665271 132 wait_ms(85); // fpms
el19tb 42:04e326dcf09b 133 }
el19tb 35:db257b7bdefc 134 }
el19tb 35:db257b7bdefc 135
el19tb 50:9ffeb4a10c0a 136 void Frogger::displayLevelIntro()
el19tb 50:9ffeb4a10c0a 137 {
el19tb 50:9ffeb4a10c0a 138 graphics.clear();
el19tb 50:9ffeb4a10c0a 139 graphics.newLevel1();
el19tb 51:4c1f49729d88 140 wait_ms(1000);
el19tb 50:9ffeb4a10c0a 141 graphics.refresh(); // refresh the lcd screen
el19tb 50:9ffeb4a10c0a 142
el19tb 50:9ffeb4a10c0a 143 graphics.refresh(); // refresh the lcd screen
el19tb 50:9ffeb4a10c0a 144 graphics.clear();
el19tb 51:4c1f49729d88 145 graphics.newLevel2();
el19tb 51:4c1f49729d88 146 wait_ms(1000);
el19tb 51:4c1f49729d88 147 graphics.refresh(); // refresh the lcd screen
el19tb 51:4c1f49729d88 148
el19tb 51:4c1f49729d88 149 graphics.refresh(); // refresh the lcd screen
el19tb 51:4c1f49729d88 150 graphics.clear();
el19tb 50:9ffeb4a10c0a 151 wait_ms(1000);
el19tb 50:9ffeb4a10c0a 152 graphics.refresh(); // refresh the lcd screen
el19tb 50:9ffeb4a10c0a 153 }
el19tb 50:9ffeb4a10c0a 154
el19tb 50:9ffeb4a10c0a 155 void Frogger::run()
el19tb 50:9ffeb4a10c0a 156 {
el19tb 50:9ffeb4a10c0a 157 checkProgression();
el19tb 50:9ffeb4a10c0a 158
el19tb 50:9ffeb4a10c0a 159 drawBackGround();
el19tb 50:9ffeb4a10c0a 160
el19tb 50:9ffeb4a10c0a 161 generateLevelOneGoalPost();
el19tb 50:9ffeb4a10c0a 162
el19tb 50:9ffeb4a10c0a 163 process_input(); // user controls the frog object
el19tb 50:9ffeb4a10c0a 164
el19tb 50:9ffeb4a10c0a 165 actOnFrogPos();
el19tb 50:9ffeb4a10c0a 166
el19tb 50:9ffeb4a10c0a 167 graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog
el19tb 50:9ffeb4a10c0a 168 }
el19tb 50:9ffeb4a10c0a 169
el19tb 53:b6bb4dab7823 170 void Frogger::run_bonus()
el19tb 53:b6bb4dab7823 171 {
el19tb 53:b6bb4dab7823 172 current_level = 0;
el19tb 53:b6bb4dab7823 173
el19tb 53:b6bb4dab7823 174 checkBonusProgress();
el19tb 53:b6bb4dab7823 175
el19tb 53:b6bb4dab7823 176 drawBackGround();
el19tb 53:b6bb4dab7823 177
el19tb 53:b6bb4dab7823 178 generateLevelOneGoalPost();
el19tb 53:b6bb4dab7823 179
el19tb 53:b6bb4dab7823 180 process_input(); // user controls the frog object
el19tb 53:b6bb4dab7823 181
el19tb 53:b6bb4dab7823 182 actOnFrogBonus();
el19tb 53:b6bb4dab7823 183
el19tb 53:b6bb4dab7823 184 graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog
el19tb 53:b6bb4dab7823 185
el19tb 53:b6bb4dab7823 186 graphics.drawVoidBackGround();
el19tb 53:b6bb4dab7823 187 }
el19tb 53:b6bb4dab7823 188
el19tb 50:9ffeb4a10c0a 189 void Frogger::checkProgression()
el19tb 50:9ffeb4a10c0a 190 {
el19tb 51:4c1f49729d88 191 if((frog->y == 48 - 4*11 || frog->y == 48 - 4*10)){
el19tb 51:4c1f49729d88 192 displayLevelIntro();
el19tb 51:4c1f49729d88 193 frog->reset();
el19tb 51:4c1f49729d88 194 setupLevelTwo();
el19tb 51:4c1f49729d88 195 current_level++;
el19tb 50:9ffeb4a10c0a 196 }
el19tb 50:9ffeb4a10c0a 197 }
el19tb 50:9ffeb4a10c0a 198
el19tb 53:b6bb4dab7823 199 void Frogger::checkBonusProgress()
el19tb 53:b6bb4dab7823 200 {
el19tb 53:b6bb4dab7823 201 if((frog->y == 48 - 4*11 || frog->y == 48 - 4*10)){
el19tb 53:b6bb4dab7823 202 frog->reset();
el19tb 53:b6bb4dab7823 203 setupLevelOne();
el19tb 53:b6bb4dab7823 204 current_level++;
el19tb 53:b6bb4dab7823 205 bonus_round = false;
el19tb 53:b6bb4dab7823 206 introScreen = true;
el19tb 53:b6bb4dab7823 207 }
el19tb 53:b6bb4dab7823 208 }
el19tb 53:b6bb4dab7823 209
el19tb 50:9ffeb4a10c0a 210 void Frogger::actOnFrogPos()
el19tb 50:9ffeb4a10c0a 211 {
el19tb 50:9ffeb4a10c0a 212 if(frog->y >= water_level)
el19tb 50:9ffeb4a10c0a 213 {
el19tb 50:9ffeb4a10c0a 214 frogDie = false;
el19tb 50:9ffeb4a10c0a 215 runCurrentLevel(); // add velocity to level vehicles and logs
el19tb 50:9ffeb4a10c0a 216
el19tb 50:9ffeb4a10c0a 217 } else {
el19tb 50:9ffeb4a10c0a 218 frogDie = true;
el19tb 50:9ffeb4a10c0a 219 runCurrentLevel(); // add velocity to level vehicles and logs
el19tb 50:9ffeb4a10c0a 220
el19tb 51:4c1f49729d88 221 if((!frogOnLog) && (frog->y != 48 - 4*11 && frog->y != 48 - 4*10) && frog->x != 42){
el19tb 50:9ffeb4a10c0a 222 frog->reset();
el19tb 50:9ffeb4a10c0a 223 }
el19tb 50:9ffeb4a10c0a 224 }
el19tb 50:9ffeb4a10c0a 225 }
el19tb 50:9ffeb4a10c0a 226
el19tb 53:b6bb4dab7823 227 void Frogger::actOnFrogBonus()
el19tb 53:b6bb4dab7823 228 {
el19tb 53:b6bb4dab7823 229 if(frog->y != 48 - 4*11 && (frog->y != 48 - 4*10)) {
el19tb 53:b6bb4dab7823 230 runCurrentLevel();
el19tb 53:b6bb4dab7823 231 graphics.drawVoidBackGround();
el19tb 53:b6bb4dab7823 232
el19tb 53:b6bb4dab7823 233 }
el19tb 53:b6bb4dab7823 234 }
el19tb 53:b6bb4dab7823 235
el19tb 50:9ffeb4a10c0a 236 void Frogger::home()
el19tb 50:9ffeb4a10c0a 237 {
el19tb 50:9ffeb4a10c0a 238 determineSelection();
el19tb 50:9ffeb4a10c0a 239 graphics.drawMenu();
el19tb 50:9ffeb4a10c0a 240 }
el19tb 50:9ffeb4a10c0a 241
el19tb 50:9ffeb4a10c0a 242 void Frogger::determineSelection()
el19tb 50:9ffeb4a10c0a 243 {
el19tb 50:9ffeb4a10c0a 244 if(intro.selection < 2 && gamepad.B_pressed()){
el19tb 50:9ffeb4a10c0a 245 graphics.getPointerPos(intro.selection++);
el19tb 50:9ffeb4a10c0a 246
el19tb 50:9ffeb4a10c0a 247 } else if(intro.selection > 0 && gamepad.X_pressed()){
el19tb 50:9ffeb4a10c0a 248 graphics.getPointerPos(intro.selection--);
el19tb 50:9ffeb4a10c0a 249 }
el19tb 50:9ffeb4a10c0a 250
el19tb 50:9ffeb4a10c0a 251 wait_ms(10);
el19tb 50:9ffeb4a10c0a 252
el19tb 50:9ffeb4a10c0a 253 if(gamepad.A_pressed())
el19tb 50:9ffeb4a10c0a 254 {
el19tb 50:9ffeb4a10c0a 255 gotoPage();
el19tb 50:9ffeb4a10c0a 256 }
el19tb 50:9ffeb4a10c0a 257 }
el19tb 50:9ffeb4a10c0a 258
el19tb 50:9ffeb4a10c0a 259 void Frogger::gotoPage()
el19tb 50:9ffeb4a10c0a 260 {
el19tb 50:9ffeb4a10c0a 261 switch(intro.selection)
el19tb 50:9ffeb4a10c0a 262 {
el19tb 50:9ffeb4a10c0a 263 case 0:
el19tb 50:9ffeb4a10c0a 264 play_game = true;
el19tb 50:9ffeb4a10c0a 265 introScreen = false;
el19tb 50:9ffeb4a10c0a 266 tutorial = false;
el19tb 50:9ffeb4a10c0a 267 settings = false;
el19tb 50:9ffeb4a10c0a 268 break;
el19tb 50:9ffeb4a10c0a 269 case 1:
el19tb 50:9ffeb4a10c0a 270 displayTutorial();
el19tb 50:9ffeb4a10c0a 271 play_game = false;
el19tb 50:9ffeb4a10c0a 272 introScreen = false;
el19tb 50:9ffeb4a10c0a 273 tutorial = true;
el19tb 50:9ffeb4a10c0a 274 settings = false;
el19tb 50:9ffeb4a10c0a 275 break;
el19tb 53:b6bb4dab7823 276 case 2: // bonus round
el19tb 53:b6bb4dab7823 277 setupBonusRound();
el19tb 53:b6bb4dab7823 278 bonus_round = true;
el19tb 53:b6bb4dab7823 279 play_game = false;
el19tb 53:b6bb4dab7823 280 introScreen = false;
el19tb 53:b6bb4dab7823 281 tutorial = false;
el19tb 53:b6bb4dab7823 282 settings = false;
el19tb 50:9ffeb4a10c0a 283 break;
el19tb 50:9ffeb4a10c0a 284 }
el19tb 50:9ffeb4a10c0a 285 }
el19tb 50:9ffeb4a10c0a 286
el19tb 50:9ffeb4a10c0a 287 void Frogger::displayTutorial()
el19tb 50:9ffeb4a10c0a 288 {
el19tb 50:9ffeb4a10c0a 289 wait_ms(15);
el19tb 50:9ffeb4a10c0a 290
el19tb 50:9ffeb4a10c0a 291 switch(intro.tutorial_screens)
el19tb 50:9ffeb4a10c0a 292 {
el19tb 50:9ffeb4a10c0a 293 case 0:
el19tb 50:9ffeb4a10c0a 294 graphics.drawTutor1();
el19tb 50:9ffeb4a10c0a 295 gotoNextTutorialSlide();
el19tb 50:9ffeb4a10c0a 296 break;
el19tb 50:9ffeb4a10c0a 297 case 1:
el19tb 50:9ffeb4a10c0a 298 graphics.drawTutor2();
el19tb 50:9ffeb4a10c0a 299 gotoNextTutorialSlide();
el19tb 50:9ffeb4a10c0a 300 break;
el19tb 50:9ffeb4a10c0a 301 case 2:
el19tb 50:9ffeb4a10c0a 302 graphics.drawTutor3();
el19tb 50:9ffeb4a10c0a 303 gotoNextTutorialSlide();
el19tb 50:9ffeb4a10c0a 304 break;
el19tb 50:9ffeb4a10c0a 305 default:
el19tb 50:9ffeb4a10c0a 306 home();
el19tb 50:9ffeb4a10c0a 307 intro.selection = 0;
el19tb 50:9ffeb4a10c0a 308 }
el19tb 50:9ffeb4a10c0a 309 }
el19tb 50:9ffeb4a10c0a 310
el19tb 50:9ffeb4a10c0a 311 void Frogger::gotoNextTutorialSlide()
el19tb 50:9ffeb4a10c0a 312 {
el19tb 50:9ffeb4a10c0a 313 if(gamepad.A_pressed()){
el19tb 50:9ffeb4a10c0a 314 intro.tutorial_screens++;
el19tb 50:9ffeb4a10c0a 315 wait_ms(25);
el19tb 50:9ffeb4a10c0a 316 }
el19tb 50:9ffeb4a10c0a 317
el19tb 50:9ffeb4a10c0a 318 if(intro.tutorial_screens > 2){
el19tb 50:9ffeb4a10c0a 319 intro.tutorial_screens = 7;
el19tb 50:9ffeb4a10c0a 320 tutorial = false;
el19tb 50:9ffeb4a10c0a 321 }
el19tb 50:9ffeb4a10c0a 322 }
el19tb 50:9ffeb4a10c0a 323
el19tb 50:9ffeb4a10c0a 324 void Frogger::drawBackGround()
el19tb 50:9ffeb4a10c0a 325 {
el19tb 50:9ffeb4a10c0a 326 graphics.drawDangerZone();
el19tb 50:9ffeb4a10c0a 327 graphics.drawSafetyLanes();
el19tb 50:9ffeb4a10c0a 328 }
el19tb 50:9ffeb4a10c0a 329
el19tb 50:9ffeb4a10c0a 330 void Frogger::generateLevelOneGoalPost()
el19tb 50:9ffeb4a10c0a 331 {
el19tb 50:9ffeb4a10c0a 332 //setUpGoalPost();
el19tb 50:9ffeb4a10c0a 333 graphics.drawEndPost(goal_post_xpos);
el19tb 50:9ffeb4a10c0a 334 }
el19tb 50:9ffeb4a10c0a 335
el19tb 50:9ffeb4a10c0a 336 int Frogger::randEndPost()
el19tb 50:9ffeb4a10c0a 337 {
el19tb 50:9ffeb4a10c0a 338 return (rand() % 80) + 12;
el19tb 50:9ffeb4a10c0a 339 }
el19tb 50:9ffeb4a10c0a 340
el19tb 47:29c4796a49e5 341 void Frogger::process_input()
el19tb 47:29c4796a49e5 342 {
el19tb 35:db257b7bdefc 343 //determine the input
el19tb 35:db257b7bdefc 344 if(gamepad.A_pressed()){
el19tb 47:29c4796a49e5 345 state_frog = 1;
el19tb 42:04e326dcf09b 346 moveFrog(1,0);
el19tb 44:f02510eeb165 347 frogOnLog = false;
el19tb 35:db257b7bdefc 348 } else if(gamepad.X_pressed()){
el19tb 47:29c4796a49e5 349 state_frog = 0;
el19tb 42:04e326dcf09b 350 moveFrog(0,-1);
el19tb 44:f02510eeb165 351 frogOnLog = false;
el19tb 48:8ccfc74b60a5 352
el19tb 35:db257b7bdefc 353 } else if(gamepad.B_pressed()){
el19tb 47:29c4796a49e5 354 state_frog = 3;
el19tb 42:04e326dcf09b 355 moveFrog(0,1);
el19tb 44:f02510eeb165 356 frogOnLog = false;
el19tb 48:8ccfc74b60a5 357
el19tb 35:db257b7bdefc 358 } else if(gamepad.Y_pressed()){
el19tb 47:29c4796a49e5 359 state_frog = 2;
el19tb 42:04e326dcf09b 360 moveFrog(-1,0);
el19tb 44:f02510eeb165 361 frogOnLog = false;
el19tb 35:db257b7bdefc 362 }
el19tb 50:9ffeb4a10c0a 363
el19tb 50:9ffeb4a10c0a 364 wait_ms(10);
el19tb 35:db257b7bdefc 365 }
el19tb 35:db257b7bdefc 366
el19tb 47:29c4796a49e5 367 void Frogger::drawFrogStates()
el19tb 47:29c4796a49e5 368 {
el19tb 47:29c4796a49e5 369 state_frog++;
el19tb 47:29c4796a49e5 370 graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog
el19tb 47:29c4796a49e5 371 state_frog--;
el19tb 47:29c4796a49e5 372 }
el19tb 47:29c4796a49e5 373
el19tb 42:04e326dcf09b 374 //moves the frog around the grid
el19tb 42:04e326dcf09b 375 void Frogger::moveFrog(int xWay, int yWay)
el19tb 35:db257b7bdefc 376 {
el19tb 42:04e326dcf09b 377 //increment the left side of the chicken by a value of the grid size
el19tb 42:04e326dcf09b 378 frog->x += xWay * 4;
el19tb 42:04e326dcf09b 379
el19tb 42:04e326dcf09b 380 //increment the top side by a value of grid sizw
el19tb 42:04e326dcf09b 381 frog->y += yWay * 4;
el19tb 35:db257b7bdefc 382
el19tb 46:e39abe665271 383 // update rect parameters
el19tb 42:04e326dcf09b 384 frog->left_side = frog->x;
el19tb 46:e39abe665271 385 frog->right_side = 6 + frog->x;
el19tb 42:04e326dcf09b 386 frog->up = frog->y;
el19tb 46:e39abe665271 387 frog->down = 4 + frog->y;
el19tb 42:04e326dcf09b 388 }
el19tb 42:04e326dcf09b 389
el19tb 44:f02510eeb165 390 /* ENGINE CALLS */
el19tb 44:f02510eeb165 391 void Frogger::runCurrentLevel()
el19tb 44:f02510eeb165 392 {
el19tb 44:f02510eeb165 393 switch (current_level)
el19tb 44:f02510eeb165 394 {
el19tb 53:b6bb4dab7823 395 case 0:
el19tb 53:b6bb4dab7823 396 runBonusRound();
el19tb 53:b6bb4dab7823 397 break;
el19tb 44:f02510eeb165 398 case 1:
el19tb 44:f02510eeb165 399 runLevelOne();
el19tb 44:f02510eeb165 400 break;
el19tb 44:f02510eeb165 401 case 2:
el19tb 44:f02510eeb165 402 runLevelTwo();
el19tb 44:f02510eeb165 403 break;
el19tb 44:f02510eeb165 404 }
el19tb 44:f02510eeb165 405 }
el19tb 44:f02510eeb165 406
el19tb 44:f02510eeb165 407 void Frogger::runLevelOne()
el19tb 44:f02510eeb165 408 {
el19tb 44:f02510eeb165 409 moveVehiclesLevelOne(); // increment the x pos and display
el19tb 44:f02510eeb165 410 moveLogsLevelOne();
el19tb 44:f02510eeb165 411 }
el19tb 44:f02510eeb165 412
el19tb 44:f02510eeb165 413 void Frogger::runLevelTwo()
el19tb 44:f02510eeb165 414 {
el19tb 44:f02510eeb165 415 moveVehiclesLevelTwo();
el19tb 44:f02510eeb165 416 moveLogsLevelTwo();
el19tb 44:f02510eeb165 417 }
el19tb 53:b6bb4dab7823 418
el19tb 53:b6bb4dab7823 419 void Frogger::runBonusRound()
el19tb 53:b6bb4dab7823 420 {
el19tb 53:b6bb4dab7823 421 moveBonusObjects();
el19tb 53:b6bb4dab7823 422 }
el19tb 44:f02510eeb165 423 /* ENGINE CALLS */
el19tb 44:f02510eeb165 424
el19tb 44:f02510eeb165 425 /* ENGINE RUN */
el19tb 44:f02510eeb165 426 void Frogger::moveVehiclesLevelOne()
el19tb 44:f02510eeb165 427 {
el19tb 44:f02510eeb165 428 moveVehicle(car_row_one_one, 'S', 3);
el19tb 46:e39abe665271 429 moveVehicle(car_row_two_one, 'M', 2);
el19tb 44:f02510eeb165 430 moveVehicle(car_row_three_one, 'S', 3);
el19tb 44:f02510eeb165 431 moveVehicle(car_row_four_one, 'M', 4);
el19tb 44:f02510eeb165 432 }
el19tb 44:f02510eeb165 433
el19tb 44:f02510eeb165 434 void Frogger::moveVehiclesLevelTwo()
el19tb 44:f02510eeb165 435 {
el19tb 44:f02510eeb165 436 moveVehicle(car_row_one_two, 'M', 4);
el19tb 44:f02510eeb165 437 moveVehicle(car_row_two_two, 'M', 3);
el19tb 44:f02510eeb165 438 moveVehicle(car_row_three_two, 'F', 4);
el19tb 44:f02510eeb165 439 moveVehicle(car_row_four_two, 'F', 3);
el19tb 44:f02510eeb165 440 }
el19tb 44:f02510eeb165 441
el19tb 44:f02510eeb165 442 void Frogger::moveLogsLevelOne()
el19tb 44:f02510eeb165 443 {
el19tb 44:f02510eeb165 444 moveVehicle(row_one_log, 'S', 3);
el19tb 44:f02510eeb165 445 moveVehicle(row_two_log, 'M', 2);
el19tb 44:f02510eeb165 446 moveVehicle(row_three_log, 'S', 3);
el19tb 44:f02510eeb165 447 }
el19tb 44:f02510eeb165 448
el19tb 44:f02510eeb165 449 void Frogger::moveLogsLevelTwo()
el19tb 44:f02510eeb165 450 {
el19tb 44:f02510eeb165 451 moveVehicle(level_row_one, 'F', 2);
el19tb 44:f02510eeb165 452 moveVehicle(level_row_two, 'M', 2);
el19tb 44:f02510eeb165 453 moveVehicle(level_row_two, 'F', 3);
el19tb 44:f02510eeb165 454 }
el19tb 53:b6bb4dab7823 455
el19tb 53:b6bb4dab7823 456 void Frogger::moveBonusObjects()
el19tb 53:b6bb4dab7823 457 {
el19tb 53:b6bb4dab7823 458 moveVehicle(bonus_row_one, 'F', 4);
el19tb 53:b6bb4dab7823 459 moveVehicle(bonus_row_two, 'U', 3);
el19tb 53:b6bb4dab7823 460 moveVehicle(bonus_row_four, 'U', 3);
el19tb 53:b6bb4dab7823 461 moveVehicle(bonus_row_seven, 'U', 2);
el19tb 53:b6bb4dab7823 462 moveVehicle(bonus_row_eight, 'F', 3);
el19tb 53:b6bb4dab7823 463 }
el19tb 44:f02510eeb165 464 /* ENGINE RUN */
el19tb 44:f02510eeb165 465
el19tb 44:f02510eeb165 466 void Frogger::checkFrogOnWater()
el19tb 44:f02510eeb165 467 {
el19tb 48:8ccfc74b60a5 468 if(frog->y < water_level) // if the frog is past the safety lane
el19tb 44:f02510eeb165 469 {
el19tb 50:9ffeb4a10c0a 470 frogDie = true; // frog will die if not on turtle/log
el19tb 48:8ccfc74b60a5 471 } else {
el19tb 48:8ccfc74b60a5 472 frogDie = false;
el19tb 44:f02510eeb165 473 }
el19tb 44:f02510eeb165 474 }
el19tb 44:f02510eeb165 475
el19tb 44:f02510eeb165 476 void Frogger::moveVehicle(Object *row, char c, int array_size)
el19tb 44:f02510eeb165 477 {
el19tb 44:f02510eeb165 478 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 479 {
el19tb 46:e39abe665271 480 moveIndividualObject(&row[i], c);
el19tb 48:8ccfc74b60a5 481 checkCollison(row[i]); // check if the frog has crashed/on log
el19tb 52:1145e99264ea 482 checkTurtleDrown();
el19tb 52:1145e99264ea 483 }
el19tb 52:1145e99264ea 484 }
el19tb 52:1145e99264ea 485
el19tb 52:1145e99264ea 486 void Frogger::checkTurtleDrown()
el19tb 52:1145e99264ea 487 {
el19tb 52:1145e99264ea 488 // if the frog is on the row of the turtles and
el19tb 52:1145e99264ea 489 // turtles are under water, then frog is dead
el19tb 52:1145e99264ea 490 if(frog->y == (48-(4*8))
el19tb 52:1145e99264ea 491 && (turtle_state >= 3001)
el19tb 52:1145e99264ea 492 && current_level == 2){
el19tb 52:1145e99264ea 493 frog->reset(); // frog is dead
el19tb 44:f02510eeb165 494 }
el19tb 44:f02510eeb165 495 }
el19tb 44:f02510eeb165 496
el19tb 46:e39abe665271 497 void Frogger::moveIndividualObject(Object *vehicle, char c){
el19tb 44:f02510eeb165 498 switch(c)
el19tb 44:f02510eeb165 499 {
el19tb 44:f02510eeb165 500 case 'S':
el19tb 44:f02510eeb165 501 vehicle->speedSlow(vehicle->object.dir);
el19tb 44:f02510eeb165 502 break;
el19tb 44:f02510eeb165 503 case 'M':
el19tb 44:f02510eeb165 504 vehicle->speedMedium(vehicle->object.dir);
el19tb 44:f02510eeb165 505 break;
el19tb 44:f02510eeb165 506 case 'F':
el19tb 44:f02510eeb165 507 vehicle->speedFast(vehicle->object.dir);
el19tb 44:f02510eeb165 508 break;
el19tb 53:b6bb4dab7823 509 case 'U':
el19tb 53:b6bb4dab7823 510 vehicle->speedUltra(vehicle->object.dir);
el19tb 53:b6bb4dab7823 511 break;
el19tb 44:f02510eeb165 512 }
el19tb 44:f02510eeb165 513 checkOutOfBounds(vehicle);
el19tb 48:8ccfc74b60a5 514 checkFrogOutOfBounds();
el19tb 52:1145e99264ea 515 graphics.showObj(vehicle, turtle_state); // display to screen
el19tb 52:1145e99264ea 516 updateTurtleState();
el19tb 52:1145e99264ea 517 }
el19tb 52:1145e99264ea 518
el19tb 52:1145e99264ea 519 void Frogger::updateTurtleState()
el19tb 52:1145e99264ea 520 {
el19tb 52:1145e99264ea 521 switch(turtle_state)
el19tb 52:1145e99264ea 522 {
el19tb 52:1145e99264ea 523 case 0 ... 1000:
el19tb 52:1145e99264ea 524 turtle_state++;
el19tb 52:1145e99264ea 525 break;
el19tb 52:1145e99264ea 526 case 1001 ... 2000:
el19tb 52:1145e99264ea 527 turtle_state++;
el19tb 52:1145e99264ea 528 break;
el19tb 52:1145e99264ea 529 case 2001 ... 3000:
el19tb 52:1145e99264ea 530 turtle_state++;
el19tb 52:1145e99264ea 531 break;
el19tb 52:1145e99264ea 532 case 3001 ... 4000:
el19tb 52:1145e99264ea 533 turtle_state++;
el19tb 52:1145e99264ea 534 break;
el19tb 52:1145e99264ea 535 case 4001 ... 5000:
el19tb 52:1145e99264ea 536 turtle_state++;
el19tb 52:1145e99264ea 537 break;
el19tb 52:1145e99264ea 538 case 5001:
el19tb 52:1145e99264ea 539 turtle_state = 0;
el19tb 52:1145e99264ea 540 break;
el19tb 52:1145e99264ea 541 }
el19tb 44:f02510eeb165 542 }
el19tb 44:f02510eeb165 543 /* ENGINE RUN */
el19tb 44:f02510eeb165 544
el19tb 44:f02510eeb165 545 /* CHECKERS */
el19tb 44:f02510eeb165 546 void Frogger::checkOutOfBounds(Object *obj)
el19tb 44:f02510eeb165 547 {
el19tb 44:f02510eeb165 548 if(obj->object.x > 84 + randCars()){
el19tb 49:6cad8b6ec5f2 549 obj->object.x = -2;
el19tb 44:f02510eeb165 550
el19tb 49:6cad8b6ec5f2 551 } else if(obj->object.x < -8) {
el19tb 49:6cad8b6ec5f2 552 obj->object.x = 84;
el19tb 44:f02510eeb165 553 }
el19tb 44:f02510eeb165 554 }
el19tb 44:f02510eeb165 555
el19tb 44:f02510eeb165 556 void Frogger::checkFrogOutOfBounds(){
el19tb 44:f02510eeb165 557 if(frog->x > 84){
el19tb 44:f02510eeb165 558 frog->reset(); // set the frog back to the start
el19tb 44:f02510eeb165 559 graphics.printLoser();
el19tb 44:f02510eeb165 560
el19tb 44:f02510eeb165 561 } else if(frog->x < 0) {
el19tb 44:f02510eeb165 562 frog->reset();
el19tb 44:f02510eeb165 563 graphics.printLoser();
el19tb 44:f02510eeb165 564 }
el19tb 44:f02510eeb165 565 }
el19tb 44:f02510eeb165 566
el19tb 46:e39abe665271 567 void Frogger::checkCollison(Object object)
el19tb 44:f02510eeb165 568 {
el19tb 46:e39abe665271 569 if(!(frog->up >= object.rectangle.bottom ||
el19tb 46:e39abe665271 570 (frog->right_side <= object.rectangle.left_side) ||
el19tb 46:e39abe665271 571 (frog->down <= object.rectangle.up) ||
el19tb 46:e39abe665271 572 (frog->left_side >= object.rectangle.right_side))) {
el19tb 48:8ccfc74b60a5 573 moveFrogWithLog(object);
el19tb 50:9ffeb4a10c0a 574 checkFrogAction(object); // check to do what do with frog based on height
el19tb 48:8ccfc74b60a5 575 }
el19tb 48:8ccfc74b60a5 576 }
el19tb 46:e39abe665271 577
el19tb 48:8ccfc74b60a5 578 void Frogger::checkFrogReachedRiver()
el19tb 48:8ccfc74b60a5 579 {
el19tb 48:8ccfc74b60a5 580 if(frog->y < water_level) {
el19tb 50:9ffeb4a10c0a 581 frogDie = true; // frog can die if it touches water
el19tb 48:8ccfc74b60a5 582 } else {
el19tb 48:8ccfc74b60a5 583 frogDie = false;
el19tb 44:f02510eeb165 584 }
el19tb 44:f02510eeb165 585 }
el19tb 44:f02510eeb165 586
el19tb 46:e39abe665271 587 void Frogger::checkFrogAction(Object log)
el19tb 44:f02510eeb165 588 {
el19tb 48:8ccfc74b60a5 589 if(frog->y < water_level) { // frog is in water zone
el19tb 48:8ccfc74b60a5 590 frogOnLog = true; // moving same speed as log
el19tb 50:9ffeb4a10c0a 591 frogDie = false;
el19tb 44:f02510eeb165 592
el19tb 44:f02510eeb165 593 } else { // frog is on the road
el19tb 48:8ccfc74b60a5 594 state_frog = 0; // facing upward
el19tb 48:8ccfc74b60a5 595
el19tb 48:8ccfc74b60a5 596 frog->reset(); // crashed with car so reset
el19tb 48:8ccfc74b60a5 597
el19tb 48:8ccfc74b60a5 598 frogOnLog = false;
el19tb 48:8ccfc74b60a5 599 frogDie = false;
el19tb 44:f02510eeb165 600 }
el19tb 50:9ffeb4a10c0a 601
el19tb 50:9ffeb4a10c0a 602 if(frog->y == (48 - (4*10)))
el19tb 50:9ffeb4a10c0a 603 {
el19tb 50:9ffeb4a10c0a 604 end_post = true;
el19tb 50:9ffeb4a10c0a 605 }
el19tb 44:f02510eeb165 606 }
el19tb 44:f02510eeb165 607
el19tb 48:8ccfc74b60a5 608 void Frogger::moveFrogWithLog(Object log)
el19tb 44:f02510eeb165 609 {
el19tb 50:9ffeb4a10c0a 610 switch (log.object.dir)
el19tb 50:9ffeb4a10c0a 611 {
el19tb 50:9ffeb4a10c0a 612 case 1:
el19tb 50:9ffeb4a10c0a 613 frog->x += log.speed;
el19tb 50:9ffeb4a10c0a 614 break;
el19tb 48:8ccfc74b60a5 615
el19tb 50:9ffeb4a10c0a 616 case 2:
el19tb 50:9ffeb4a10c0a 617 frog->x = frog->x - log.speed;
el19tb 50:9ffeb4a10c0a 618 break;
el19tb 50:9ffeb4a10c0a 619
el19tb 44:f02510eeb165 620 }
el19tb 44:f02510eeb165 621 }
el19tb 44:f02510eeb165 622
el19tb 44:f02510eeb165 623 /* CHECKERS */
el19tb 44:f02510eeb165 624
el19tb 44:f02510eeb165 625 /* X POS */
el19tb 44:f02510eeb165 626 void Frogger::setupLevelOneXPos()
el19tb 44:f02510eeb165 627 {
el19tb 44:f02510eeb165 628 setupRowDistance(car_row_one_one, 20 , 3);
el19tb 44:f02510eeb165 629 setupRowDistance(car_row_two_one, 25, 2);
el19tb 44:f02510eeb165 630 setupRowDistance(car_row_three_one, 30, 3);
el19tb 44:f02510eeb165 631 setupRowDistance(car_row_four_one, 25, 4);
el19tb 44:f02510eeb165 632 }
el19tb 44:f02510eeb165 633
el19tb 44:f02510eeb165 634 void Frogger::setLogLevelOneXPos()
el19tb 42:04e326dcf09b 635 {
el19tb 44:f02510eeb165 636 setupRowDistance(row_one_log, 20, 3);
el19tb 44:f02510eeb165 637 setupRowDistance(row_two_log, 30, 2);
el19tb 44:f02510eeb165 638 setupRowDistance(row_three_log, 25, 3);
el19tb 44:f02510eeb165 639 }
el19tb 44:f02510eeb165 640
el19tb 44:f02510eeb165 641 void Frogger::setLogLevelTwoXPos()
el19tb 44:f02510eeb165 642 {
el19tb 44:f02510eeb165 643 setupRowDistance(level_row_one, 20, 2);
el19tb 44:f02510eeb165 644 setupRowDistance(level_row_two, 30, 2);
el19tb 44:f02510eeb165 645 setupRowDistance(level_row_three, 25, 3);
el19tb 44:f02510eeb165 646 }
el19tb 44:f02510eeb165 647
el19tb 44:f02510eeb165 648 void Frogger::setupLevelTwoXPos()
el19tb 44:f02510eeb165 649 {
el19tb 44:f02510eeb165 650 setupRowDistance(car_row_one_two, 15, 4);
el19tb 44:f02510eeb165 651 setupRowDistance(car_row_two_two, 20, 3);
el19tb 44:f02510eeb165 652 setupRowDistance(car_row_three_two, 25, 4);
el19tb 44:f02510eeb165 653 setupRowDistance(car_row_four_two, 25, 3);
el19tb 44:f02510eeb165 654 }
el19tb 44:f02510eeb165 655
el19tb 53:b6bb4dab7823 656 void Frogger::setupBonusXpos()
el19tb 53:b6bb4dab7823 657 {
el19tb 53:b6bb4dab7823 658 setupRowDistance(bonus_row_one, 15, 4);
el19tb 53:b6bb4dab7823 659 setupRowDistance(bonus_row_two, 20, 3);
el19tb 53:b6bb4dab7823 660 setupRowDistance(bonus_row_four, 25, 3);
el19tb 53:b6bb4dab7823 661
el19tb 53:b6bb4dab7823 662 setupRowDistance(bonus_row_seven, 20, 2);
el19tb 53:b6bb4dab7823 663 setupRowDistance(bonus_row_eight, 25, 3);
el19tb 53:b6bb4dab7823 664 }
el19tb 53:b6bb4dab7823 665
el19tb 44:f02510eeb165 666 void Frogger::setupRowDistance(Object *objects, int dis, int array_size)
el19tb 44:f02510eeb165 667 {
el19tb 44:f02510eeb165 668 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 669 {
el19tb 44:f02510eeb165 670 setDistance(&objects[i], dis);
el19tb 44:f02510eeb165 671 dis += dis; // ensure that each object has appropriate seperation
el19tb 44:f02510eeb165 672 }
el19tb 44:f02510eeb165 673 }
el19tb 44:f02510eeb165 674
el19tb 44:f02510eeb165 675 void Frogger::setDistance(Object *object, int dis)
el19tb 44:f02510eeb165 676 {
el19tb 44:f02510eeb165 677 object->setSeperation(dis);
el19tb 44:f02510eeb165 678 }
el19tb 44:f02510eeb165 679 /* X POS */
el19tb 44:f02510eeb165 680
el19tb 44:f02510eeb165 681 /* ROW */
el19tb 44:f02510eeb165 682
el19tb 44:f02510eeb165 683 void Frogger::setupLevelOneRow()
el19tb 44:f02510eeb165 684 {
el19tb 45:e40c4f89ed7c 685 setRowObjects(car_row_one_one, 2, 3);
el19tb 45:e40c4f89ed7c 686 setRowObjects(car_row_two_one, 3, 2);
el19tb 45:e40c4f89ed7c 687 setRowObjects(car_row_three_one, 4, 3);
el19tb 45:e40c4f89ed7c 688 setRowObjects(car_row_four_one, 5, 4);
el19tb 44:f02510eeb165 689 }
el19tb 44:f02510eeb165 690
el19tb 44:f02510eeb165 691 void Frogger::setupLevelTwoRows()
el19tb 44:f02510eeb165 692 {
el19tb 45:e40c4f89ed7c 693 setRowObjects(car_row_one_two, 2, 4);
el19tb 45:e40c4f89ed7c 694 setRowObjects(car_row_two_two, 3, 3);
el19tb 45:e40c4f89ed7c 695 setRowObjects(car_row_three_two, 4, 4);
el19tb 45:e40c4f89ed7c 696 setRowObjects(car_row_four_two, 5, 3);
el19tb 44:f02510eeb165 697 }
el19tb 44:f02510eeb165 698
el19tb 44:f02510eeb165 699 void Frogger::setLogLevelOneRow()
el19tb 44:f02510eeb165 700 {
el19tb 44:f02510eeb165 701 setRowObjects(row_one_log, 7, 3);
el19tb 44:f02510eeb165 702 setRowObjects(row_two_log, 8, 2);
el19tb 44:f02510eeb165 703 setRowObjects(row_three_log, 9, 3);
el19tb 44:f02510eeb165 704 }
el19tb 44:f02510eeb165 705
el19tb 44:f02510eeb165 706 void Frogger::setLogLevelTwoRow()
el19tb 44:f02510eeb165 707 {
el19tb 44:f02510eeb165 708 setRowObjects(level_row_one, 7, 2);
el19tb 44:f02510eeb165 709 setRowObjects(level_row_two, 8, 2);
el19tb 44:f02510eeb165 710 setRowObjects(level_row_three, 9, 3);
el19tb 44:f02510eeb165 711 }
el19tb 44:f02510eeb165 712
el19tb 53:b6bb4dab7823 713 void Frogger::setupBonusRows()
el19tb 53:b6bb4dab7823 714 {
el19tb 53:b6bb4dab7823 715 setRowObjects(bonus_row_one, 2, 4);
el19tb 53:b6bb4dab7823 716 setRowObjects(bonus_row_two, 3, 3);
el19tb 53:b6bb4dab7823 717 setRowObjects(bonus_row_four, 4, 3);
el19tb 53:b6bb4dab7823 718
el19tb 53:b6bb4dab7823 719 setRowObjects(bonus_row_seven, 7, 2);
el19tb 53:b6bb4dab7823 720 setRowObjects(bonus_row_eight, 9, 3);
el19tb 53:b6bb4dab7823 721 }
el19tb 53:b6bb4dab7823 722
el19tb 44:f02510eeb165 723 void Frogger::setRowObjects(Object *objects, int row, int array_size)
el19tb 44:f02510eeb165 724 {
el19tb 44:f02510eeb165 725 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 726 {
el19tb 44:f02510eeb165 727 createRow(&objects[i], row);
el19tb 44:f02510eeb165 728 }
el19tb 44:f02510eeb165 729 }
el19tb 44:f02510eeb165 730
el19tb 44:f02510eeb165 731 void Frogger::createRow(Object *object, int row)
el19tb 44:f02510eeb165 732 {
el19tb 44:f02510eeb165 733 object->setRow(row);
el19tb 44:f02510eeb165 734 }
el19tb 44:f02510eeb165 735 /* ROW */
el19tb 44:f02510eeb165 736
el19tb 44:f02510eeb165 737 /* SPRITES */
el19tb 44:f02510eeb165 738 void Frogger::setupLevelOneSprites()
el19tb 44:f02510eeb165 739 {
el19tb 44:f02510eeb165 740 setSpriteObjects(car_row_one_one, 'X', 3);
el19tb 44:f02510eeb165 741 setSpriteObjects(car_row_two_one, 'N', 2);
el19tb 44:f02510eeb165 742 setSpriteObjects(car_row_three_one, 'B', 3);
el19tb 44:f02510eeb165 743 setSpriteObjects(car_row_four_one, 'R', 4);
el19tb 44:f02510eeb165 744 }
el19tb 44:f02510eeb165 745
el19tb 44:f02510eeb165 746 void Frogger::setupLevelTwoSprites()
el19tb 44:f02510eeb165 747 {
el19tb 44:f02510eeb165 748 setSpriteObjects(car_row_one_two, 'R', 4);
el19tb 44:f02510eeb165 749 setSpriteObjects(car_row_two_two, 'L', 3);
el19tb 44:f02510eeb165 750 setSpriteObjects(car_row_three_two, 'N', 4);
el19tb 44:f02510eeb165 751 setSpriteObjects(car_row_four_two, 'X', 3);
el19tb 44:f02510eeb165 752 }
el19tb 44:f02510eeb165 753
el19tb 44:f02510eeb165 754 void Frogger::setLogLevelOneSprites()
el19tb 44:f02510eeb165 755 {
el19tb 44:f02510eeb165 756 setSpriteObjects(row_one_log, 'G',3);
el19tb 44:f02510eeb165 757 setSpriteObjects(row_two_log, 'M', 2);
el19tb 44:f02510eeb165 758 setSpriteObjects(row_three_log, 'G', 3);
el19tb 44:f02510eeb165 759 }
el19tb 44:f02510eeb165 760
el19tb 44:f02510eeb165 761 void Frogger::setLogLevelTwoSprite()
el19tb 44:f02510eeb165 762 {
el19tb 51:4c1f49729d88 763 setSpriteObjects(level_row_one, 'M', 2);
el19tb 51:4c1f49729d88 764 setSpriteObjects(level_row_two, 'T', 2);
el19tb 44:f02510eeb165 765 setSpriteObjects(level_row_three, 'G', 3);
el19tb 44:f02510eeb165 766 }
el19tb 44:f02510eeb165 767
el19tb 53:b6bb4dab7823 768 void Frogger::setupBonusSprites()
el19tb 53:b6bb4dab7823 769 {
el19tb 53:b6bb4dab7823 770 setSpriteObjects(bonus_row_one, 'S', 4);
el19tb 53:b6bb4dab7823 771 setSpriteObjects(bonus_row_two, 'S', 3);
el19tb 53:b6bb4dab7823 772 setSpriteObjects(bonus_row_four, 'S', 3);
el19tb 53:b6bb4dab7823 773
el19tb 53:b6bb4dab7823 774 setSpriteObjects(bonus_row_seven, 'S', 2);
el19tb 53:b6bb4dab7823 775 setSpriteObjects(bonus_row_eight, 'S', 3);
el19tb 53:b6bb4dab7823 776 }
el19tb 53:b6bb4dab7823 777
el19tb 44:f02510eeb165 778 void Frogger::setSpriteObjects(Object *objects, char c, int array_size)
el19tb 44:f02510eeb165 779 {
el19tb 44:f02510eeb165 780 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 781 {
el19tb 44:f02510eeb165 782 setSprite(&objects[i], c);
el19tb 44:f02510eeb165 783 }
el19tb 44:f02510eeb165 784 }
el19tb 44:f02510eeb165 785
el19tb 44:f02510eeb165 786 void Frogger::setSprite(Object *object, char c)
el19tb 44:f02510eeb165 787 {
el19tb 44:f02510eeb165 788 object->setSprite(c);
el19tb 44:f02510eeb165 789 }
el19tb 44:f02510eeb165 790 /* SPRITES */
el19tb 44:f02510eeb165 791
el19tb 44:f02510eeb165 792 /* DIR */
el19tb 44:f02510eeb165 793 void Frogger::setupLevelOneDir()
el19tb 44:f02510eeb165 794 {
el19tb 44:f02510eeb165 795 setDirObjects(car_row_one_one, 2, 3);
el19tb 44:f02510eeb165 796 setDirObjects(car_row_two_one, 1, 2);
el19tb 44:f02510eeb165 797 setDirObjects(car_row_three_one, 2, 3);
el19tb 44:f02510eeb165 798 setDirObjects(car_row_four_one, 1, 4);
el19tb 44:f02510eeb165 799 }
el19tb 44:f02510eeb165 800
el19tb 44:f02510eeb165 801 void Frogger::setupLevelTwoDir()
el19tb 44:f02510eeb165 802 {
el19tb 44:f02510eeb165 803 setDirObjects(car_row_one_two, 1, 4);
el19tb 44:f02510eeb165 804 setDirObjects(car_row_two_two, 2, 3);
el19tb 44:f02510eeb165 805 setDirObjects(car_row_three_two, 1, 4);
el19tb 44:f02510eeb165 806 setDirObjects(car_row_four_two, 2, 3);
el19tb 44:f02510eeb165 807 }
el19tb 44:f02510eeb165 808
el19tb 44:f02510eeb165 809 void Frogger::setLogLevelOneDir()
el19tb 44:f02510eeb165 810 {
el19tb 44:f02510eeb165 811 setDirObjects(row_one_log, 1, 3);
el19tb 44:f02510eeb165 812 setDirObjects(row_two_log, 2, 2);
el19tb 44:f02510eeb165 813 setDirObjects(row_three_log, 1, 3);
el19tb 44:f02510eeb165 814 }
el19tb 44:f02510eeb165 815
el19tb 44:f02510eeb165 816 void Frogger::setLogLevelTwoDir()
el19tb 44:f02510eeb165 817 {
el19tb 44:f02510eeb165 818 setDirObjects(level_row_one, 1, 2);
el19tb 44:f02510eeb165 819 setDirObjects(level_row_two, 2, 2);
el19tb 44:f02510eeb165 820 setDirObjects(level_row_three, 1, 3);
el19tb 44:f02510eeb165 821 }
el19tb 44:f02510eeb165 822
el19tb 53:b6bb4dab7823 823 void Frogger::setupBonusTwoDir()
el19tb 53:b6bb4dab7823 824 {
el19tb 53:b6bb4dab7823 825 setDirObjects(bonus_row_one, 2, 4);
el19tb 53:b6bb4dab7823 826 setDirObjects(bonus_row_two, 1, 3);
el19tb 53:b6bb4dab7823 827 setDirObjects(bonus_row_three, 2, 4);
el19tb 53:b6bb4dab7823 828 setDirObjects(bonus_row_four, 1, 3);
el19tb 53:b6bb4dab7823 829
el19tb 53:b6bb4dab7823 830 setDirObjects(bonus_row_six, 1, 2);
el19tb 53:b6bb4dab7823 831 setDirObjects(bonus_row_seven, 2, 2);
el19tb 53:b6bb4dab7823 832 setDirObjects(bonus_row_eight, 1, 3);
el19tb 53:b6bb4dab7823 833 }
el19tb 53:b6bb4dab7823 834
el19tb 44:f02510eeb165 835 void Frogger::setDirObjects(Object *objects, int dir, int array_size)
el19tb 44:f02510eeb165 836 {
el19tb 44:f02510eeb165 837 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 838 {
el19tb 44:f02510eeb165 839 setDir(&objects[i], dir);
el19tb 44:f02510eeb165 840 }
el19tb 44:f02510eeb165 841 }
el19tb 44:f02510eeb165 842
el19tb 44:f02510eeb165 843 void Frogger::setDir(Object *object, int dir)
el19tb 44:f02510eeb165 844 {
el19tb 44:f02510eeb165 845 object->setDir(dir);
el19tb 44:f02510eeb165 846 }
el19tb 44:f02510eeb165 847 /* DIR */
el19tb 44:f02510eeb165 848
el19tb 44:f02510eeb165 849 // so the user does not predict when the next car is coming
el19tb 44:f02510eeb165 850 int Frogger::randCars()
el19tb 44:f02510eeb165 851 {
el19tb 44:f02510eeb165 852 return (rand() % 4) + 1;
el19tb 44:f02510eeb165 853 }