Du speicherst dir die aktuelle x- und y-Bewegungsrichtung. Dann überprüfst du, ob der Ball gerade die Wand berührt, wenn ja, setzt du die Bewegungsrichtung entsprechend um. Als Beispiel (für die x-Richtung):
Delphi-Quellcode:
var xMove: integer;
x,y: integer;
begin
// Initialisieren:
xMove := +10;
x := 100;
y := 100;
repeat
// alten Ball löschen:
Image1.Canvas.Pen.Color:=clwhite;
Image1.Canvas.brush.Color:=clwhite;
Image1.Canvas.Ellipse(x,y,x+50,y+50);
// neuen Ball malen:
Image1.Canvas.Pen.Color:=clgreen;
Image1.Canvas.brush.Color:=clyellow;
Image1.Canvas.Ellipse(x,y,x+50,y+50);
if (x = 50) and (xMove < 0) then
xMove := +10 else // an der linken Wand abprallen
if (x = Image1.Width - 50) and (xMove > 0) then
xMove := -10; // an der rechten Wand abprallen
x := x + xMove;
Delay(500);
until <Abbruchbedingung>;
end;
Das ist jetzt quick and dirty, und für den Programmierstil gehör ich eigentlich auch erschossen, aber ein bisschen Arbeit muss dir ja auch noch bleiben.