[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    {gravity type program modified by þMr. Krinkleþ}
    uses {vgaSCRN,}crt;
    const Balls = 900;  {if program too fast increase: if too slow decrease}

    type movement= record
         x,   y : integer;  { position }
        dx,  dy : integer;  { velocity }
       ddx, ddy : integer;  { acceleration }
       color    : integer;
       MaxYValue: integer;
    END;

    VAR ch : char;           {for readkey}
        I  : integer;
      Ball : array[1..BAlls] of movement;

    procedure PutDot(x,y,color:integer);
      begin
        Mem[$a000{VGA_Segment}:(y*320)+x] := color;
      end;
    Procedure VideoMode ( Mode : Byte );
        Begin { VideoMode }
          Asm
            Mov  AH,00
            Mov  AL,Mode
            Int  10h
          End;
        End;  { VideoMode }

    BEGIN {MAIN}
    videoMODE($13); {320x200x256c}
    {init all balls}
    FOR I:=1 to BAlls do BEGIN
    With ball[i] do BEGIN
    ddx := 0;             { constant horizontal acceleration }  {gravity < or >}
    ddy := 0;             { constant vertical acceleration } {gravity ^ or v }

    { in this case there is NO gravity pull from ANY direction: ... weightless}

     dx := Random(2)-1;             { initial velocity < or >}
     dy := -1;                      { initial velocity ^ or v}

      x := i mod 305+random(15)+1; { initial coordinates, as }
      y := I mod 190+random(10)+1; {   you specified }

    {320 * 200 positioning : take I and remainder when divided by 'balls'
                             to produce a sequential increment that
                             does not over flow 320 or 200; plus a random
                             to give the fuzzy line effect}

      color:=Random( I div ((I div 254)+1)) + 1;  {Each Balls color}
                       { This formula will take a loop from 1 to [any number]
                         and make it so it will increment from 1 to 255
                         [valid color assignments]}
      MaxYValue:=Y+1;  {future use only}
    END; {with}
    END; {for do loop}

    WHILE not(keypressed) do begin
     FOR i:=1 to Balls do BEGIN
      With ball[i] do BEGIN
      putdot(x, y, 0);    { blank out the pixel drawn on the last iteration }
      dx := dx + ddx;     { updating velocity }
      dy := dy + ddy;
      x  :=  x +  dx;     { updating position }
      y  :=  y +  dy;
      IF x< 1 then begin      {hits left of screen}
         X:=1;
         dx:=dx*-1;           {moves it to the right}
      End;
      IF x > 319 then begin   {hits right of screen}
         x :=319;
         dx:=-dx;             {moves it to the left}
      END;
      IF y > 190 then begin   { BOUNCE! }
        y := 190;
        dy := -dy;            {not used: all object float upward not down}
      End;
      putdot(x, y, color);  { draw the pixel at the new position }
      END; {WITH}
     END; {for do loop}
    End; {KEYPRESS}
    videoMODe($3);          {back to text mode}
    end. {PROGRAM}

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]