Code:
void Game::CheckWalls()
{
if (m_pball.x>=walls.right || m_pball.x<=walls.left) m_pball.vx*=-1.0f;
if (m_pball.y>=walls.bottom || m_pball.y<=walls.top) m_pball.vy*=-1.0f;
}
void Game::UpdateBall(float fFrameDelta)
{
m_pBall.x+=(m_pBall.vx*m_pBall.speed)*fFrameDelta;
m_pBall.y+=(m_pBall.vy*m_pBall.speed)*fFrameDelta;
}
void Game::Setup(float angle,float speed,float cx,float cy)
{
m_pball->vx=cosf(angle);
m_pball->vy=sinf(angle);
m_pball->speed=speed;
m_pball->x=cx;
m_pball->y=cy;
}
If you want to use non-orthogonal walls you will have to collision detect and then if true multiply ball velocity vector by the normal vector of the wall.