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.

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

Pacman munching!


This program teaches simple animation technique, including using system tick to maintain animation speed and reduce flickering.