ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Tue May 26 19:54:05 2020 +0000
Revision:
55:b17b9931c010
Parent:
53:b6bb4dab7823
Child:
56:2797166656e0
added test files, added testing statements to test schediule, program passed tests

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