Here are some suggestions that might help.
First of all, all your objects, such as Player , Bal (not sure what it is), and Brick have a somewhat similar interface - they all have sprite (determining the size of the object), rect (bounding box of the object), position (current position), velocity (current speed). This suggests that you can create a common base class to encapsulate this function.
Also note that you always re-read rect based on current position and sprite . This suggests that rect should actually be a property that hides the recount (which is always the same!)
So, you can start by defining a common base class like this (I will follow the standard .NET coding standard and use CamelCase properties and names):
class GameObject { Point Position { get; set; } Vector Velocity { get; set; } Sprite Sprite { get; set; } Rectangle Rect { get {
If you are now using this type as a base class for all of your game objects, you should be able to write this:
protected void Collision() { #region Boundaries if (bal.Position.X + bal.Velocity.X >= viewportRect.Width || bal.Position.X + bal.Velocity.X <= 0) bal.Velocity.X *= -1; if (bal.Position.Y + bal.Velocity.Y <= 0) bal.Velocity.Y *= -1; #endregion if (bal.Rect.Intersects(player.Rect)) { bal.Position.Y = player.Position.Y - player.Sprite.Height/2 - bal.Sprite.Height/2; if (player.Position.X != player.PrevPos.X) bal.Velocity.X -= (player.PrevPos.X - player.Position.X) / 2; bal.Velocity.Y *= -1; } foreach (Brick b in brickArray.list) { if (bal.Rect.Intersects(b.Rect)) { b.RecieveHit(); bal.Velocity.Y *= -1; } } brickArray.RemoveDead(); }
It's also nice to split a function between two - one that checks Bal and Player , and the other that checks bricks.
source share