[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
{Places a large vector ball ellipse on the screen and makes it bounce
to pieces= nice visual effect}
uses crt;
const Balls = 1400;
startcolor=50;
type movement= record
x, y : integer; { position }
dx, dy : integer; { velocity }
ddx, ddy : integer; { acceleration }
color : integer;
MaxYValue: integer;
END;
VAR ch : char;
I,
Pull : integer;
Dummy : string;
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 }
Procedure SetColors ( Color, Red, Green, Blue : Byte );
Begin { SetColor }
Port[$3C8] := Color;
Port[$3C9] := Red;
Port[$3C9] := Green;
Port[$3C9] := Blue;
End; { SetColor }
BEGIN {MAIN}
videoMODE($13);
for I:=1 to 250 do setcolors(I,i mod 50,
i mod 50-20,
I div ((i div 63)+1));
fillchar(mem[$A000:(191*320)],320*8,Ord(StartColor));{line at bottom}
FOR I:=1 to BAlls do BEGIN {INIT the balls into the array}
WITH ball[i] do BEGIN
ddx := 0;
ddy := 1; {constant pull downward}
dx := Random(5)-2; { start it moving left or right }
if dx=0 then dx:=1; { not still}
dy := 0; { the object is initially at rest }
x := trunc(cos(i)*140)+140+((i div ((i div 4)+1))*6);
y := trunc(Sin(I+((i div ((I div 4)+1))))*70)+60+
((i div ((I div 4)+1)*12)); { you specified }
color:=Random( I div ((I div 254)+1)) + 1; {Each Balls color}
MaxYValue:=Y;
END; {with}
END; {for do loop}
Pull:=0; {init the gravity degrading effect}
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;
End;
IF x > 319 then begin {hits right of screen}
x := 319;
dx := -dx;
END;
IF y > 190 then begin { BOUNCE! }
y := 190-(y-190)+1;
dy := -dy+pull;
End;
putdot(x, y, color); { draw the pixel at the new position }
END; {WITH}
END; {for do loop}
END; {KEYPRESS}
VideoMODE($3);
END. {PROGRAM}
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]