• Advertisement
Sign in to follow this  

Code Help - Pong Game

This topic is 1925 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

(I misposted this is in general, this is should have been posted in For Beginners)

I know what I want to do, but I am unsure how to do it. I want to have my ComputerPaddle Sprite Update it's location based on the position of my Ball Sprite. Code-wise I am not sure on how to allow my ComputerPaddle class to acess the postion of the ball class.
NOTE: Please don't tell me excatly how to do it, please drop hints/tips. I learn better if I have but together myself, but a point in the right direction is always nice.
---------------------------
Computer Paddle Class
[source lang="csharp"]class ComputerPaddle : BasePaddle
{
//Speed of the paddle
float paddleSpeed = 15;

public ComputerPaddle(Texture2D texture, Rectangle screenBounds, Vector2 direction, Vector2 position)
: base(texture, screenBounds, direction, position)
{
this.texture = texture;
this.screenBounds = screenBounds;
}
public override void Update()
{
//Use the location of the ball to move the paddle up and down
// in the Y direction, toward Y value of the ball
}
}[/source]
------------------------------------------
My Ball Class
[source lang="csharp"] class Ball
{
//The position of the ball
Vector2 position;
//Motion of the ball
Vector2 motion;
//speed of the ball
float ballSpeed = 2;
//Texture For the ball
Texture2D texture;
//Collision rectangle for the ball
Rectangle screenBounds;
//Ball Constructor
public Ball(Texture2D texture, Rectangle screenBounds)
{
this.texture = texture;
this.screenBounds = screenBounds;
}
//Update Method for the ball
public void Update()
{
position += ballSpeed * motion;
CheckForCollisonWithTop();
}
//Any time ball collides with the bounds of the window increase the speed of the ball 1 point.
//Any time ball collides with the bounds of the window change the directoin of the motion in the Y direction
public void CheckForCollisonWithTop()
{
if (position.Y < 0)
{
position.Y = 0;
motion.Y *= -1;
ballSpeed += 1;
}
if (position.Y + texture.Height > screenBounds.Height)
{
position.Y = screenBounds.Height - texture.Height;
motion.Y *= -1;
ballSpeed += 1;
}
}
public bool BehindPaddle()
{
if (position.X > screenBounds.Width || position.X < 0)
{
return true;
}
return false;
}
public void CheckForCollisionWithPaddle(Rectangle paddleLocation)
{
Rectangle ballLocation = new Rectangle(
(int)position.X, (int)position.Y, texture.Width, texture.Height);
if (paddleLocation.Intersects(ballLocation))
{
position.X = paddleLocation.X - texture.Width;
motion.X *= -1;
}
}
public void SetInStartPosition()
{
motion = new Vector2(1, -1);
position.X = (screenBounds.Width - texture.Width) / 2;
position.Y = (screenBounds.Height - texture.Height) / 2;
RestartBallSpeed();
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(texture, position, Color.White);
}
public void RestartBallSpeed()
{
ballSpeed = 2;
}
}[/source]
-------------------------------------------
Like I said I think there is a way for me to acess the postion of the ball but I don't know how. Any help would be very much appreciated. I think I can do something similar to my CheckForCollisionWithPaddle() Method. I just need a little but of a push start.

Share this post


Link to post
Share on other sites
Advertisement
why don't you make something like GameManager class that has both ball and paddle as members and it will handle the collision ?! there are other ways to do it of course :)

Share this post


Link to post
Share on other sites
Why not just keep two classes, one for Paddle and one for the Ball.

Ball.Check_Collision(Player_Paddle.Get_Bounding_Box_Top(), Player_Paddle.Get_Bounding_Box_Bottom(), Player_Paddle.Get_Bounding_Box_Left(), Player_Paddle.Get_Bounding_Box_Right());

The above assumes bounding box collision.

You could also just have a function for collision in your logic code, and pass both the Paddle and Ball into that function to find out if a collision is true. If so, then you have the ball, and game do whatever it's supposed to do after.

There are many ways to do this, but don't try to complicate something that is simple.

Share this post


Link to post
Share on other sites
I am not getting get and sets. I Have a Get BallPosition in my ball class but I don't know how to have my ComputerPaddle access it.
------------ MY Get for Ball Position in the ball Class --------------
[source lang="csharp"] public Vector2 GetPosition
{
get
{
return position;
}
}[/source]

Now how do I get my ComputerPaddle Access this value?

Share this post


Link to post
Share on other sites
Not sure why you're doing it that way... This is very simple thing to program.

Make a function that returns the value of your Ball's Position.


int Ball::Ball_X_Position()
{
return x;
}


Then have a function for your Paddle which can read that position.

Paddle.Paddle_Function(Ball.Ball_X_Position());

Just have whatever you need done occur after positions have been read.

You don't need to use Get and Set.

Share this post


Link to post
Share on other sites
C# uses functions like C++ does. Since C# uses classes, you have functions in those classes.

For example:


using System;

class Ball
{
private int x, y;

// Constructor
public Ball(int Temp_X, int Temp_Y)
{
x = Temp_X;
y = Temp_Y;
}

// Destructor
~Ball(){}

// Get X
public int Get_X()
{
return x;
}
}


Just a basic example. Edited by Black-Rook

Share this post


Link to post
Share on other sites
You make a method which returns the position of object a, then object b has a method which reads the positions of object a and compares itself with those positions, then follows through with the appropriate actions.

I explained how to do this six posts above.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement