program max;
uses crt,graph;
type mas2=array[1..2] of integer;
des=array[1..10] of integer;
des_bool=array[1..10] of boolean;
var kol,koord_golovx,koord_golovy:des;koord_puschki,cvet,vistrel,s_kol,j,i:integer; napr_left:des_bool;
c:string;
Procedure Grafika;
var
DriverVar, ModeVar:integer;
begin
DriverVar:=Detect;
InitGraph (DriverVar,ModeVar,'\TP\GRAPH');
end;
procedure risovanie (const kol:integer; const napr_left:boolean;const koord_golovx:integer; const koord_golovy:integer);
var i,x:integer; {risuem sorokanozku}
begin
SetFillstyle(1,14);
if napr_left then
begin
for i:=0 to (kol-1) do
begin
x:=koord_golovx+i*5*2; {centri okruznostei udaleni na rasst. diametr (10)}
FillEllipse(x,koord_golovy,5,5);
end;
end
else
begin
for i:=0 to (kol-1) do
begin
x:=koord_golovx-i*5*2;
FillEllipse(x,koord_golovy,5,5);
end;
end;
end;
procedure stiranie(const koord_golovx:integer; const koord_golovy:integer; const kol:integer;const napr_left:boolean);
begin
SetFillstyle(1,0);
if napr_left then
Bar(koord_golovx-5,koord_golovy-5,koord_golovx+10*kol,koord_golovy+5)
else Bar(koord_golovx+5,koord_golovy-5,koord_golovx-10*kol,koord_golovy+5);
end;
procedure ris_puschki(const koord_puschki:integer);
var y:integer;
begin
y:=410;
SetFillstyle(1,cvet);
Bar(koord_puschki,y+20,koord_puschki+30,y+20+20);
Bar(koord_puschki+10,y,koord_puschki+20,y+20);
end;
procedure buf;
var c:char;
begin
while keypressed do
c:=readkey;
end;
procedure uprawlen (var koord_puschki:integer;var vistrel:integer);
var c:char;
begin
vistrel:=0;
if keypressed then
begin
c:=readkey;
case c of
'4':if koord_puschki>50 then koord_puschki:=koord_puschki-10;
'6':if (koord_puschki+30)<450 then koord_puschki:=koord_puschki+10;
'5':vistrel:=koord_puschki+10; {lewii krai dula}
end;
end;
buf;
end;
begin
Grafika;
Setcolor(red);
s_kol:=1;
Rectangle(44,44,456,456);{risuem ramku}
kol[1]:=10;
napr_left[1]:=true;
koord_golovx[1]:=450;
koord_golovy[1]:=50;
koord_puschki:=300;
repeat
for j:=1 to s_kol do
risovanie (kol[j],napr_left[j],koord_golovx[j],koord_golovy[j]);
SetFillStyle(1,0);
Bar(0,0,43,456);{pryachem lishnuyu sorokanozku}
Bar(458,38,560,450);
SetFillStyle(1,14);
Delay(50000);
Delay(5000);
for j:=1 to s_kol do
stiranie(koord_golovx[j],koord_golovy[j],kol[j],napr_left[j]);
for j:=1 to s_kol do
if napr_left[j]
then
begin
koord_golovx[j]:=koord_golovx[j]-10;
if koord_golovx[j]<(50-10*(kol[j])) then
begin koord_golovx[j]:=55;koord_golovy[j]:=koord_golovy[j]+10; napr_left[j]:=false; end
end
else
begin
koord_golovx[j]:=koord_golovx[j]+10;
if koord_golovx[j]>(450+10*(kol[j])) then
begin koord_golovx[j]:=445;koord_golovy[j]:=koord_golovy[j]+10; napr_left[j]:=true; end;
end;
cvet:=3;
ris_puschki(koord_puschki);
uprawlen(koord_puschki,vistrel);
{popadanie}
for j:=1 to s_kol do
for i:=0 to (kol[j]-1) do
begin
if napr_left[j] then
if (vistrel<>0) and (vistrel=koord_golovx[j]+i*10)
then
begin
outtextxy(200,200,'11111');
kol[j]:=kol[j]-i;
kol[s_kol+1]:=i-1;
s_kol:=s_kol+1;
koord_golovx[s_kol]:=koord_golovx[j];
koord_golovy[s_kol]:=koord_golovy[j]+2;
napr_left[s_kol]:=not(napr_left[j]);
end
else
if (vistrel>0) and (vistrel=koord_golovx[j]-i*10)
then
begin
outtextxy(200,200,'2222');
kol[j]:=kol[j]-i;
kol[s_kol+1]:=i-1;
s_kol:=s_kol+1;
koord_golovx[s_kol]:=koord_golovx[j];
koord_golovy[s_kol]:=koord_golovy[j]+2;
napr_left[s_kol]:=not(napr_left[j]);
end
end;
{popadanie konez}
SetFillStyle(1,0);
Bar(50,410,450,450);{stiraem pusku}
ris_puschki(koord_puschki);
until keypressed;
readln;
end.