Program fireworks (input,output);
USES CRT, GRAPH;
CONST
rnum=8;
VAR
rocket:ARRAY [1..8,1..13] OF REAL;
{ rocket number, 1=x
2=y
3=af
4=uf
5=fuse
6=x2
7=y2
8=x3
9=y3
10=x4
11=y4
12=x5
13=y5}
fall:ARRAY [1..164,1..38] OF REAL;
{ rocket number, fallout number, same, 38=colour}
loop,loop2,n,m:INTEGER;
Gm,Gd:INTEGER;
procedure fire_rocket;
BEGIN
n:=0;
for loop:=1 to rnum do
begin
if (rocket[loop,2]=0) and (n=0) then
begin
n:=1;
rocket[loop,1]:=random(600)+20;
rocket[loop,2]:=480;
rocket[loop,3]:=(random(4)+2)/3;
if rocket[loop,1]>320 then
rocket[loop,3]:=rocket[loop,3]*-1;
rocket[loop,4]:=(random(8)+17)/3;
rocket[loop,5]:=130+random(20);
end;
end;
end;
procedure move_rocket;
BEGIN
for loop:=1 to rnum do
begin
if rocket[loop,2]<>0 then
begin
rocket[loop,12]:=rocket[loop,10];
rocket[loop,13]:=rocket[loop,11];
rocket[loop,10]:=rocket[loop,8];
rocket[loop,11]:=rocket[loop,9];
rocket[loop,8]:=rocket[loop,6];
rocket[loop,9]:=rocket[loop,7];
rocket[loop,6]:=rocket[loop,1];
rocket[loop,7]:=rocket[loop,2];
rocket[loop,1]:=rocket[loop,1]+rocket[loop,3];
rocket[loop,2]:=rocket[loop,2]-rocket[loop,4];
rocket[loop,4]:=rocket[loop,4]-0.07;
putpixel(round(rocket[loop,1]),
round(rocket[loop,2]),15);
putpixel(round(rocket[loop,1]+1),
round(rocket[loop,2]),15);
putpixel(round(rocket[loop,1]),
round(rocket[loop,2]+1),15);
putpixel(round(rocket[loop,1]+1),
round(rocket[loop,2]+1),15);
putpixel(round(rocket[loop,6]+1),
round(rocket[loop,7]),0);
putpixel(round(rocket[loop,6]),
round(rocket[loop,7]+1),0);
putpixel(round(rocket[loop,6]+1),
round(rocket[loop,7]+1),0);
putpixel(round(rocket[loop,12]),
round(rocket[loop,13]),0);
end;
end;
end;
procedure check_fuse;
begin
for loop:=1 to rnum do
begin
if rocket[loop,2]<>0 then
begin
rocket[loop,5]:=rocket[loop,5]-1;
if rocket[loop,5]=0 then
begin
for loop2:=3 to 5 do
begin
putpixel(round(rocket[loop,loop2*2]),
round(rocket[loop,loop2*2+1]),0);
end;
putpixel(round(rocket[loop,1]),
round(rocket[loop,2]),0);
putpixel(round(rocket[loop,1]+1),
round(rocket[loop,2]),0);
putpixel(round(rocket[loop,1]),
round(rocket[loop,2]+1),0);
putpixel(round(rocket[loop,1]+1),
round(rocket[loop,2]+1),0);
n:=0;
for loop2:=1 to 164 do
begin
if (fall[loop2,2]=0) and (n<8) then
begin
n:=n+1;
fall[loop2,1]:=rocket[loop,1];
fall[loop2,2]:=rocket[loop,2];
fall[loop2,3]:=(random(4)-2)/3;
fall[loop2,4]:=(random(6)-1)/4;
fall[loop2,5]:=150;
fall[loop2,38]:=random(13)+1;
end;
end;
rocket[loop,2]:=0;
end;
end;
end;
end;
procedure move_fallout;
BEGIN
for loop:=1 to (rnum*8) do
begin
if fall[loop,2]<>0 then
begin
for loop2:=18 downto 4 do
begin
fall[loop,loop2*2]:=fall[loop,loop2*2-2];
fall[loop,loop2*2+1]:=fall[loop,loop2*2-1];
end;
fall[loop,6]:=fall[loop,1];
fall[loop,7]:=fall[loop,2];
fall[loop,1]:=fall[loop,1]+fall[loop,3];
fall[loop,2]:=fall[loop,2]-fall[loop,4];
fall[loop,4]:=fall[loop,4]-0.02;
fall[loop,5]:=fall[loop,5]-1;
if fall[loop,5]>16 then
putpixel(round(fall[loop,1]),
round(fall[loop,2]),round(fall[loop,38]));
putpixel(round(fall[loop,36]),
round(fall[loop,37]),0);
if fall[loop,5]=0 then
fall[loop,2]:=0;
end;
end;
end;
BEGIN
Gd := Detect;
InitGraph(Gd, Gm,'');
if GraphResult <> grOk then
Halt(1);
cleardevice;
outtextxy(0,0,'Adam Hatherly');
randomize;
repeat
n:=random(5);
if n=1 then fire_rocket;
move_rocket;
check_fuse;
move_fallout;
delay(8);
until keypressed;
END.
syntax highlighted by Code2HTML, v. 0.8.11