Happy Mac
Happy Mac
program Mac;
uses Types, QuickDraw, Events, MiscTool;
var
i, x, y, sx, sy, color: Integer;
tick: LongInt;
r, mac: Rect;
p: Point;
begin
{ Setup }
tick := getTick;
x := random mod 280 + 10;
y := random mod 150 + 10;
sx := 1;
sy := 1;
graphics(320);
clearScreen(black);
setSolidBackPat(black);
while true do begin
{ Erase Mac }
setRect(r, x, y, x + 25, y + 30);
eraseRect(r);
{ Handle mouse click }
if button(0) then begin
getMouse(p);
if ptInRect(p, mac) then begin
sysBeep;
x := random mod 280 + 10;
y := random mod 150 + 10;
sx := -sx;
sy := -sy;
while button(0) do;
end
else exit;
end;
{ Draw Mac }
x := x + sx;
y := y + sy;
setRect(mac, x, y, x + 25, y + 30);
setSolidPenPat(15);
paintRect(mac);
setRect(r, x + 2, y + 3, x + 23, y + 18);
setSolidPenPat(11);
paintRRect(r, 8, 8);
setSolidPenPat(black);
setRect(r, x + 5, y + 5, x + 20, y + 15);
frameArc(r, 90, 180);
moveTo(x + 8, y + 6);
line(0, 0);
moveTo(x + 17, y + 6);
line(0, 0);
moveTo(x + 15, y + 23);
line(7, 0);
{ Bounce }
if (x < 0) or (x > 295) then sx := -sx;
if (y < 0) or (y > 170) then sy := -sy;
repeat until getTick > tick;
tick := tick + 1;
end;
end.
Little Mac bouncing happily, click on it and it will beep and bounce away!
This program teaches animation technique with more complex shape and mouse handling.
GSoft BASIC comparison:
DIM R AS RECT
TICK = GETTICK
X = RND (1) * 280 + 10
Y = RND (1) * 150 + 10
SX = 1
SY = 1
HGR
SETSOLIDBACKPAT (0)
DO
! Erase Mac
SETRECT (R, X, Y, X + 25, Y + 30)
ERASERECT (R)
! Move Mac
X = X + SX
Y = Y + SY
! Draw Mac
SETRECT (R, X, Y, X + 25, Y + 30)
SETSOLIDPENPAT (15)
PAINTRECT (R)
SETRECT (R, X + 2, Y + 3, X + 23, Y + 18)
SETSOLIDPENPAT (11)
PAINTRRECT (R, 8, 8)
SETSOLIDPENPAT (0)
SETRECT (R, X + 5, Y + 5, X + 20, Y + 15)
FRAMEARC (R, 90, 180)
HPLOT X + 8, Y + 6
HPLOT X + 17, Y + 6
HPLOT X + 15, Y + 23 TO X + 22, Y + 23
! Bounce
IF X < 0 OR X > 295 THEN SX = - SX
IF Y < 0 OR Y > 170 THEN SY = - SY
DO UNTIL GETTICK > TICK
LOOP
TICK = TICK + 1
LOOP