Bouncing Balls

 
 

program Balls;

uses Common, QuickDrawII, EventMgr, MscToolSet;


type

  Ball = Object

    x, y, sx, sy: Integer;

    procedure setup;

    procedure move;

    procedure draw(num: Integer);

  end;


var

  i: Integer;

  tick: LongInt;

  balls: Array[1..15] of Ball;


procedure Ball.setup;

begin

  x := randomInteger mod 300 + 10;

  y := randomInteger mod 180 + 10;


  if random > 0 then

    sx := randomInteger mod 2 + 1

    else sx := -(randomInteger mod 2 + 1);


    if random > 0 then

      sy := randomInteger mod 2 + 1

    else sy := -(randomInteger mod 2 + 1);

end;


procedure Ball.move;

begin

  x := x + sx;

  y := y + sy;


  if (x < 0) or (x > 310) then

    sx := -sx;


  if (y < 0) or (y > 190) then

    sy := -sy;

end;


procedure Ball.draw;

var

  r: Rect;


begin

  setRect(r, x, y, x + 5 + num, y + 5 + num);

  setSolidPenPat(num);

  paintOval(r);

  setRect(r, x - 2, y - 2, x + 7 + num, y + 7 + num);

  setSolidPenPat(black);

  frameOval(r);

end;


begin

  startDesk(320);

  clearScreen(black);

  hideCursor;

  tick := getTick;

  setPenSize(3, 3);


  { Setup balls }


  for i := 1 to 15 do begin

    new(balls[i]);

    balls[i].setup;

  end;


  { Move balls }


  repeat

    for i := 1 to 15 do begin

      balls[i].draw(i);

      balls[i].move;

    end;


    repeat until getTick > tick;

    tick := tick + 1;

  until button(0);


  { Remove balls }


  for i := 1 to 15 do

    dispose(balls[i]);


  endDesk;

end.

Many bouncing balls.


This is the Orca/Pascal version, written using Object Pascal to demonstrate object oriented programming.