това е прост метод за удряне в стени, май като твоето
сравни ги и виж да не си допуснал някоя грешка някъде

public void Move()
{
// If we'll move out of the screen, invert velocity
// Checking right boundary
if (position.X + size.X + velocity.X > screenSize.X)
velocity = new Vector2(-velocity.X, velocity.Y);
// Checking bottom boundary
if (position.Y + size.Y + velocity.Y > screenSize.Y)
velocity = new Vector2(velocity.X, -velocity.Y);
// Checking left boundary
if (position.X + velocity.X < 0)
velocity = new Vector2(-velocity.X, velocity.Y);
// Checking upper boundary
if (position.Y + velocity.Y < 0)
velocity = new Vector2(velocity.X, -velocity.Y);
// Since we adjusted the velocity, just add it to the current position
position += velocity;
}