You must have some idea of where the error is taking place? Narrow down your code to the section suspected of causing this behavior and post it... or even bold or color it amongst your other code. You'll be more likely to receive an answer this way...

Anyway, what it seems like is you're clearing and redrawing the entire screen when only a small portion needs to be redrawn. I haven't worked specifically with allegro, but is there a function for "invalidating" a certain section of the screen and redrawing only that?