Una posible rtuina de colisiones podría ser algo así:
Código Delphi
[-]
function TForm1._CalculateColision(sh1, sh2:TShape): boolean;
var
r1, r2, b1, b2:Integer;
begin
Result := False;
r1 := (sh1.Left + sh1.Width);
r2 := (sh2.Left + sh2.Width);
b1 := (sh1.Top + sh1.Height);
b2 := (sh2.Top + sh2.Height);
if (((sh1.Left < sh2.Left) and (r1 > sh2.Left)) and
((sh1.Top < sh2.Top) and (b1 > sh2.Top))) or
(((sh2.Left < sh1.Left) and (r2 > sh1.Left)) and
((sh2.Top < sh1.Top) and (b2 > sh1.Top))) or
(((sh1.Left < sh2.Left) and (r1 > sh2.Left)) and
((sh2.Top < sh1.Top) and (b2 > sh1.Top))) or
(((sh2.Left < sh1.Left) and (r2 > sh1.Left)) and
((sh1.Top < sh2.Top) and (b1 > sh2.Top))) then begin
Result := True;
end;
end;
Está en Delphi y usa TShapes, pero es fácil de entender y creo que puedes pasarla a Builder y cambiar los TShape por TButton sin grandes problemas.