Bouncing Balls
Bouncing Balls
program Balls;
uses Common, QuickDrawII, EventMgr, MscToolSet;
type
Ball = Object
x, y, sx, sy: Integer;
procedure setup;
procedure move;
procedure draw(num: Integer);
end;
var
i: Integer;
tick: LongInt;
balls: Array[1..15] of Ball;
procedure Ball.setup;
begin
x := randomInteger mod 300 + 10;
y := randomInteger mod 180 + 10;
if random > 0 then
sx := randomInteger mod 2 + 1
else sx := -(randomInteger mod 2 + 1);
if random > 0 then
sy := randomInteger mod 2 + 1
else sy := -(randomInteger mod 2 + 1);
end;
procedure Ball.move;
begin
x := x + sx;
y := y + sy;
if (x < 0) or (x > 310) then
sx := -sx;
if (y < 0) or (y > 190) then
sy := -sy;
end;
procedure Ball.draw;
var
r: Rect;
begin
setRect(r, x, y, x + 5 + num, y + 5 + num);
setSolidPenPat(num);
paintOval(r);
setRect(r, x - 2, y - 2, x + 7 + num, y + 7 + num);
setSolidPenPat(black);
frameOval(r);
end;
begin
startDesk(320);
clearScreen(black);
hideCursor;
tick := getTick;
setPenSize(3, 3);
{ Setup balls }
for i := 1 to 15 do begin
new(balls[i]);
balls[i].setup;
end;
{ Move balls }
repeat
for i := 1 to 15 do begin
balls[i].draw(i);
balls[i].move;
end;
repeat until getTick > tick;
tick := tick + 1;
until button(0);
{ Remove balls }
for i := 1 to 15 do
dispose(balls[i]);
endDesk;
end.
Orca/Pascal version, written using Object Pascal to demonstrate object oriented programming.
GSoft BASIC comparison:
TYPE BALL
X AS INTEGER
Y AS INTEGER
SX AS INTEGER
SY AS INTEGER
END TYPE
DIM R AS RECT
DIM B AS BALL
DIM BALLS(15) AS BALL
HGR
SETPENSIZE (3, 3)
FOR I = 1 TO 15
BALLS(I).X = RND (1) * 300 + 10
BALLS(I).Y = RND (1) * 180 + 10
IF RND (1) > 0.5 THEN
BALLS(I).SX = INT ( RND (1) * 2) + 1
ELSE
BALLS(I).SX = - INT ( RND (1) * 2) - 1
END IF
IF RND (1) > 0.5 THEN
BALLS(I).SY = INT ( RND (1) * 2) + 1
ELSE
BALLS(I).SY = - INT ( RND (1) * 2) - 1
END IF
NEXT
DO
FOR I = 1 TO 15
B = BALLS(I)
SETRECT (R, B.X, B.Y, B.X + 5 + I, B.Y + 5 + I)
SETSOLIDPENPAT (I)
PAINTOVAL (R)
SETRECT (R, B.X - 2, B.Y - 2, B.X + 7 + I, B.Y + 7 + I)
SETSOLIDPENPAT (0)
FRAMEOVAL (R)
BALLS(I).X = B.X + B.SX
BALLS(I).Y = B.Y + B.SY
IF BALLS(I).X < 0 OR BALLS(I).X > 310 THEN
BALLS(I).SX = - B.SX
IF BALLS(I).Y < 0 OR BALLS(I).Y > 190 THEN
BALLS(I).SY = - B.SY
NEXT
LOOP