ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Sun May 24 02:30:49 2020 +0000
Revision:
49:6cad8b6ec5f2
Parent:
48:8ccfc74b60a5
Child:
50:9ffeb4a10c0a
fixed bugs regarding car reappearence, created sprites for objets, background

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 35:db257b7bdefc 12 }
el19tb 35:db257b7bdefc 13
el19tb 44:f02510eeb165 14 GraphicEngine graphics;
el19tb 44:f02510eeb165 15
el19tb 37:65c9e5a65738 16 void Frogger::initializeParams(int w, int h, int grid)
el19tb 35:db257b7bdefc 17 {
el19tb 35:db257b7bdefc 18 // screen sizes
el19tb 37:65c9e5a65738 19 lcd_w = w; // width
el19tb 37:65c9e5a65738 20 lcd_h = h; // height
el19tb 47:29c4796a49e5 21 state_frog = 0 ;
el19tb 35:db257b7bdefc 22
el19tb 48:8ccfc74b60a5 23 water_level = 48- 4*6; // row 7 and up is the water level
el19tb 48:8ccfc74b60a5 24 frogDie = false;
el19tb 48:8ccfc74b60a5 25 frogOnLog = false;
el19tb 48:8ccfc74b60a5 26
el19tb 35:db257b7bdefc 27 // grid values
el19tb 35:db257b7bdefc 28 grid = 4; // size of game grid system
el19tb 35:db257b7bdefc 29 grid_width = 22; // size of screen width in grid units
el19tb 35:db257b7bdefc 30 }
el19tb 35:db257b7bdefc 31
el19tb 37:65c9e5a65738 32 void Frogger::initializeLevelTwo()
el19tb 37:65c9e5a65738 33 {
el19tb 44:f02510eeb165 34 setupLevelTwo();
el19tb 37:65c9e5a65738 35 }
el19tb 37:65c9e5a65738 36
el19tb 35:db257b7bdefc 37 void Frogger::initializeEmbeddedSystem()
el19tb 35:db257b7bdefc 38 {
el19tb 35:db257b7bdefc 39 //game setup
el19tb 44:f02510eeb165 40 graphics.init(); // initialize the LCD object
el19tb 44:f02510eeb165 41 graphics.contrast(); // set the contrast to 0.4
el19tb 44:f02510eeb165 42 graphics.backLightOn(); // turn on the backlight
el19tb 42:04e326dcf09b 43
el19tb 42:04e326dcf09b 44 gamepad.init(); // initialize the actual embedded system
el19tb 42:04e326dcf09b 45 }
el19tb 42:04e326dcf09b 46
el19tb 44:f02510eeb165 47 void Frogger::setupLevelOne()
el19tb 44:f02510eeb165 48 {
el19tb 44:f02510eeb165 49 // vehicle objects
el19tb 44:f02510eeb165 50 setupLevelOneRow();
el19tb 44:f02510eeb165 51 setupLevelOneXPos();
el19tb 44:f02510eeb165 52 setupLevelOneSprites();
el19tb 44:f02510eeb165 53 setupLevelOneDir();
el19tb 44:f02510eeb165 54
el19tb 44:f02510eeb165 55 // log objects
el19tb 44:f02510eeb165 56 setupLogsLevelOne();
el19tb 44:f02510eeb165 57 }
el19tb 44:f02510eeb165 58
el19tb 44:f02510eeb165 59 // called by frogger engine
el19tb 44:f02510eeb165 60 void Frogger::setupLevelTwo()
el19tb 44:f02510eeb165 61 {
el19tb 44:f02510eeb165 62 // setup vehicles
el19tb 44:f02510eeb165 63 setupLevelTwoRows();
el19tb 44:f02510eeb165 64 setupLevelTwoXPos();
el19tb 44:f02510eeb165 65 setupLevelTwoSprites();
el19tb 44:f02510eeb165 66 setupLevelTwoDir();
el19tb 44:f02510eeb165 67
el19tb 44:f02510eeb165 68 //log objects
el19tb 44:f02510eeb165 69 setupLogLevelTwo();
el19tb 44:f02510eeb165 70 }
el19tb 44:f02510eeb165 71
el19tb 44:f02510eeb165 72 /* SETUP CALLS */
el19tb 44:f02510eeb165 73 void Frogger::setupLogsLevelOne()
el19tb 44:f02510eeb165 74 {
el19tb 44:f02510eeb165 75 setLogLevelOneXPos();
el19tb 44:f02510eeb165 76 setLogLevelOneRow();
el19tb 44:f02510eeb165 77 setLogLevelOneDir();
el19tb 44:f02510eeb165 78 setLogLevelOneSprites();
el19tb 44:f02510eeb165 79 }
el19tb 44:f02510eeb165 80
el19tb 44:f02510eeb165 81 void Frogger::setupLogLevelTwo()
el19tb 44:f02510eeb165 82 {
el19tb 44:f02510eeb165 83 setLogLevelTwoXPos();
el19tb 44:f02510eeb165 84 setLogLevelTwoRow();
el19tb 44:f02510eeb165 85 setLogLevelTwoSprite();
el19tb 44:f02510eeb165 86 setLogLevelTwoDir();
el19tb 44:f02510eeb165 87 }
el19tb 44:f02510eeb165 88 /* SETUP CALLS */
el19tb 44:f02510eeb165 89
el19tb 42:04e326dcf09b 90 //main function that starts the game
el19tb 42:04e326dcf09b 91 void Frogger::start()
el19tb 42:04e326dcf09b 92 {
el19tb 42:04e326dcf09b 93 //keep reading and processing user input
el19tb 42:04e326dcf09b 94 while(1) {
el19tb 44:f02510eeb165 95 graphics.clear(); // clear the lcd screen
el19tb 49:6cad8b6ec5f2 96
el19tb 49:6cad8b6ec5f2 97 graphics.drawDangerZone();
el19tb 49:6cad8b6ec5f2 98 graphics.drawSafetyLanes();
el19tb 49:6cad8b6ec5f2 99 graphics.drawEndPost();
el19tb 48:8ccfc74b60a5 100 process_input(); // user controls the frog object
el19tb 47:29c4796a49e5 101
el19tb 48:8ccfc74b60a5 102 if(frog->y >= water_level)
el19tb 48:8ccfc74b60a5 103 {
el19tb 48:8ccfc74b60a5 104 frogDie = false;
el19tb 48:8ccfc74b60a5 105 runCurrentLevel(); // add velocity to level vehicles and logs
el19tb 48:8ccfc74b60a5 106
el19tb 48:8ccfc74b60a5 107 } else {
el19tb 48:8ccfc74b60a5 108 frogDie = true;
el19tb 48:8ccfc74b60a5 109 runCurrentLevel(); // add velocity to level vehicles and logs
el19tb 48:8ccfc74b60a5 110
el19tb 48:8ccfc74b60a5 111 if(!frogOnLog){
el19tb 48:8ccfc74b60a5 112 graphics.print();
el19tb 48:8ccfc74b60a5 113 }
el19tb 48:8ccfc74b60a5 114 }
el19tb 49:6cad8b6ec5f2 115
el19tb 48:8ccfc74b60a5 116 graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog
el19tb 48:8ccfc74b60a5 117
el19tb 44:f02510eeb165 118 graphics.refresh(); // refresh the lcd screen
el19tb 42:04e326dcf09b 119
el19tb 46:e39abe665271 120 wait_ms(85); // fpms
el19tb 42:04e326dcf09b 121 }
el19tb 35:db257b7bdefc 122 }
el19tb 35:db257b7bdefc 123
el19tb 47:29c4796a49e5 124 void Frogger::process_input()
el19tb 47:29c4796a49e5 125 {
el19tb 35:db257b7bdefc 126 //determine the input
el19tb 35:db257b7bdefc 127 if(gamepad.A_pressed()){
el19tb 47:29c4796a49e5 128 state_frog = 1;
el19tb 42:04e326dcf09b 129 moveFrog(1,0);
el19tb 44:f02510eeb165 130 frogOnLog = false;
el19tb 35:db257b7bdefc 131 } else if(gamepad.X_pressed()){
el19tb 47:29c4796a49e5 132 state_frog = 0;
el19tb 42:04e326dcf09b 133 moveFrog(0,-1);
el19tb 44:f02510eeb165 134 frogOnLog = false;
el19tb 48:8ccfc74b60a5 135
el19tb 35:db257b7bdefc 136 } else if(gamepad.B_pressed()){
el19tb 47:29c4796a49e5 137 state_frog = 3;
el19tb 42:04e326dcf09b 138 moveFrog(0,1);
el19tb 44:f02510eeb165 139 frogOnLog = false;
el19tb 48:8ccfc74b60a5 140
el19tb 35:db257b7bdefc 141 } else if(gamepad.Y_pressed()){
el19tb 47:29c4796a49e5 142 state_frog = 2;
el19tb 42:04e326dcf09b 143 moveFrog(-1,0);
el19tb 44:f02510eeb165 144 frogOnLog = false;
el19tb 35:db257b7bdefc 145 }
el19tb 35:db257b7bdefc 146 }
el19tb 35:db257b7bdefc 147
el19tb 47:29c4796a49e5 148 void Frogger::drawFrogStates()
el19tb 47:29c4796a49e5 149 {
el19tb 47:29c4796a49e5 150 //graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog
el19tb 47:29c4796a49e5 151 state_frog++;
el19tb 47:29c4796a49e5 152 graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog
el19tb 47:29c4796a49e5 153 state_frog--;
el19tb 47:29c4796a49e5 154 }
el19tb 47:29c4796a49e5 155
el19tb 42:04e326dcf09b 156 //moves the frog around the grid
el19tb 42:04e326dcf09b 157 void Frogger::moveFrog(int xWay, int yWay)
el19tb 35:db257b7bdefc 158 {
el19tb 42:04e326dcf09b 159 //increment the left side of the chicken by a value of the grid size
el19tb 42:04e326dcf09b 160 frog->x += xWay * 4;
el19tb 42:04e326dcf09b 161
el19tb 42:04e326dcf09b 162 //increment the top side by a value of grid sizw
el19tb 42:04e326dcf09b 163 frog->y += yWay * 4;
el19tb 35:db257b7bdefc 164
el19tb 46:e39abe665271 165 // update rect parameters
el19tb 42:04e326dcf09b 166 frog->left_side = frog->x;
el19tb 46:e39abe665271 167 frog->right_side = 6 + frog->x;
el19tb 42:04e326dcf09b 168 frog->up = frog->y;
el19tb 46:e39abe665271 169 frog->down = 4 + frog->y;
el19tb 42:04e326dcf09b 170 }
el19tb 42:04e326dcf09b 171
el19tb 44:f02510eeb165 172 /* ENGINE CALLS */
el19tb 44:f02510eeb165 173 void Frogger::runCurrentLevel()
el19tb 44:f02510eeb165 174 {
el19tb 44:f02510eeb165 175 switch (current_level)
el19tb 44:f02510eeb165 176 {
el19tb 44:f02510eeb165 177 case 1:
el19tb 44:f02510eeb165 178 runLevelOne();
el19tb 44:f02510eeb165 179 break;
el19tb 44:f02510eeb165 180 case 2:
el19tb 44:f02510eeb165 181 runLevelTwo();
el19tb 44:f02510eeb165 182 break;
el19tb 44:f02510eeb165 183 }
el19tb 44:f02510eeb165 184 }
el19tb 44:f02510eeb165 185
el19tb 44:f02510eeb165 186 void Frogger::runLevelOne()
el19tb 44:f02510eeb165 187 {
el19tb 44:f02510eeb165 188 moveVehiclesLevelOne(); // increment the x pos and display
el19tb 44:f02510eeb165 189 moveLogsLevelOne();
el19tb 48:8ccfc74b60a5 190 //checkFrogOnWater(); // check if the frog needs to jump on log/turtles
el19tb 44:f02510eeb165 191 }
el19tb 44:f02510eeb165 192
el19tb 44:f02510eeb165 193 void Frogger::runLevelTwo()
el19tb 44:f02510eeb165 194 {
el19tb 44:f02510eeb165 195 moveVehiclesLevelTwo();
el19tb 44:f02510eeb165 196 moveLogsLevelTwo();
el19tb 48:8ccfc74b60a5 197 //checkFrogOnWater(); // check if it is above a certain height
el19tb 44:f02510eeb165 198 }
el19tb 44:f02510eeb165 199 /* ENGINE CALLS */
el19tb 44:f02510eeb165 200
el19tb 44:f02510eeb165 201 /* ENGINE RUN */
el19tb 44:f02510eeb165 202 void Frogger::moveVehiclesLevelOne()
el19tb 44:f02510eeb165 203 {
el19tb 44:f02510eeb165 204 moveVehicle(car_row_one_one, 'S', 3);
el19tb 46:e39abe665271 205 moveVehicle(car_row_two_one, 'M', 2);
el19tb 44:f02510eeb165 206 moveVehicle(car_row_three_one, 'S', 3);
el19tb 44:f02510eeb165 207 moveVehicle(car_row_four_one, 'M', 4);
el19tb 44:f02510eeb165 208 }
el19tb 44:f02510eeb165 209
el19tb 44:f02510eeb165 210 void Frogger::moveVehiclesLevelTwo()
el19tb 44:f02510eeb165 211 {
el19tb 44:f02510eeb165 212 moveVehicle(car_row_one_two, 'M', 4);
el19tb 44:f02510eeb165 213 moveVehicle(car_row_two_two, 'M', 3);
el19tb 44:f02510eeb165 214 moveVehicle(car_row_three_two, 'F', 4);
el19tb 44:f02510eeb165 215 moveVehicle(car_row_four_two, 'F', 3);
el19tb 44:f02510eeb165 216 }
el19tb 44:f02510eeb165 217
el19tb 44:f02510eeb165 218 void Frogger::moveLogsLevelOne()
el19tb 44:f02510eeb165 219 {
el19tb 44:f02510eeb165 220 moveVehicle(row_one_log, 'S', 3);
el19tb 44:f02510eeb165 221 moveVehicle(row_two_log, 'M', 2);
el19tb 44:f02510eeb165 222 moveVehicle(row_three_log, 'S', 3);
el19tb 44:f02510eeb165 223 }
el19tb 44:f02510eeb165 224
el19tb 44:f02510eeb165 225 void Frogger::moveLogsLevelTwo()
el19tb 44:f02510eeb165 226 {
el19tb 44:f02510eeb165 227 moveVehicle(level_row_one, 'F', 2);
el19tb 44:f02510eeb165 228 moveVehicle(level_row_two, 'M', 2);
el19tb 44:f02510eeb165 229 moveVehicle(level_row_two, 'F', 3);
el19tb 44:f02510eeb165 230 }
el19tb 44:f02510eeb165 231 /* ENGINE RUN */
el19tb 44:f02510eeb165 232
el19tb 44:f02510eeb165 233 void Frogger::checkFrogOnWater()
el19tb 44:f02510eeb165 234 {
el19tb 48:8ccfc74b60a5 235 if(frog->y < water_level) // if the frog is past the safety lane
el19tb 44:f02510eeb165 236 {
el19tb 48:8ccfc74b60a5 237 frogDie = true; // frog will die if not on turtle/log
el19tb 48:8ccfc74b60a5 238 } else {
el19tb 48:8ccfc74b60a5 239 frogDie = false;
el19tb 44:f02510eeb165 240 }
el19tb 44:f02510eeb165 241 }
el19tb 44:f02510eeb165 242
el19tb 44:f02510eeb165 243 void Frogger::moveVehicle(Object *row, char c, int array_size)
el19tb 44:f02510eeb165 244 {
el19tb 44:f02510eeb165 245 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 246 {
el19tb 46:e39abe665271 247 moveIndividualObject(&row[i], c);
el19tb 48:8ccfc74b60a5 248 checkCollison(row[i]); // check if the frog has crashed/on log
el19tb 44:f02510eeb165 249 }
el19tb 44:f02510eeb165 250 }
el19tb 44:f02510eeb165 251
el19tb 46:e39abe665271 252 void Frogger::moveIndividualObject(Object *vehicle, char c){
el19tb 44:f02510eeb165 253 switch(c)
el19tb 44:f02510eeb165 254 {
el19tb 44:f02510eeb165 255 case 'S':
el19tb 44:f02510eeb165 256 vehicle->speedSlow(vehicle->object.dir);
el19tb 44:f02510eeb165 257 break;
el19tb 44:f02510eeb165 258 case 'M':
el19tb 44:f02510eeb165 259 vehicle->speedMedium(vehicle->object.dir);
el19tb 44:f02510eeb165 260 break;
el19tb 44:f02510eeb165 261 case 'F':
el19tb 44:f02510eeb165 262 vehicle->speedFast(vehicle->object.dir);
el19tb 44:f02510eeb165 263 break;
el19tb 44:f02510eeb165 264 }
el19tb 44:f02510eeb165 265
el19tb 44:f02510eeb165 266 checkOutOfBounds(vehicle);
el19tb 48:8ccfc74b60a5 267 checkFrogOutOfBounds();
el19tb 48:8ccfc74b60a5 268
el19tb 44:f02510eeb165 269 graphics.showObj(vehicle); // display to screen
el19tb 44:f02510eeb165 270 }
el19tb 44:f02510eeb165 271 /* ENGINE RUN */
el19tb 44:f02510eeb165 272
el19tb 44:f02510eeb165 273 /* CHECKERS */
el19tb 44:f02510eeb165 274 void Frogger::checkOutOfBounds(Object *obj)
el19tb 44:f02510eeb165 275 {
el19tb 44:f02510eeb165 276 if(obj->object.x > 84 + randCars()){
el19tb 49:6cad8b6ec5f2 277 obj->object.x = -2;
el19tb 44:f02510eeb165 278
el19tb 49:6cad8b6ec5f2 279 } else if(obj->object.x < -8) {
el19tb 49:6cad8b6ec5f2 280 obj->object.x = 84;
el19tb 44:f02510eeb165 281 }
el19tb 44:f02510eeb165 282 }
el19tb 44:f02510eeb165 283
el19tb 44:f02510eeb165 284 void Frogger::checkFrogOutOfBounds(){
el19tb 44:f02510eeb165 285 if(frog->x > 84){
el19tb 44:f02510eeb165 286 frog->reset(); // set the frog back to the start
el19tb 44:f02510eeb165 287 graphics.printLoser();
el19tb 44:f02510eeb165 288
el19tb 44:f02510eeb165 289 } else if(frog->x < 0) {
el19tb 44:f02510eeb165 290 frog->reset();
el19tb 44:f02510eeb165 291 graphics.printLoser();
el19tb 44:f02510eeb165 292 }
el19tb 44:f02510eeb165 293 }
el19tb 44:f02510eeb165 294
el19tb 44:f02510eeb165 295 /*
el19tb 44:f02510eeb165 296 void Frogger::checkCurrentLevelCollision()
el19tb 44:f02510eeb165 297 {
el19tb 44:f02510eeb165 298 switch (current_level)
el19tb 44:f02510eeb165 299 {
el19tb 44:f02510eeb165 300 case 1:
el19tb 44:f02510eeb165 301 level->levelOneCollision();
el19tb 44:f02510eeb165 302 break;
el19tb 44:f02510eeb165 303 case 2:
el19tb 44:f02510eeb165 304 level->levelTwoCollision();
el19tb 44:f02510eeb165 305 break;
el19tb 44:f02510eeb165 306 }
el19tb 44:f02510eeb165 307 }
el19tb 44:f02510eeb165 308 */
el19tb 44:f02510eeb165 309
el19tb 46:e39abe665271 310 void Frogger::checkCollison(Object object)
el19tb 44:f02510eeb165 311 {
el19tb 46:e39abe665271 312 if(!(frog->up >= object.rectangle.bottom ||
el19tb 46:e39abe665271 313 (frog->right_side <= object.rectangle.left_side) ||
el19tb 46:e39abe665271 314 (frog->down <= object.rectangle.up) ||
el19tb 46:e39abe665271 315 (frog->left_side >= object.rectangle.right_side))) {
el19tb 48:8ccfc74b60a5 316 moveFrogWithLog(object);
el19tb 48:8ccfc74b60a5 317 checkFrogAction(object); // check to do what do with frog based on height
el19tb 48:8ccfc74b60a5 318 }
el19tb 48:8ccfc74b60a5 319 }
el19tb 46:e39abe665271 320
el19tb 48:8ccfc74b60a5 321 void Frogger::checkFrogReachedRiver()
el19tb 48:8ccfc74b60a5 322 {
el19tb 48:8ccfc74b60a5 323 if(frog->y < water_level) {
el19tb 48:8ccfc74b60a5 324 frogDie = true; // frog can die if it touches water
el19tb 48:8ccfc74b60a5 325 } else {
el19tb 48:8ccfc74b60a5 326 frogDie = false;
el19tb 44:f02510eeb165 327 }
el19tb 44:f02510eeb165 328 }
el19tb 44:f02510eeb165 329
el19tb 46:e39abe665271 330 void Frogger::checkFrogAction(Object log)
el19tb 44:f02510eeb165 331 {
el19tb 48:8ccfc74b60a5 332 if(frog->y < water_level) { // frog is in water zone
el19tb 48:8ccfc74b60a5 333 frogOnLog = true; // moving same speed as log
el19tb 48:8ccfc74b60a5 334 //frogDie = false;
el19tb 44:f02510eeb165 335
el19tb 44:f02510eeb165 336 } else { // frog is on the road
el19tb 48:8ccfc74b60a5 337 state_frog = 0; // facing upward
el19tb 48:8ccfc74b60a5 338
el19tb 48:8ccfc74b60a5 339 frog->reset(); // crashed with car so reset
el19tb 48:8ccfc74b60a5 340
el19tb 48:8ccfc74b60a5 341 frogOnLog = false;
el19tb 48:8ccfc74b60a5 342 frogDie = false;
el19tb 44:f02510eeb165 343 }
el19tb 44:f02510eeb165 344 }
el19tb 44:f02510eeb165 345
el19tb 48:8ccfc74b60a5 346 void Frogger::moveFrogWithLog(Object log)
el19tb 44:f02510eeb165 347 {
el19tb 48:8ccfc74b60a5 348 if(log.seperation != 0){
el19tb 48:8ccfc74b60a5 349 switch (log.object.dir)
el19tb 48:8ccfc74b60a5 350 {
el19tb 48:8ccfc74b60a5 351 case 1:
el19tb 48:8ccfc74b60a5 352 frog->x += log.speed;
el19tb 48:8ccfc74b60a5 353 break;
el19tb 48:8ccfc74b60a5 354
el19tb 48:8ccfc74b60a5 355 case 2:
el19tb 48:8ccfc74b60a5 356 frog->x = frog->x - log.speed;
el19tb 48:8ccfc74b60a5 357 break;
el19tb 48:8ccfc74b60a5 358 }
el19tb 44:f02510eeb165 359 }
el19tb 44:f02510eeb165 360 }
el19tb 44:f02510eeb165 361
el19tb 44:f02510eeb165 362 /* CHECKERS */
el19tb 44:f02510eeb165 363
el19tb 44:f02510eeb165 364 /* X POS */
el19tb 44:f02510eeb165 365 void Frogger::setupLevelOneXPos()
el19tb 44:f02510eeb165 366 {
el19tb 44:f02510eeb165 367 setupRowDistance(car_row_one_one, 20 , 3);
el19tb 44:f02510eeb165 368 setupRowDistance(car_row_two_one, 25, 2);
el19tb 44:f02510eeb165 369 setupRowDistance(car_row_three_one, 30, 3);
el19tb 44:f02510eeb165 370 setupRowDistance(car_row_four_one, 25, 4);
el19tb 44:f02510eeb165 371 }
el19tb 44:f02510eeb165 372
el19tb 44:f02510eeb165 373 void Frogger::setLogLevelOneXPos()
el19tb 42:04e326dcf09b 374 {
el19tb 44:f02510eeb165 375 setupRowDistance(row_one_log, 20, 3);
el19tb 44:f02510eeb165 376 setupRowDistance(row_two_log, 30, 2);
el19tb 44:f02510eeb165 377 setupRowDistance(row_three_log, 25, 3);
el19tb 44:f02510eeb165 378 }
el19tb 44:f02510eeb165 379
el19tb 44:f02510eeb165 380 void Frogger::setLogLevelTwoXPos()
el19tb 44:f02510eeb165 381 {
el19tb 44:f02510eeb165 382 setupRowDistance(level_row_one, 20, 2);
el19tb 44:f02510eeb165 383 setupRowDistance(level_row_two, 30, 2);
el19tb 44:f02510eeb165 384 setupRowDistance(level_row_three, 25, 3);
el19tb 44:f02510eeb165 385 }
el19tb 44:f02510eeb165 386
el19tb 44:f02510eeb165 387 void Frogger::setupLevelTwoXPos()
el19tb 44:f02510eeb165 388 {
el19tb 44:f02510eeb165 389 setupRowDistance(car_row_one_two, 15, 4);
el19tb 44:f02510eeb165 390 setupRowDistance(car_row_two_two, 20, 3);
el19tb 44:f02510eeb165 391 setupRowDistance(car_row_three_two, 25, 4);
el19tb 44:f02510eeb165 392 setupRowDistance(car_row_four_two, 25, 3);
el19tb 44:f02510eeb165 393 }
el19tb 44:f02510eeb165 394
el19tb 44:f02510eeb165 395 void Frogger::setupRowDistance(Object *objects, int dis, int array_size)
el19tb 44:f02510eeb165 396 {
el19tb 44:f02510eeb165 397 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 398 {
el19tb 44:f02510eeb165 399 setDistance(&objects[i], dis);
el19tb 44:f02510eeb165 400 dis += dis; // ensure that each object has appropriate seperation
el19tb 44:f02510eeb165 401 }
el19tb 44:f02510eeb165 402 }
el19tb 44:f02510eeb165 403
el19tb 44:f02510eeb165 404 void Frogger::setDistance(Object *object, int dis)
el19tb 44:f02510eeb165 405 {
el19tb 44:f02510eeb165 406 object->setSeperation(dis);
el19tb 44:f02510eeb165 407 }
el19tb 44:f02510eeb165 408 /* X POS */
el19tb 44:f02510eeb165 409
el19tb 44:f02510eeb165 410 /* ROW */
el19tb 44:f02510eeb165 411
el19tb 44:f02510eeb165 412 void Frogger::setupLevelOneRow()
el19tb 44:f02510eeb165 413 {
el19tb 45:e40c4f89ed7c 414 setRowObjects(car_row_one_one, 2, 3);
el19tb 45:e40c4f89ed7c 415 setRowObjects(car_row_two_one, 3, 2);
el19tb 45:e40c4f89ed7c 416 setRowObjects(car_row_three_one, 4, 3);
el19tb 45:e40c4f89ed7c 417 setRowObjects(car_row_four_one, 5, 4);
el19tb 44:f02510eeb165 418 }
el19tb 44:f02510eeb165 419
el19tb 44:f02510eeb165 420 void Frogger::setupLevelTwoRows()
el19tb 44:f02510eeb165 421 {
el19tb 45:e40c4f89ed7c 422 setRowObjects(car_row_one_two, 2, 4);
el19tb 45:e40c4f89ed7c 423 setRowObjects(car_row_two_two, 3, 3);
el19tb 45:e40c4f89ed7c 424 setRowObjects(car_row_three_two, 4, 4);
el19tb 45:e40c4f89ed7c 425 setRowObjects(car_row_four_two, 5, 3);
el19tb 44:f02510eeb165 426 }
el19tb 44:f02510eeb165 427
el19tb 44:f02510eeb165 428 void Frogger::setLogLevelOneRow()
el19tb 44:f02510eeb165 429 {
el19tb 44:f02510eeb165 430 setRowObjects(row_one_log, 7, 3);
el19tb 44:f02510eeb165 431 setRowObjects(row_two_log, 8, 2);
el19tb 44:f02510eeb165 432 setRowObjects(row_three_log, 9, 3);
el19tb 44:f02510eeb165 433 }
el19tb 44:f02510eeb165 434
el19tb 44:f02510eeb165 435 void Frogger::setLogLevelTwoRow()
el19tb 44:f02510eeb165 436 {
el19tb 44:f02510eeb165 437 setRowObjects(level_row_one, 7, 2);
el19tb 44:f02510eeb165 438 setRowObjects(level_row_two, 8, 2);
el19tb 44:f02510eeb165 439 setRowObjects(level_row_three, 9, 3);
el19tb 44:f02510eeb165 440 }
el19tb 44:f02510eeb165 441
el19tb 44:f02510eeb165 442 void Frogger::setRowObjects(Object *objects, int row, int array_size)
el19tb 44:f02510eeb165 443 {
el19tb 44:f02510eeb165 444 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 445 {
el19tb 44:f02510eeb165 446 createRow(&objects[i], row);
el19tb 44:f02510eeb165 447 }
el19tb 44:f02510eeb165 448 }
el19tb 44:f02510eeb165 449
el19tb 44:f02510eeb165 450 void Frogger::createRow(Object *object, int row)
el19tb 44:f02510eeb165 451 {
el19tb 44:f02510eeb165 452 object->setRow(row);
el19tb 44:f02510eeb165 453 }
el19tb 44:f02510eeb165 454 /* ROW */
el19tb 44:f02510eeb165 455
el19tb 44:f02510eeb165 456 /* SPRITES */
el19tb 44:f02510eeb165 457 void Frogger::setupLevelOneSprites()
el19tb 44:f02510eeb165 458 {
el19tb 44:f02510eeb165 459 setSpriteObjects(car_row_one_one, 'X', 3);
el19tb 44:f02510eeb165 460 setSpriteObjects(car_row_two_one, 'N', 2);
el19tb 44:f02510eeb165 461 setSpriteObjects(car_row_three_one, 'B', 3);
el19tb 44:f02510eeb165 462 setSpriteObjects(car_row_four_one, 'R', 4);
el19tb 44:f02510eeb165 463 }
el19tb 44:f02510eeb165 464
el19tb 44:f02510eeb165 465 void Frogger::setupLevelTwoSprites()
el19tb 44:f02510eeb165 466 {
el19tb 44:f02510eeb165 467 setSpriteObjects(car_row_one_two, 'R', 4);
el19tb 44:f02510eeb165 468 setSpriteObjects(car_row_two_two, 'L', 3);
el19tb 44:f02510eeb165 469 setSpriteObjects(car_row_three_two, 'N', 4);
el19tb 44:f02510eeb165 470 setSpriteObjects(car_row_four_two, 'X', 3);
el19tb 44:f02510eeb165 471 }
el19tb 44:f02510eeb165 472
el19tb 44:f02510eeb165 473 void Frogger::setLogLevelOneSprites()
el19tb 44:f02510eeb165 474 {
el19tb 44:f02510eeb165 475 setSpriteObjects(row_one_log, 'G',3);
el19tb 44:f02510eeb165 476 setSpriteObjects(row_two_log, 'M', 2);
el19tb 44:f02510eeb165 477 setSpriteObjects(row_three_log, 'G', 3);
el19tb 44:f02510eeb165 478 }
el19tb 44:f02510eeb165 479
el19tb 44:f02510eeb165 480 void Frogger::setLogLevelTwoSprite()
el19tb 44:f02510eeb165 481 {
el19tb 44:f02510eeb165 482 setSpriteObjects(level_row_one, 'G', 2);
el19tb 44:f02510eeb165 483 setSpriteObjects(level_row_two, 'M', 2);
el19tb 44:f02510eeb165 484 setSpriteObjects(level_row_three, 'G', 3);
el19tb 44:f02510eeb165 485 }
el19tb 44:f02510eeb165 486
el19tb 44:f02510eeb165 487 void Frogger::setSpriteObjects(Object *objects, char c, int array_size)
el19tb 44:f02510eeb165 488 {
el19tb 44:f02510eeb165 489 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 490 {
el19tb 44:f02510eeb165 491 setSprite(&objects[i], c);
el19tb 44:f02510eeb165 492 }
el19tb 44:f02510eeb165 493 }
el19tb 44:f02510eeb165 494
el19tb 44:f02510eeb165 495 void Frogger::setSprite(Object *object, char c)
el19tb 44:f02510eeb165 496 {
el19tb 44:f02510eeb165 497 object->setSprite(c);
el19tb 44:f02510eeb165 498 }
el19tb 44:f02510eeb165 499 /* SPRITES */
el19tb 44:f02510eeb165 500
el19tb 44:f02510eeb165 501 /* DIR */
el19tb 44:f02510eeb165 502 void Frogger::setupLevelOneDir()
el19tb 44:f02510eeb165 503 {
el19tb 44:f02510eeb165 504 setDirObjects(car_row_one_one, 2, 3);
el19tb 44:f02510eeb165 505 setDirObjects(car_row_two_one, 1, 2);
el19tb 44:f02510eeb165 506 setDirObjects(car_row_three_one, 2, 3);
el19tb 44:f02510eeb165 507 setDirObjects(car_row_four_one, 1, 4);
el19tb 44:f02510eeb165 508 }
el19tb 44:f02510eeb165 509
el19tb 44:f02510eeb165 510 void Frogger::setupLevelTwoDir()
el19tb 44:f02510eeb165 511 {
el19tb 44:f02510eeb165 512 setDirObjects(car_row_one_two, 1, 4);
el19tb 44:f02510eeb165 513 setDirObjects(car_row_two_two, 2, 3);
el19tb 44:f02510eeb165 514 setDirObjects(car_row_three_two, 1, 4);
el19tb 44:f02510eeb165 515 setDirObjects(car_row_four_two, 2, 3);
el19tb 44:f02510eeb165 516 }
el19tb 44:f02510eeb165 517
el19tb 44:f02510eeb165 518 void Frogger::setLogLevelOneDir()
el19tb 44:f02510eeb165 519 {
el19tb 44:f02510eeb165 520 setDirObjects(row_one_log, 1, 3);
el19tb 44:f02510eeb165 521 setDirObjects(row_two_log, 2, 2);
el19tb 44:f02510eeb165 522 setDirObjects(row_three_log, 1, 3);
el19tb 44:f02510eeb165 523 }
el19tb 44:f02510eeb165 524
el19tb 44:f02510eeb165 525 void Frogger::setLogLevelTwoDir()
el19tb 44:f02510eeb165 526 {
el19tb 44:f02510eeb165 527 setDirObjects(level_row_one, 1, 2);
el19tb 44:f02510eeb165 528 setDirObjects(level_row_two, 2, 2);
el19tb 44:f02510eeb165 529 setDirObjects(level_row_three, 1, 3);
el19tb 44:f02510eeb165 530 }
el19tb 44:f02510eeb165 531
el19tb 44:f02510eeb165 532 void Frogger::setDirObjects(Object *objects, int dir, int array_size)
el19tb 44:f02510eeb165 533 {
el19tb 44:f02510eeb165 534 for(int i = 0; i < array_size; i++)
el19tb 44:f02510eeb165 535 {
el19tb 44:f02510eeb165 536 setDir(&objects[i], dir);
el19tb 44:f02510eeb165 537 }
el19tb 44:f02510eeb165 538 }
el19tb 44:f02510eeb165 539
el19tb 44:f02510eeb165 540 void Frogger::setDir(Object *object, int dir)
el19tb 44:f02510eeb165 541 {
el19tb 44:f02510eeb165 542 object->setDir(dir);
el19tb 44:f02510eeb165 543 }
el19tb 44:f02510eeb165 544 /* DIR */
el19tb 44:f02510eeb165 545
el19tb 44:f02510eeb165 546 // so the user does not predict when the next car is coming
el19tb 44:f02510eeb165 547 int Frogger::randCars()
el19tb 44:f02510eeb165 548 {
el19tb 44:f02510eeb165 549 return (rand() % 4) + 1;
el19tb 44:f02510eeb165 550 }
el19tb 44:f02510eeb165 551