Select Page

This post is a portion of the Appendix in my on going series about 2D Game Development using the Allegro 5 library. These posts are in course order. You can see all of the posts in this course by clicking the “2D Game Development” button at the top of this site.

I don’t really have any other place to put this one. Simply helping someone through some code issues.

As a follow up (even though I am typing this before the video is done processing) I wanted to provide the code for a more accurate “flat” based collision detection. Once again, this is not perfect. If I wanted better detection, I would go into my “else” for determining the collision and test for each of the four possible corners. Read the code below if what I just said didn’t make any sense:

```if(ball.x - ball.boundx < brick[i].x + brick[i].boundx &&
ball.x + ball.boundx > brick[i].x - brick[i].boundx &&
ball.y - ball.boundy < brick[i].y + brick[i].boundy &&
ball.y + ball.boundy > brick[i].y - brick[i].boundy)
{
if(abs(ball.x - brick[i].x) < 15) //Verticall collision
{
if(ball.y < brick[i].y)
ball.dirY = abs(ball.dirY) * -1;
else
ball.dirY = abs(ball.dirY);
}
else if(abs(ball.y - brick[i].y) < 15) //Horizontal collision
{
if(ball.x < brick[i].x)
ball.dirX = abs(ball.dirX) * -1;
else
ball.dirX = abs(ball.dirX);
}
else  //Diagonal collision
{
ball.dirX *= -1;
ball.dirY *= -1;
}

brick[i].count--;
al_play_sample_instance(instance2);

if(totalBricks < 40 && totalBricks % 10 == 0)
{
ball.velX += 1;
ball.velY += 1;
}
}```