Kaif Kutchwala 201267448 ELEC2645 Project
Dependencies: mbed
Diff: Game/Game.cpp
- Revision:
- 17:2fbe40177b9c
- Parent:
- 16:1f196a0e12be
- Child:
- 20:c697902b844f
--- a/Game/Game.cpp Tue May 19 01:17:31 2020 +0000 +++ b/Game/Game.cpp Fri May 22 01:46:19 2020 +0000 @@ -22,57 +22,49 @@ _shot_y = 0; } void Game::play() { - updateLives(); //initial update // if all live are lost game ends - while(_lives > 0) { - _level = random_level_gen(10); //generate random level - printf("Level (in game) = %d \n", _level); - _ball->set_level(_level); //set level - readInput(); //take input - _ball->isGoal(_level, _shot_x, _shot_y); //check if goal - _is_goal = _ball->get_goal(); - //goal scored + while(_lives > 0) { + updateSpeed(); + updateLives(); + updateLevel(); + readInput(); if(_is_goal) { _score++; } - //goal missed else { // ball should not go through obstacle hence y value limited to 21 // this is done after calculations to ensure accurate results - if(_shot_y >= 6) { _shot_y = 21; } + if(_shot_y >= 9) { _shot_y = 21; } _lives--; } _ball->playShot(_shot_x, _shot_y); print_goal_message((int)_is_goal); - updateSpeed(); - updateLives(); if(_score > _highscore) { set_highscore(_score); } } _pad->leds(0.0); //turn of all leds } void Game::readInput() { - _pad->reset_buttons(); //forced debounce + _pad->reset_buttons(); //forced debounce/reset _x_val = 42; //reset x_val _y_val = 0; //reset y_val while(!_pad->A_pressed()) { pointer_input(); } - _pad->reset_buttons(); //forced debounce - wait(0.1); + _pad->reset_buttons(); //forced debounce/reset while(!_pad->B_pressed()) { power_meter_input(); } - wait(0.1); convert_to_shot_x(); convert_to_shot_y(); + _is_goal = _ball->isGoal(_level, _shot_x, _shot_y); printf("x val = %.2f \n",_x_val); printf("shot_x val = %d \n",_shot_x); printf("y val = %.2f \n",_y_val); printf("shot_y val = %d \n",_shot_y); - } void Game::updateLives() { + int val [6] = {0,0,0,0,0,0}; // +1 life if score hits a multiple of 5 provided less than 3 lives left //update threshold so lives don't increase if score stays same if(_score % 5 == 0 && _score != _new_lives_threshold && _lives != 3) { @@ -80,27 +72,23 @@ _new_lives_threshold = _score; } printf("Lives = %d \n", _lives); - _pad->leds(0.0); switch(_lives){ case 0: break; - case 1: - _pad->led(1,1.0); //red leds only - _pad->led(4,1.0); + case 1: //red leds only + val[0] = val[3] = 1; break; - case 2: - _pad->led(1,1.0); //red and yellow leds - _pad->led(2,1.0); - _pad->led(4,1.0); - _pad->led(5,1.0); + case 2: //red and yellow leds + val[0] = val[1] = val[3] = val[4] = 1; break; - case 3: - _pad->leds(1.0); + case 3: //all leds on + for (int i = 0; i < 6; i++) {val[i] = 1;} break; default: error("Invalid Number of Lives"); break; } + updateLeds(val); } void Game::updateScore() { char buffer[12]; @@ -108,7 +96,7 @@ _lcd->printString(buffer,2,5); } void Game::updateSpeed() { - if(abs(_speed) <= 2) { // max speed = 1 + if(abs(_speed) <= 3) { // max speed = 3 if(_score % 3 == 0 && _score != _new_speed_threshold) { _speed = abs(_speed) + 0.20f; //update threshold so speed does not increase if score stays same @@ -118,6 +106,19 @@ printf("speed = %.2f \n", _speed); printf("score = %d \n", _score); } +void Game::updateLevel() { + _level = random_level_gen(10); //generate random level + _ball->set_level(_level); //set level + printf("Level (in game) = %d \n", _level); +} +void Game::updateLeds( int val[6]) { + _pad->led(1,val[0]); + _pad->led(2,val[1]); + _pad->led(3,val[2]); + _pad->led(4,val[3]); + _pad->led(5,val[4]); + _pad->led(6,val[5]); +} void Game::set_highscore (int score) { _highscore = score; } @@ -164,13 +165,12 @@ //convert from range 12-70 (range of pointer) to 0-84 (range of screen) _shot_x = ((((int)_x_val - 12) * (84)) / (70 - 12)); //ball misses goal completely - if(_shot_x <=7) { _shot_x = -20;} - else if(_shot_x >=77) { _shot_x = 104;} + if(_shot_x <=7) { _shot_x = 0;} + else if(_shot_x >=77) { _shot_x = 84;} } void Game::convert_to_shot_y() { _shot_y = ((((int)_y_val) * (24)) / (20)); - if(_shot_y <= 2) {_shot_y = -6; } //shot too high - else if (_shot_y >= 19) {_shot_y = 19; }//shot is low, but must enter goal + if (_shot_y >= 19) {_shot_y = 19; }//shot is low, but must enter goal } int Game::random_level_gen(int limit) { int number = (rand() % limit) + 1; //random level between 1-10 @@ -179,7 +179,7 @@ void Game::print_goal_message(int n) { _ball->displayBackground(); _lcd->drawRect(0,14,84,11,FILL_WHITE);//white background - _lcd->drawRect(0,14,84,11,FILL_TRANSPARENT);//white background + _lcd->drawRect(0,14,84,11,FILL_TRANSPARENT);//black outline switch(n) { case 0: