Kaif Kutchwala 201267448 ELEC2645 Project

Dependencies:   mbed

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: