Finish pong game (initial)
authorwatkinsr <ryanwatkins54@gmail.com>
Thu, 18 Jun 2020 14:24:04 +0000 (15:24 +0100)
committerwatkinsr <ryanwatkins54@gmail.com>
Thu, 18 Jun 2020 14:24:04 +0000 (15:24 +0100)
game.cpp

index e41c8ac3ec5432c2696043ac9e9cde815fdbc35f..40860f3a6977abd712c4732cb20455ddd7bfd26f 100755 (executable)
--- a/game.cpp
+++ b/game.cpp
@@ -77,11 +77,13 @@ class Dot
     Dot(float x, float y, float velX, float velY, Uint8 w, Uint8 h);
 
                //Moves the dot
-               void move( SDL_Rect& paddle1 );
+               void move( SDL_Rect& paddle1, SDL_Rect& paddle2 );
 
                //Shows the dot on the screen
                void render();
 
+               float getY();
+
                void reset();
 
                Circle& getCollider();
@@ -115,6 +117,8 @@ class Paddle
                //Takes key presses and adjusts the dot's velocity
                void handleEvent( SDL_Event& e );
 
+               void autoMove(float ballY);
+
                void move();
                void render();
 
@@ -354,7 +358,12 @@ Dot::Dot(float x, float y, float velX, float velY, Uint8 w, Uint8 h)
     shiftColliders();
 }
 
-void Dot::move( SDL_Rect& paddle1)
+float Dot::getY()
+{
+  return mPosY;
+}
+
+void Dot::move( SDL_Rect& paddle1, SDL_Rect& paddle2 )
 {
   //Move the dot left or right
 
@@ -366,6 +375,14 @@ void Dot::move( SDL_Rect& paddle1)
        printf("amount: %f, mVelX: %f, mVelY: %f paddle1.y: %d, paddle1.h: %d, mPosY: %f\n", 
                amount, mVelX, mVelY, paddle1.y, paddle1.h, mPosY);
   }
+  if (checkCollision(mCollider, paddle2))
+  {
+       float amount = (mPosY - (paddle2.y + (paddle2.h/2))) / 10;
+       mVelX = -mVelX;
+       mVelY = amount;
+       printf("amount: %f, mVelX: %f, mVelY: %f paddle1.y: %d, paddle1.h: %d, mPosY: %f\n", 
+               amount, mVelX, mVelY, paddle2.y, paddle2.h, mPosY);
+  }
 
   //If the dot collided or went too far to the left or right
   if( ( mPosX - mCollider.r < 0 ) || ( mPosX + mCollider.r > SCREEN_WIDTH ) )
@@ -539,6 +556,26 @@ void Paddle::move()
     }
 }
 
+void Paddle::autoMove(float ballY)
+{
+               // if the ball is above the paddle
+               if (ballY < p.y)
+               mVelY = -(PADDLE_VEL);
+               else
+               mVelY = (PADDLE_VEL);
+
+               p.y += mVelY;
+
+    //If the dot went too far up or down
+    if( ( p.y < 0 ) || ( p.y + p.h > SCREEN_HEIGHT ) )
+    {
+        //Move back
+        p.y -= mVelY;
+    }
+
+    printf("autoMove: mVelY: %d\n", mVelY);
+}
+
 void Paddle::render()
 {
     //Show the dot
@@ -664,7 +701,11 @@ void close()
 
 int main( int argc, char* args[] )
 {
-       //Start up SDL and create window
+
+  int aiFrameMoveCount = 0;
+  const int AI_MOVE_AFTER = 4;
+
+//Start up SDL and create window
        if( !init() )
        {
                printf( "Failed to initialize!\n" );
@@ -708,8 +749,13 @@ int main( int argc, char* args[] )
 
                                //Move the dot
                                paddle.move();
-                               ai.move();
-                               ball.move(paddle.getCollider());
+                               if (aiFrameMoveCount == AI_MOVE_AFTER) {
+                                       ai.autoMove(ball.getY());
+                                       aiFrameMoveCount = 0;
+                               } else {
+                               aiFrameMoveCount++;
+        }
+                               ball.move(paddle.getCollider(), ai.getCollider());
 
                                //Clear screen
                                SDL_SetRenderDrawColor( gRenderer, 0x00, 0x00, 0x00, 0xFF );