Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Frogger/Frogger.cpp@41:6267c66953ca, 2020-05-18 (annotated)
- Committer:
- el19tb
- Date:
- Mon May 18 03:12:30 2020 +0000
- Revision:
- 41:6267c66953ca
- Parent:
- 37:65c9e5a65738
- Child:
- 42:04e326dcf09b
check for out of bound vehicles, and reset frog if it goes out of bound, worked on frog on log function a little
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el19tb | 37:65c9e5a65738 | 1 | #include "Frogger.h" |
el19tb | 35:db257b7bdefc | 2 | #include "Menu.h" |
el19tb | 35:db257b7bdefc | 3 | #include "GraphicEngine.h" |
el19tb | 35:db257b7bdefc | 4 | #include <vector> |
el19tb | 35:db257b7bdefc | 5 | #include <stdio.h> |
el19tb | 35:db257b7bdefc | 6 | #include <cstddef> |
el19tb | 35:db257b7bdefc | 7 | |
el19tb | 35:db257b7bdefc | 8 | bool frogLog = false; |
el19tb | 35:db257b7bdefc | 9 | bool frogDie = false; // whenever the frog is above safety lane in the middle |
el19tb | 35:db257b7bdefc | 10 | bool attach = false; |
el19tb | 35:db257b7bdefc | 11 | |
el19tb | 37:65c9e5a65738 | 12 | // level one initiailization has already been done |
el19tb | 37:65c9e5a65738 | 13 | Frogger::Frogger(GraphicEngine *engine, Level *levelptr, Frog *frog, int grid, int w, int h) |
el19tb | 35:db257b7bdefc | 14 | { |
el19tb | 35:db257b7bdefc | 15 | this->graphics = engine; // get the renderer in place |
el19tb | 37:65c9e5a65738 | 16 | this->level = levelptr; // one level object per engine |
el19tb | 35:db257b7bdefc | 17 | this->frog = frog; // one frog object per run |
el19tb | 35:db257b7bdefc | 18 | |
el19tb | 37:65c9e5a65738 | 19 | initializeParams(w, h, grid); // initialize the software parameters |
el19tb | 35:db257b7bdefc | 20 | initializeEmbeddedSystem(); // initialize the hardware paramaters |
el19tb | 35:db257b7bdefc | 21 | } |
el19tb | 35:db257b7bdefc | 22 | |
el19tb | 37:65c9e5a65738 | 23 | void Frogger::initializeParams(int w, int h, int grid) |
el19tb | 35:db257b7bdefc | 24 | { |
el19tb | 35:db257b7bdefc | 25 | // screen sizes |
el19tb | 37:65c9e5a65738 | 26 | lcd_w = w; // width |
el19tb | 37:65c9e5a65738 | 27 | lcd_h = h; // height |
el19tb | 35:db257b7bdefc | 28 | |
el19tb | 35:db257b7bdefc | 29 | // grid values |
el19tb | 35:db257b7bdefc | 30 | grid = 4; // size of game grid system |
el19tb | 35:db257b7bdefc | 31 | grid_width = 22; // size of screen width in grid units |
el19tb | 35:db257b7bdefc | 32 | } |
el19tb | 35:db257b7bdefc | 33 | |
el19tb | 37:65c9e5a65738 | 34 | void Frogger::initializeLevelTwo() |
el19tb | 37:65c9e5a65738 | 35 | { |
el19tb | 37:65c9e5a65738 | 36 | level->setupLevelTwo(); |
el19tb | 37:65c9e5a65738 | 37 | } |
el19tb | 37:65c9e5a65738 | 38 | |
el19tb | 35:db257b7bdefc | 39 | void Frogger::initializeEmbeddedSystem() |
el19tb | 35:db257b7bdefc | 40 | { |
el19tb | 35:db257b7bdefc | 41 | //game setup |
el19tb | 35:db257b7bdefc | 42 | graphics.init(); // initialize the LCD object |
el19tb | 35:db257b7bdefc | 43 | graphics.contrast(); // set the contrast to 0.4 |
el19tb | 35:db257b7bdefc | 44 | graphics.backLightOn(); // turn on the backlight |
el19tb | 35:db257b7bdefc | 45 | gamepad.init(); // initialize the actual game pad |
el19tb | 35:db257b7bdefc | 46 | } |
el19tb | 35:db257b7bdefc | 47 | |
el19tb | 37:65c9e5a65738 | 48 | void Frogger::runCurrentLevel() |
el19tb | 37:65c9e5a65738 | 49 | { |
el19tb | 37:65c9e5a65738 | 50 | switch (current_level) |
el19tb | 37:65c9e5a65738 | 51 | { |
el19tb | 37:65c9e5a65738 | 52 | case 1: |
el19tb | 37:65c9e5a65738 | 53 | level->levelOne(); |
el19tb | 37:65c9e5a65738 | 54 | break; |
el19tb | 37:65c9e5a65738 | 55 | case 2: |
el19tb | 37:65c9e5a65738 | 56 | level->levelTwo(); |
el19tb | 37:65c9e5a65738 | 57 | break; |
el19tb | 37:65c9e5a65738 | 58 | } |
el19tb | 37:65c9e5a65738 | 59 | } |
el19tb | 37:65c9e5a65738 | 60 | |
el19tb | 35:db257b7bdefc | 61 | //main function that starts the game |
el19tb | 37:65c9e5a65738 | 62 | void Frogger::start() |
el19tb | 37:65c9e5a65738 | 63 | { |
el19tb | 35:db257b7bdefc | 64 | //keep reading and processing user input |
el19tb | 35:db257b7bdefc | 65 | while(1) { |
el19tb | 37:65c9e5a65738 | 66 | graphics.clear(); // clear the lcd screen |
el19tb | 41:6267c66953ca | 67 | runCurrentLevel(); // add velocity to level vehicles and logs |
el19tb | 35:db257b7bdefc | 68 | |
el19tb | 41:6267c66953ca | 69 | graphics.showFrog(); // display current position of frog |
el19tb | 41:6267c66953ca | 70 | process_input(); // user controls the frog object |
el19tb | 35:db257b7bdefc | 71 | |
el19tb | 41:6267c66953ca | 72 | checkCurrentLevelCollision(); // check if the frog is alive |
el19tb | 41:6267c66953ca | 73 | checkFrogInWater(); // check if the frog is in the water level |
el19tb | 41:6267c66953ca | 74 | |
el19tb | 41:6267c66953ca | 75 | graphics.refresh(); // refresh the lcd screen |
el19tb | 37:65c9e5a65738 | 76 | |
el19tb | 41:6267c66953ca | 77 | wait_ms(70); // fpms |
el19tb | 35:db257b7bdefc | 78 | } |
el19tb | 35:db257b7bdefc | 79 | } |
el19tb | 35:db257b7bdefc | 80 | |
el19tb | 41:6267c66953ca | 81 | void Frogger::checkCurrentLevelCollision() |
el19tb | 41:6267c66953ca | 82 | { |
el19tb | 41:6267c66953ca | 83 | switch (current_level) |
el19tb | 41:6267c66953ca | 84 | { |
el19tb | 41:6267c66953ca | 85 | case 1: |
el19tb | 41:6267c66953ca | 86 | level->levelOneCollision(); |
el19tb | 41:6267c66953ca | 87 | break; |
el19tb | 41:6267c66953ca | 88 | case 2: |
el19tb | 41:6267c66953ca | 89 | level->levelTwoCollision(); |
el19tb | 41:6267c66953ca | 90 | break; |
el19tb | 41:6267c66953ca | 91 | } |
el19tb | 41:6267c66953ca | 92 | } |
el19tb | 41:6267c66953ca | 93 | |
el19tb | 41:6267c66953ca | 94 | void Frogger::checkIfFrogIsInWater() |
el19tb | 37:65c9e5a65738 | 95 | { |
el19tb | 37:65c9e5a65738 | 96 | if(chicken.y < screenH - grid*6){ |
el19tb | 37:65c9e5a65738 | 97 | frogDie = true; // frog can die if it is in water |
el19tb | 37:65c9e5a65738 | 98 | |
el19tb | 37:65c9e5a65738 | 99 | //if it is not in a log |
el19tb | 37:65c9e5a65738 | 100 | for(int x = 0; x < 2; x++){ |
el19tb | 37:65c9e5a65738 | 101 | |
el19tb | 37:65c9e5a65738 | 102 | if(attach){ |
el19tb | 37:65c9e5a65738 | 103 | |
el19tb | 37:65c9e5a65738 | 104 | |
el19tb | 37:65c9e5a65738 | 105 | } |
el19tb | 37:65c9e5a65738 | 106 | } |
el19tb | 37:65c9e5a65738 | 107 | |
el19tb | 37:65c9e5a65738 | 108 | if(!attach){ |
el19tb | 37:65c9e5a65738 | 109 | graphics.print(); |
el19tb | 37:65c9e5a65738 | 110 | } |
el19tb | 37:65c9e5a65738 | 111 | } |
el19tb | 37:65c9e5a65738 | 112 | } |
el19tb | 37:65c9e5a65738 | 113 | |
el19tb | 35:db257b7bdefc | 114 | // log intersects then frog.x = log[i].speed |
el19tb | 35:db257b7bdefc | 115 | // frog is attached function |
el19tb | 35:db257b7bdefc | 116 | // detach the frog when user goes up or down |
el19tb | 35:db257b7bdefc | 117 | // if the frog is back to the safe zone detatch also |
el19tb | 35:db257b7bdefc | 118 | // whenever the frog moves detach |
el19tb | 35:db257b7bdefc | 119 | //A moves right |
el19tb | 35:db257b7bdefc | 120 | //X moves upward |
el19tb | 35:db257b7bdefc | 121 | //B moves downward |
el19tb | 35:db257b7bdefc | 122 | //Y moves left |
el19tb | 37:65c9e5a65738 | 123 | void Frogger::process_input() { |
el19tb | 35:db257b7bdefc | 124 | //determine the input |
el19tb | 35:db257b7bdefc | 125 | /* make this a switch statement */ |
el19tb | 35:db257b7bdefc | 126 | if(gamepad.A_pressed()){ |
el19tb | 35:db257b7bdefc | 127 | moveChicken(1,0); |
el19tb | 41:6267c66953ca | 128 | level->frogOnLog = false; |
el19tb | 35:db257b7bdefc | 129 | } else if(gamepad.X_pressed()){ |
el19tb | 35:db257b7bdefc | 130 | moveChicken(0,-1); |
el19tb | 41:6267c66953ca | 131 | level->frogOnLog = false; |
el19tb | 35:db257b7bdefc | 132 | } else if(gamepad.B_pressed()){ |
el19tb | 35:db257b7bdefc | 133 | moveChicken(0,1); |
el19tb | 41:6267c66953ca | 134 | level->frogOnLog = false; |
el19tb | 35:db257b7bdefc | 135 | } else if(gamepad.Y_pressed()){ |
el19tb | 35:db257b7bdefc | 136 | moveChicken(-1,0); |
el19tb | 41:6267c66953ca | 137 | level->frogOnLog = false; |
el19tb | 35:db257b7bdefc | 138 | } |
el19tb | 35:db257b7bdefc | 139 | } |
el19tb | 35:db257b7bdefc | 140 | |
el19tb | 37:65c9e5a65738 | 141 | void Frogger::createMultipleSafetyLane() |
el19tb | 35:db257b7bdefc | 142 | { |
el19tb | 35:db257b7bdefc | 143 | int min = 0; // start from the top, and draw till 0 |
el19tb | 35:db257b7bdefc | 144 | int max = grid_width; // draw 21 objects to the first lane |
el19tb | 35:db257b7bdefc | 145 | int row = 1; |
el19tb | 35:db257b7bdefc | 146 | int x_fac = 1; |
el19tb | 35:db257b7bdefc | 147 | |
el19tb | 35:db257b7bdefc | 148 | for(int x = 0; x < 2; x++){ |
el19tb | 35:db257b7bdefc | 149 | creatSafetyObject(min, max, row, x_fac); |
el19tb | 35:db257b7bdefc | 150 | row += 6; // increment the rows to the next lane |
el19tb | 35:db257b7bdefc | 151 | min += 22; // fill in the vector with 22 grid units |
el19tb | 35:db257b7bdefc | 152 | max += 22; |
el19tb | 35:db257b7bdefc | 153 | } |
el19tb | 35:db257b7bdefc | 154 | } |
el19tb | 35:db257b7bdefc | 155 | |
el19tb | 37:65c9e5a65738 | 156 | void Frogger::createSafetyObject(int min, int max, int row, int x_fac) |
el19tb | 35:db257b7bdefc | 157 | { |
el19tb | 35:db257b7bdefc | 158 | int state = 1; |
el19tb | 35:db257b7bdefc | 159 | |
el19tb | 35:db257b7bdefc | 160 | for(int z = 0; z < 22; z++){ |
el19tb | 35:db257b7bdefc | 161 | switch(state) |
el19tb | 35:db257b7bdefc | 162 | { |
el19tb | 35:db257b7bdefc | 163 | case 1: |
el19tb | 35:db257b7bdefc | 164 | safety_lane.push_back(z/x_fac, row, 'K'); // safety lane so row 0 |
el19tb | 35:db257b7bdefc | 165 | state++; |
el19tb | 35:db257b7bdefc | 166 | break; |
el19tb | 35:db257b7bdefc | 167 | case 2: |
el19tb | 35:db257b7bdefc | 168 | safety_lane.push_back(z/x_fac, row, 'P'); // safety lane so row 0 |
el19tb | 35:db257b7bdefc | 169 | state--; // back to inital state |
el19tb | 35:db257b7bdefc | 170 | break; |
el19tb | 35:db257b7bdefc | 171 | } |
el19tb | 35:db257b7bdefc | 172 | } |
el19tb | 35:db257b7bdefc | 173 | } |
el19tb | 35:db257b7bdefc | 174 | |
el19tb | 37:65c9e5a65738 | 175 | void Frogger::drawSafety() |
el19tb | 35:db257b7bdefc | 176 | { |
el19tb | 35:db257b7bdefc | 177 | graphics.drawSafetyLanes(safety_lane); |
el19tb | 35:db257b7bdefc | 178 | } |
el19tb | 35:db257b7bdefc | 179 | |
el19tb | 35:db257b7bdefc | 180 | |
el19tb | 37:65c9e5a65738 | 181 | void Frogger::createMultipleRoadLane() |
el19tb | 35:db257b7bdefc | 182 | { |
el19tb | 35:db257b7bdefc | 183 | int min = 0; // start from the top, and draw till 0 |
el19tb | 35:db257b7bdefc | 184 | int max = grid_width; // draw 21 objects to the first lane |
el19tb | 35:db257b7bdefc | 185 | int row = 1; |
el19tb | 35:db257b7bdefc | 186 | |
el19tb | 35:db257b7bdefc | 187 | for(int x = 0; x < 4; x++){ |
el19tb | 35:db257b7bdefc | 188 | createRoadLane(min, max, row); |
el19tb | 35:db257b7bdefc | 189 | row++; // increment the rows to the next lane |
el19tb | 35:db257b7bdefc | 190 | min += 22; // fill in the vector with 22 grid units |
el19tb | 35:db257b7bdefc | 191 | max += 22; |
el19tb | 35:db257b7bdefc | 192 | } |
el19tb | 35:db257b7bdefc | 193 | } |
el19tb | 35:db257b7bdefc | 194 | |
el19tb | 35:db257b7bdefc | 195 | // every level is going to have the same amount of blocks |
el19tb | 37:65c9e5a65738 | 196 | void Frogger::createRoadLane(int min, int max, int row) |
el19tb | 35:db257b7bdefc | 197 | { |
el19tb | 35:db257b7bdefc | 198 | std::vector<Background>::size_type it; |
el19tb | 35:db257b7bdefc | 199 | |
el19tb | 35:db257b7bdefc | 200 | // fill the road objects |
el19tb | 35:db257b7bdefc | 201 | for(int it = min; it != max; it++){ |
el19tb | 35:db257b7bdefc | 202 | roads.push_back(it/row, row); // it is the x pos of the obj, row is the y pos |
el19tb | 35:db257b7bdefc | 203 | } |
el19tb | 35:db257b7bdefc | 204 | } |
el19tb | 35:db257b7bdefc | 205 | |
el19tb | 37:65c9e5a65738 | 206 | void Frogger::drawRoadObjects() |
el19tb | 35:db257b7bdefc | 207 | { |
el19tb | 35:db257b7bdefc | 208 | graphics.getRoadObjects(roads); |
el19tb | 35:db257b7bdefc | 209 | } |
el19tb | 35:db257b7bdefc | 210 | |
el19tb | 37:65c9e5a65738 | 211 | void Frogger::createMultipleLanesWater() |
el19tb | 35:db257b7bdefc | 212 | { |
el19tb | 35:db257b7bdefc | 213 | int min = 0; // start from the top, and draw till 0 |
el19tb | 35:db257b7bdefc | 214 | int max = grid_width; // draw 21 objects to the first lane |
el19tb | 35:db257b7bdefc | 215 | int row = 7; |
el19tb | 35:db257b7bdefc | 216 | int x_fac = 1; |
el19tb | 35:db257b7bdefc | 217 | |
el19tb | 35:db257b7bdefc | 218 | for(int x = 0; x < 3; x++){ |
el19tb | 35:db257b7bdefc | 219 | if(x == 1){ |
el19tb | 35:db257b7bdefc | 220 | createWaterLane(min, max, row, -0.6); // second row goes left |
el19tb | 35:db257b7bdefc | 221 | } else { |
el19tb | 35:db257b7bdefc | 222 | createWaterLane(min, max, row, 0.4); // rest of the rows go right |
el19tb | 35:db257b7bdefc | 223 | } |
el19tb | 35:db257b7bdefc | 224 | |
el19tb | 35:db257b7bdefc | 225 | row++; // increment the rows to the next lane |
el19tb | 35:db257b7bdefc | 226 | min += grid_width; // fill in the vector with 22 grid units |
el19tb | 35:db257b7bdefc | 227 | max += grid_width; |
el19tb | 35:db257b7bdefc | 228 | } |
el19tb | 35:db257b7bdefc | 229 | } |
el19tb | 35:db257b7bdefc | 230 | |
el19tb | 37:65c9e5a65738 | 231 | void Frogger::createWaterLane(int min, int max, int row, float speed, int x_fac){ |
el19tb | 35:db257b7bdefc | 232 | int state = 1; |
el19tb | 35:db257b7bdefc | 233 | for(it = min; it < max; it++) |
el19tb | 35:db257b7bdefc | 234 | { |
el19tb | 35:db257b7bdefc | 235 | switch(state) |
el19tb | 35:db257b7bdefc | 236 | { |
el19tb | 35:db257b7bdefc | 237 | case 1: // initial state |
el19tb | 35:db257b7bdefc | 238 | water[it].push_back(it/x_fac, row, speed, 'F'); // first type of water |
el19tb | 35:db257b7bdefc | 239 | state++; // transition to next state |
el19tb | 35:db257b7bdefc | 240 | break; |
el19tb | 35:db257b7bdefc | 241 | case 2: |
el19tb | 35:db257b7bdefc | 242 | water[it].push_back(it/x_fac, row, speed, 'S'); // first type of water |
el19tb | 35:db257b7bdefc | 243 | state++; // transition to state 3 |
el19tb | 35:db257b7bdefc | 244 | break; |
el19tb | 35:db257b7bdefc | 245 | case 3: |
el19tb | 35:db257b7bdefc | 246 | water[it].push_back(it/x_fac, row, speed, 'T'); // first type of water |
el19tb | 35:db257b7bdefc | 247 | state = 1; // back to start state |
el19tb | 35:db257b7bdefc | 248 | break; |
el19tb | 35:db257b7bdefc | 249 | } |
el19tb | 35:db257b7bdefc | 250 | } |
el19tb | 35:db257b7bdefc | 251 | } |
el19tb | 35:db257b7bdefc | 252 | |
el19tb | 35:db257b7bdefc | 253 | // moves the water based on the velocity |
el19tb | 37:65c9e5a65738 | 254 | void Frogger::moveWater(std::vector<Water>& water_lanes) |
el19tb | 35:db257b7bdefc | 255 | { |
el19tb | 35:db257b7bdefc | 256 | for(unsigned int i = 0; i < water_lanes.size(); i++) |
el19tb | 35:db257b7bdefc | 257 | { |
el19tb | 35:db257b7bdefc | 258 | if(water_lanes(i).speed > 0){ |
el19tb | 35:db257b7bdefc | 259 | water_lanes(i).x += speed; |
el19tb | 35:db257b7bdefc | 260 | } else { |
el19tb | 35:db257b7bdefc | 261 | water_lanes(i).x -= speed; |
el19tb | 35:db257b7bdefc | 262 | } |
el19tb | 35:db257b7bdefc | 263 | } |
el19tb | 35:db257b7bdefc | 264 | |
el19tb | 35:db257b7bdefc | 265 | loopWater(water_lanes); |
el19tb | 35:db257b7bdefc | 266 | } |
el19tb | 35:db257b7bdefc | 267 | |
el19tb | 35:db257b7bdefc | 268 | |
el19tb | 37:65c9e5a65738 | 269 | void Frogger::loopWater(std::vector<Water>& water_lanes) |
el19tb | 35:db257b7bdefc | 270 | { |
el19tb | 35:db257b7bdefc | 271 | for(unsigned int i = 0; i < water_lanes.size(); i++) |
el19tb | 35:db257b7bdefc | 272 | { |
el19tb | 35:db257b7bdefc | 273 | if(water_lanes(i).x > 84+grid){ |
el19tb | 35:db257b7bdefc | 274 | water_lanes(i).x = -4; |
el19tb | 35:db257b7bdefc | 275 | } else if(water_lanes[i].x < -4){ |
el19tb | 35:db257b7bdefc | 276 | water_lanes(i).x = 84 + grid; |
el19tb | 35:db257b7bdefc | 277 | } |
el19tb | 35:db257b7bdefc | 278 | } |
el19tb | 35:db257b7bdefc | 279 | } |
el19tb | 35:db257b7bdefc | 280 | |
el19tb | 37:65c9e5a65738 | 281 | void Frogger::drawWater() |
el19tb | 35:db257b7bdefc | 282 | { |
el19tb | 35:db257b7bdefc | 283 | graphics.drawWater(water); |
el19tb | 35:db257b7bdefc | 284 | } |
el19tb | 35:db257b7bdefc | 285 | |
el19tb | 37:65c9e5a65738 | 286 | void Frogger::drawEndPost() |
el19tb | 35:db257b7bdefc | 287 | { |
el19tb | 35:db257b7bdefc | 288 | graphics.drawGoal(84/2)-grid/2, 48-grid*11); |
el19tb | 35:db257b7bdefc | 289 | } |
el19tb | 35:db257b7bdefc | 290 | |
el19tb | 35:db257b7bdefc | 291 | // make the frog move same speed as log |
el19tb | 35:db257b7bdefc | 292 | // if the frog moves then detach |
el19tb | 37:65c9e5a65738 | 293 | void Frogger::frogOnLog(Car *log) { |
el19tb | 35:db257b7bdefc | 294 | if(log->seperation != 0){ |
el19tb | 35:db257b7bdefc | 295 | chicken.x += 1.0; |
el19tb | 35:db257b7bdefc | 296 | } |
el19tb | 35:db257b7bdefc | 297 | } |
el19tb | 35:db257b7bdefc | 298 | |
el19tb | 35:db257b7bdefc | 299 | //moves the chicken around the grid |
el19tb | 37:65c9e5a65738 | 300 | void Frogger::moveChicken(int xWay, int yWay){ |
el19tb | 35:db257b7bdefc | 301 | //increment the left side of the chicken by a value of the grid size |
el19tb | 35:db257b7bdefc | 302 | chicken.x += xWay * 4; |
el19tb | 35:db257b7bdefc | 303 | |
el19tb | 35:db257b7bdefc | 304 | //increment the top side by a value of grid sizw |
el19tb | 35:db257b7bdefc | 305 | chicken.y += yWay * 4; |
el19tb | 35:db257b7bdefc | 306 | |
el19tb | 35:db257b7bdefc | 307 | chicken.left_side = chicken.x; |
el19tb | 35:db257b7bdefc | 308 | chicken.right_side = grid + chicken.x; |
el19tb | 35:db257b7bdefc | 309 | chicken.up = chicken.y; |
el19tb | 35:db257b7bdefc | 310 | chicken.down = grid + chicken.y; |
el19tb | 41:6267c66953ca | 311 | |
el19tb | 35:db257b7bdefc | 312 | } |
el19tb | 35:db257b7bdefc | 313 | |
el19tb | 37:65c9e5a65738 | 314 | void Frogger::moveCar(Car *car, int dir, int x) { |
el19tb | 35:db257b7bdefc | 315 | car->speedMedium(dir, x); |
el19tb | 35:db257b7bdefc | 316 | |
el19tb | 35:db257b7bdefc | 317 | // check if car goes out of bounds |
el19tb | 35:db257b7bdefc | 318 | if(car->vehicle.x > 84+grid){ |
el19tb | 35:db257b7bdefc | 319 | car->vehicle.x = -4; |
el19tb | 35:db257b7bdefc | 320 | |
el19tb | 35:db257b7bdefc | 321 | } else if(car->vehicle.x < -4){ |
el19tb | 35:db257b7bdefc | 322 | car->vehicle.x = 84 + grid; |
el19tb | 35:db257b7bdefc | 323 | } |
el19tb | 35:db257b7bdefc | 324 | } |
el19tb | 35:db257b7bdefc | 325 | |
el19tb | 35:db257b7bdefc | 326 | // debug |
el19tb | 37:65c9e5a65738 | 327 | void Frogger::setCollision(Car *car){ |
el19tb | 35:db257b7bdefc | 328 | |
el19tb | 35:db257b7bdefc | 329 | float other_bottom = car->vehicle.height + car->vehicle.y; |
el19tb | 41:6267c66953ca | 330 | |
el19tb | 35:db257b7bdefc | 331 | if(!(chicken.up >= other_bottom || |
el19tb | 35:db257b7bdefc | 332 | (chicken.right_side <= car->vehicle.x) || |
el19tb | 35:db257b7bdefc | 333 | (chicken.down <= car->vehicle.y) || |
el19tb | 35:db257b7bdefc | 334 | chicken.left_side >= (car->vehicle.width + car->vehicle.x))){ |
el19tb | 35:db257b7bdefc | 335 | graphics.printTest(); |
el19tb | 35:db257b7bdefc | 336 | |
el19tb | 35:db257b7bdefc | 337 | if(chicken.y < screenH - grid*6){ |
el19tb | 35:db257b7bdefc | 338 | attach = true; |
el19tb | 35:db257b7bdefc | 339 | } else { |
el19tb | 35:db257b7bdefc | 340 | attach = false; |
el19tb | 35:db257b7bdefc | 341 | } |
el19tb | 35:db257b7bdefc | 342 | } |
el19tb | 35:db257b7bdefc | 343 | } |
el19tb | 35:db257b7bdefc | 344 | |
el19tb | 37:65c9e5a65738 | 345 | bool Frogger::returnCollision(Car* log){ |
el19tb | 35:db257b7bdefc | 346 | |
el19tb | 35:db257b7bdefc | 347 | float ob = log->vehicle.height + log->vehicle.y; |
el19tb | 35:db257b7bdefc | 348 | |
el19tb | 35:db257b7bdefc | 349 | if(!(chicken.up >= ob|| |
el19tb | 35:db257b7bdefc | 350 | (chicken.right_side <= log->vehicle.x) || |
el19tb | 35:db257b7bdefc | 351 | (chicken.down <= log->vehicle.y) || |
el19tb | 35:db257b7bdefc | 352 | chicken.left_side >= (log->vehicle.width + log->vehicle.x))){ |
el19tb | 35:db257b7bdefc | 353 | return true; |
el19tb | 35:db257b7bdefc | 354 | } |
el19tb | 35:db257b7bdefc | 355 | } |