ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Wed May 27 01:54:46 2020 +0000
Revision:
61:3714af9caab6
Parent:
56:2797166656e0
Final Submission. I have read and agreed with Statement of Academic Integrity.

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