Pacman
Pacman
program Pacman;
uses Types, QuickDraw, Events, MiscTool;
var
i, j: Integer;
tick: LongInt;
r: Rect;
begin
graphics(320);
clearScreen(black);
hideCursor;
setSolidBackPat(black);
setSolidPenPat(9);
tick := getTick;
{ Draw dots }
for i := 1 to 15 do begin
setRect(r, i * 20, 96, i * 20 + 8, 104);
paintOval(r);
end;
{ Draw Pacman }
setRect(r, 0, 80, 40, 120);
paintArc(r, 120, 300);
for i := 1 to 80 do begin
{ Erase Pacman }
setRect(r, i * 4 - 4, 80, i * 4 + 36, 120);
eraseOval(r);
{ Move Pacman }
setRect(r, i * 4, 80, i * 4 + 40, 120);
if odd(i) then paintArc(r, 100, 340)
else paintArc(r, 120, 300);
{ Digest food }
repeat until getTick - tick > 3;
tick := getTick;
if button(0) then exit;
end;
end.
Pacman munching!
This program teaches simple animation technique, including using system tick to maintain animation speed and reduce flickering.
GSoft BASIC comparison:
DIM R AS RECT
HGR
HCOLOR= 9
SETSOLIDBACKPAT (0)
TICK = GETTICK
! Draw dots
FOR I = 1 TO 15
SETRECT (R, I * 20, 96, I * 20 + 8, 104)
PAINTOVAL (R)
NEXT
! Draw Pacman
SETRECT (R, 0, 80, 40, 120)
PAINTARC (R, 120, 300)
FOR I = 1 TO 80
! Erase Pacman
SETRECT (R, I * 4 - 4, 80, I * 4 + 36, 120)
ERASERECT (R)
! Move Pacman
SETRECT (R, I * 4, 80, I * 4 + 40, 120)
IF I - INT (I / 2) * 2 > 0 THEN
PAINTARC (R, 100, 340)
ELSE
PAINTARC (R, 120, 300)
END IF
DO UNTIL GETTICK - TICK > 3
LOOP
TICK = GETTICK
NEXT