ELEC2645 (2018/19) / Mbed 2 deprecated el17ebs

Dependencies:   mbed FATFileSystem

Revision:
5:0b31909caf7f
Parent:
4:035448357749
Child:
8:d410856c6d04
diff -r 035448357749 -r 0b31909caf7f Ball/Ball.cpp
--- a/Ball/Ball.cpp	Mon Apr 08 15:10:28 2019 +0000
+++ b/Ball/Ball.cpp	Wed Apr 17 10:27:09 2019 +0000
@@ -26,38 +26,33 @@
 
 }
 
-void Ball::draw_ball(N5110 &lcd)
+void Ball::drawBall(N5110 &lcd)
 {
-    lcd.drawRect(_x_pos,_y_pos,3,3,FILL_BLACK); //draws ball 
+    lcd.drawRect(_x_pos,_y_pos,2,2,FILL_BLACK); //draws ball 
 }
 
-void Ball::draw_aim(N5110 &lcd, Gamepad &pad)
+void Ball::printShotCount(N5110 &lcd) 
 {
-    read_joy(pad);
-    lcd.drawLine((_x_pos+1.0f),(_y_pos+1.0f),(_x_pos+1.0f)+(_joystick.x*16.0f),(_y_pos+1.0f)-(_joystick.y*16.0f),1); //draws ball 
+    char buffer[14];
+    sprintf(buffer,"Shot %i",_shot_count);
+    lcd.printString(buffer,40,0);      
 }
 
-void Ball::draw_course(N5110 &lcd) 
-{
-    lcd.drawRect(0,16,83,32,FILL_TRANSPARENT);    
+void Ball::drawPower(N5110 &lcd, Gamepad &pad)
+{     
+
+    _mag = pad.get_mag();
+    lcd.drawRect(0,0,36,6,FILL_TRANSPARENT);
+    lcd.drawRect(0,0,36*_mag,6,FILL_BLACK);
 }
 
-void Ball::draw_screen(N5110 &lcd, Gamepad &pad) {
-    
-    draw_course(lcd);
-    draw_ball(lcd);
-    draw_aim(lcd, pad);
-    print_shot_count(lcd); 
-}
 
-void Ball::move_ball(int frame_rate, N5110 &lcd)
+void Ball::move_ball(int frame_rate)
 {
-    check_bounce(lcd);
     _x_pos = _x_pos + _x_vel*10.0f/frame_rate; //frame_rate used to scale ball movement so that it is the same for any fps  
     _y_pos = _y_pos + _y_vel*10.0f/frame_rate;   
     _x_vel = _x_vel*(1.0f-(0.8f/frame_rate)); //ball slows down 10% each loop (scaled by time between frames)
     _y_vel = _y_vel*(1.0f-(0.8f/frame_rate));
-    check_bounce(lcd);
   
 }
 
@@ -68,13 +63,13 @@
 }
 
 void Ball::shoot_ball(Gamepad &pad)
-{
+{    
+    _joystick = pad.get_mapped_coord();
     
     if(pad.check_event(Gamepad::A_PRESSED) == true && abs(_x_vel) < 0.05f && abs(_y_vel) < 0.05f){ //if ball stationary and a pressed then shoot
-    _x_vel = 8.0f * _joystick.x; //scale x velocity by joystick direction and magnitude
-    _y_vel = 8.0f * -_joystick.y; //scale y velocity by joystick direction and magnitude
-    _shot_count ++; //increment shot count
-    
+        _x_vel = 8.0f * _joystick.x; //scale x velocity by joystick direction and magnitude
+        _y_vel = 8.0f * -_joystick.y; //scale y velocity by joystick direction and magnitude
+        _shot_count ++; //increment shot count
     }
 
 }
@@ -85,42 +80,12 @@
     return shot_count;
 }
 
-void Ball::print_shot_count(N5110 &lcd) 
-{
-    char buffer[14];
-    sprintf(buffer,"Shot Count = %i",_shot_count);
-    lcd.printString(buffer,0,0);      
-}
-
 void Ball::set_vel(float x_vel, float y_vel) 
 {
     _x_vel = x_vel;
     _y_vel = y_vel;
 }
 
-void Ball::check_bounce(N5110 &lcd) 
-{
-    
-    if(_x_pos - 1 < 0 ) { //
-        _x_pos = 1;
-        _x_vel = -_x_vel;
-    } 
-    else if(_y_pos + 3 > 48) {
-        _y_pos = 45;
-        _y_vel = -_y_vel;
-    }
-    else if(_x_pos + 3 > 83 ) { 
-        _x_pos = 80;
-        _x_vel = -_x_vel;
-    } 
-    else if(_y_pos - 1 < 16) {
-        _y_pos = 17;
-        _y_vel = -_y_vel;
-    }
-    
-    
-}
-
 void Ball::read_joy(Gamepad &pad)
 {
                                     
@@ -128,5 +93,33 @@
 
     
 }
+
+void Ball::check_wall_bounce() //check before and after move_ball called
+{
+    if(_x_pos - 1 < 9 && _y_pos >= 26 && _y_pos <= 40 && _x_vel < 0){ // left wall (x=9 ,26<=y<=40)
+        _x_pos = 10;
+        _x_vel = -0.95f*_x_vel; //5% velocity lost on impact and bounce
+    }     
+    if(_x_pos + 1 > 74 && _y_pos <= 40 && _y_pos >= 9 && _x_vel > 0){ //right wall x + 1
+        _x_pos = 72;
+        _x_vel = -0.95f*_x_vel;
+    }
+    if(_y_pos - 1 < 9 && _x_pos <= 74 && _x_pos >= 50 && _y_vel < 0){ //top wall y -1
+        _y_pos = 10;
+        _y_vel = -0.95f*_y_vel;
+    }
+    if(_y_pos + 1 > 40 && _x_pos >= 9 && _x_pos <= 74 && _y_vel > 0){ //bottom wall y  + 2
+        _y_pos = 39;
+        _y_vel = -0.95f*_y_vel;
+    }
+    if(_x_pos - 1 < 50 && _y_pos >= 9 && _y_pos <= 26 && _x_vel < 0){ // left wall x -1
+        _x_pos = 51;
+        _x_vel = -0.95f*_x_vel; //5% velocity lost on impact and bounce
+    }     
+    if(_y_pos - 1 < 26 && _x_pos <= 50 && _x_pos >= 9 && _y_vel < 0 ){ //top wall y -1
+        _y_pos = 27;
+        _y_vel = -0.95f*_y_vel;
+    }
+}
 //private methods