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