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
Diff: Frogger/Frogger.cpp
- Revision:
- 50:9ffeb4a10c0a
- Parent:
- 49:6cad8b6ec5f2
- Child:
- 51:4c1f49729d88
--- a/Frogger/Frogger.cpp Sun May 24 02:30:49 2020 +0000 +++ b/Frogger/Frogger.cpp Mon May 25 02:18:57 2020 +0000 @@ -9,6 +9,15 @@ initializeParams(w, h, grid); // initialize the software parameters initializeEmbeddedSystem(); // initialize the hardware paramaters setupLevelOne(); + + intro.selection = 0; + intro.tutorial_screens = 0; + + introScreen = true; + nextLevel = false; + play_game = false; + tutorial = false; + settings = false; } GraphicEngine graphics; @@ -18,12 +27,14 @@ // screen sizes lcd_w = w; // width lcd_h = h; // height - state_frog = 0 ; + state_frog = 0; + end_post = false; water_level = 48- 4*6; // row 7 and up is the water level frogDie = false; frogOnLog = false; - + goal_post_xpos = (84/2); // generate random position for end post + next_goal = false; // grid values grid = 4; // size of game grid system grid_width = 22; // size of screen width in grid units @@ -94,33 +105,209 @@ while(1) { graphics.clear(); // clear the lcd screen - graphics.drawDangerZone(); - graphics.drawSafetyLanes(); - graphics.drawEndPost(); - process_input(); // user controls the frog object - - if(frog->y >= water_level) - { - frogDie = false; - runCurrentLevel(); // add velocity to level vehicles and logs - - } else { - frogDie = true; - runCurrentLevel(); // add velocity to level vehicles and logs + if(introScreen) { // shows tutorial, setting + graphics.getPointerPos(intro.selection); // draw the initial pointer pos + home(); // draw menu selections + } else if (play_game) { // shows actual gameplay + run(); - if(!frogOnLog){ - graphics.print(); - } - } - - graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog - + } else if(tutorial) { + gotoPage(); + + } else if(nextLevel) { + displayLevelIntro(); + } + graphics.refresh(); // refresh the lcd screen wait_ms(85); // fpms } } +void Frogger::displayLevelIntro() +{ + graphics.clear(); + graphics.newLevel1(); + wait_ms(1000); + graphics.refresh(); // refresh the lcd screen + + graphics.refresh(); // refresh the lcd screen + graphics.clear(); + graphics.newLevel2(); + wait_ms(1000); + graphics.refresh(); // refresh the lcd screen + + graphics.refresh(); // refresh the lcd screen + graphics.clear(); + graphics.newLevelIntro(); + wait_ms(1000); + graphics.refresh(); // refresh the lcd screen +} + +void Frogger::run() +{ + checkProgression(); + + drawBackGround(); + + generateLevelOneGoalPost(); + + process_input(); // user controls the frog object + + actOnFrogPos(); + + graphics.showFrog(frog->x, frog->y, frog->width, frog->height, state_frog); // display current position of frog +} + +void Frogger::checkProgression() +{ +//frog->x > 80 && frog->x < 90 && + if((frog->y == 48 - 4*11 || frog->y == 48 - 4*10)){ + exit(1); + } + +} + +/* +void Frogger::goalReached() +{ + if(!(frog->up >= goal_post->rectangle.bottom || + (frog->right_side <= goal_post->rectangle.left_side) || + (frog->down <= goal_post->rectangle.up) || + (frog->left_side >= goal_post->rectangle.right_side))) { + next_goal = true; + } +}*/ + +void Frogger::actOnFrogPos() +{ + if(frog->y >= water_level) + { + frogDie = false; + runCurrentLevel(); // add velocity to level vehicles and logs + + } else { + frogDie = true; + runCurrentLevel(); // add velocity to level vehicles and logs + + if((!frogOnLog) && frog->y != (48 - 4*10)){ + frog->reset(); + } + } +} + +void Frogger::home() +{ + determineSelection(); + graphics.drawMenu(); +} + +void Frogger::determineSelection() +{ + if(intro.selection < 2 && gamepad.B_pressed()){ + graphics.getPointerPos(intro.selection++); + + } else if(intro.selection > 0 && gamepad.X_pressed()){ + graphics.getPointerPos(intro.selection--); + } + + wait_ms(10); + + if(gamepad.A_pressed()) + { + gotoPage(); + } + +} + +void Frogger::gotoPage() +{ + switch(intro.selection) + { + case 0: + play_game = true; + + introScreen = false; + tutorial = false; + settings = false; + break; + case 1: + displayTutorial(); + play_game = false; + introScreen = false; + tutorial = true; + settings = false; + break; + case 2: + //settings(); + break; + } +} + +void Frogger::displayTutorial() +{ + wait_ms(15); + + switch(intro.tutorial_screens) + { + case 0: + graphics.drawTutor1(); + gotoNextTutorialSlide(); + break; + case 1: + graphics.drawTutor2(); + gotoNextTutorialSlide(); + break; + case 2: + graphics.drawTutor3(); + gotoNextTutorialSlide(); + break; + default: + home(); + intro.selection = 0; + } +} + +void Frogger::gotoNextTutorialSlide() +{ + if(gamepad.A_pressed()){ + intro.tutorial_screens++; + wait_ms(25); + } + + if(intro.tutorial_screens > 2){ + intro.tutorial_screens = 7; + tutorial = false; + } +} + +void Frogger::drawBackGround() +{ + graphics.drawDangerZone(); + graphics.drawSafetyLanes(); +} + +void Frogger::generateLevelOneGoalPost() +{ + //setUpGoalPost(); + graphics.drawEndPost(goal_post_xpos); +} + +/* +void Frogger::setUpGoalPost() +{ + int y = (48 - 4*11); + goal_post->rectangle.left_side = goal_post_xpos; + goal_post->rectangle.right_side = 12 + goal_post_xpos; + goal_post->rectangle.up = 8; + goal_post->rectangle.bottom = 8 + y; +} +*/ +int Frogger::randEndPost() +{ + return (rand() % 80) + 12; +} + void Frogger::process_input() { //determine the input @@ -143,6 +330,8 @@ moveFrog(-1,0); frogOnLog = false; } + + wait_ms(10); } void Frogger::drawFrogStates() @@ -234,7 +423,7 @@ { if(frog->y < water_level) // if the frog is past the safety lane { - frogDie = true; // frog will die if not on turtle/log + frogDie = true; // frog will die if not on turtle/log } else { frogDie = false; } @@ -292,21 +481,6 @@ } } -/* -void Frogger::checkCurrentLevelCollision() -{ - switch (current_level) - { - case 1: - level->levelOneCollision(); - break; - case 2: - level->levelTwoCollision(); - break; - } -} -*/ - void Frogger::checkCollison(Object object) { if(!(frog->up >= object.rectangle.bottom || @@ -314,14 +488,14 @@ (frog->down <= object.rectangle.up) || (frog->left_side >= object.rectangle.right_side))) { moveFrogWithLog(object); - checkFrogAction(object); // check to do what do with frog based on height + checkFrogAction(object); // check to do what do with frog based on height } } void Frogger::checkFrogReachedRiver() { if(frog->y < water_level) { - frogDie = true; // frog can die if it touches water + frogDie = true; // frog can die if it touches water } else { frogDie = false; } @@ -331,7 +505,7 @@ { if(frog->y < water_level) { // frog is in water zone frogOnLog = true; // moving same speed as log - //frogDie = false; + frogDie = false; } else { // frog is on the road state_frog = 0; // facing upward @@ -341,21 +515,25 @@ frogOnLog = false; frogDie = false; } + + if(frog->y == (48 - (4*10))) + { + end_post = true; + } } void Frogger::moveFrogWithLog(Object log) { - if(log.seperation != 0){ - switch (log.object.dir) - { - case 1: - frog->x += log.speed; - break; + switch (log.object.dir) + { + case 1: + frog->x += log.speed; + break; - case 2: - frog->x = frog->x - log.speed; - break; - } + case 2: + frog->x = frog->x - log.speed; + break; + } }