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