ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Tue May 26 20:51:56 2020 +0000
Revision:
56:2797166656e0
Parent:
55:b17b9931c010
Child:
61:3714af9caab6
created an intro screen, made the frog die if it goes to void area in bonus

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