ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Mon May 18 06:34:53 2020 +0000
Revision:
43:2cd1cfe07770
Parent:
42:04e326dcf09b
Child:
44:f02510eeb165
fixed bugs throughout program, fixed array size issue, fixed functions

Who changed what in which revision?

UserRevisionLine numberNew 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 42:04e326dcf09b 19 current_level = 1;
el19tb 37:65c9e5a65738 20 initializeParams(w, h, grid); // initialize the software parameters
el19tb 35:db257b7bdefc 21 initializeEmbeddedSystem(); // initialize the hardware paramaters
el19tb 35:db257b7bdefc 22 }
el19tb 35:db257b7bdefc 23
el19tb 37:65c9e5a65738 24 void Frogger::initializeParams(int w, int h, int grid)
el19tb 35:db257b7bdefc 25 {
el19tb 35:db257b7bdefc 26 // screen sizes
el19tb 37:65c9e5a65738 27 lcd_w = w; // width
el19tb 37:65c9e5a65738 28 lcd_h = h; // height
el19tb 35:db257b7bdefc 29
el19tb 35:db257b7bdefc 30 // grid values
el19tb 35:db257b7bdefc 31 grid = 4; // size of game grid system
el19tb 35:db257b7bdefc 32 grid_width = 22; // size of screen width in grid units
el19tb 35:db257b7bdefc 33 }
el19tb 35:db257b7bdefc 34
el19tb 37:65c9e5a65738 35 void Frogger::initializeLevelTwo()
el19tb 37:65c9e5a65738 36 {
el19tb 37:65c9e5a65738 37 level->setupLevelTwo();
el19tb 37:65c9e5a65738 38 }
el19tb 37:65c9e5a65738 39
el19tb 35:db257b7bdefc 40 void Frogger::initializeEmbeddedSystem()
el19tb 35:db257b7bdefc 41 {
el19tb 35:db257b7bdefc 42 //game setup
el19tb 42:04e326dcf09b 43 graphics->init(); // initialize the LCD object
el19tb 42:04e326dcf09b 44 graphics->contrast(); // set the contrast to 0.4
el19tb 42:04e326dcf09b 45 graphics->backLightOn(); // turn on the backlight
el19tb 42:04e326dcf09b 46
el19tb 42:04e326dcf09b 47 gamepad.init(); // initialize the actual embedded system
el19tb 42:04e326dcf09b 48 }
el19tb 42:04e326dcf09b 49
el19tb 42:04e326dcf09b 50 //main function that starts the game
el19tb 42:04e326dcf09b 51 void Frogger::start()
el19tb 42:04e326dcf09b 52 {
el19tb 42:04e326dcf09b 53 //keep reading and processing user input
el19tb 42:04e326dcf09b 54 while(1) {
el19tb 42:04e326dcf09b 55 graphics->clear(); // clear the lcd screen
el19tb 42:04e326dcf09b 56
el19tb 42:04e326dcf09b 57 runCurrentLevel(); // add velocity to level vehicles and logs
el19tb 42:04e326dcf09b 58
el19tb 43:2cd1cfe07770 59 graphics->drawSafetyLanes();
el19tb 43:2cd1cfe07770 60 graphics->showFrog(frog->x, frog->y, frog->width, 4); // display current position of frog
el19tb 42:04e326dcf09b 61 process_input(); // user controls the frog object
el19tb 42:04e326dcf09b 62
el19tb 42:04e326dcf09b 63 checkCurrentLevelCollision(); // check if the frog is alive
el19tb 43:2cd1cfe07770 64 level->checkFrogOnWater(); // check if the frog is in the water level
el19tb 42:04e326dcf09b 65
el19tb 42:04e326dcf09b 66 graphics->refresh(); // refresh the lcd screen
el19tb 42:04e326dcf09b 67
el19tb 42:04e326dcf09b 68 wait_ms(75); // fpms
el19tb 42:04e326dcf09b 69 }
el19tb 35:db257b7bdefc 70 }
el19tb 35:db257b7bdefc 71
el19tb 37:65c9e5a65738 72 void Frogger::runCurrentLevel()
el19tb 37:65c9e5a65738 73 {
el19tb 42:04e326dcf09b 74 switch (current_level)
el19tb 37:65c9e5a65738 75 {
el19tb 37:65c9e5a65738 76 case 1:
el19tb 37:65c9e5a65738 77 level->levelOne();
el19tb 37:65c9e5a65738 78 break;
el19tb 37:65c9e5a65738 79 case 2:
el19tb 37:65c9e5a65738 80 level->levelTwo();
el19tb 37:65c9e5a65738 81 break;
el19tb 37:65c9e5a65738 82 }
el19tb 37:65c9e5a65738 83 }
el19tb 37:65c9e5a65738 84
el19tb 41:6267c66953ca 85 void Frogger::checkCurrentLevelCollision()
el19tb 41:6267c66953ca 86 {
el19tb 41:6267c66953ca 87 switch (current_level)
el19tb 41:6267c66953ca 88 {
el19tb 41:6267c66953ca 89 case 1:
el19tb 41:6267c66953ca 90 level->levelOneCollision();
el19tb 41:6267c66953ca 91 break;
el19tb 41:6267c66953ca 92 case 2:
el19tb 41:6267c66953ca 93 level->levelTwoCollision();
el19tb 41:6267c66953ca 94 break;
el19tb 41:6267c66953ca 95 }
el19tb 41:6267c66953ca 96 }
el19tb 41:6267c66953ca 97
el19tb 37:65c9e5a65738 98 void Frogger::process_input() {
el19tb 35:db257b7bdefc 99 //determine the input
el19tb 35:db257b7bdefc 100 /* make this a switch statement */
el19tb 35:db257b7bdefc 101 if(gamepad.A_pressed()){
el19tb 42:04e326dcf09b 102 moveFrog(1,0);
el19tb 41:6267c66953ca 103 level->frogOnLog = false;
el19tb 35:db257b7bdefc 104 } else if(gamepad.X_pressed()){
el19tb 42:04e326dcf09b 105 moveFrog(0,-1);
el19tb 41:6267c66953ca 106 level->frogOnLog = false;
el19tb 35:db257b7bdefc 107 } else if(gamepad.B_pressed()){
el19tb 42:04e326dcf09b 108 moveFrog(0,1);
el19tb 41:6267c66953ca 109 level->frogOnLog = false;
el19tb 35:db257b7bdefc 110 } else if(gamepad.Y_pressed()){
el19tb 42:04e326dcf09b 111 moveFrog(-1,0);
el19tb 41:6267c66953ca 112 level->frogOnLog = false;
el19tb 35:db257b7bdefc 113 }
el19tb 35:db257b7bdefc 114 }
el19tb 35:db257b7bdefc 115
el19tb 42:04e326dcf09b 116 //moves the frog around the grid
el19tb 42:04e326dcf09b 117 void Frogger::moveFrog(int xWay, int yWay)
el19tb 35:db257b7bdefc 118 {
el19tb 42:04e326dcf09b 119 //increment the left side of the chicken by a value of the grid size
el19tb 42:04e326dcf09b 120 frog->x += xWay * 4;
el19tb 42:04e326dcf09b 121
el19tb 42:04e326dcf09b 122 //increment the top side by a value of grid sizw
el19tb 42:04e326dcf09b 123 frog->y += yWay * 4;
el19tb 35:db257b7bdefc 124
el19tb 42:04e326dcf09b 125 // change rect parameters
el19tb 42:04e326dcf09b 126 frog->left_side = frog->x;
el19tb 42:04e326dcf09b 127 frog->right_side = grid + frog->x;
el19tb 42:04e326dcf09b 128 frog->up = frog->y;
el19tb 42:04e326dcf09b 129 frog->down = grid + frog->y;
el19tb 42:04e326dcf09b 130 }
el19tb 42:04e326dcf09b 131
el19tb 42:04e326dcf09b 132 void Frogger::createGoalPost()
el19tb 42:04e326dcf09b 133 {
el19tb 42:04e326dcf09b 134 //graphics->drawGoalPost();
el19tb 35:db257b7bdefc 135 }
el19tb 35:db257b7bdefc 136
el19tb 42:04e326dcf09b 137
el19tb 42:04e326dcf09b 138