{Если у Вас есть вопросы, то
 e-mail:  13_vlad@mail.ru

 А здесь Вы найдете описание алгоритма и основных процедур:
 page: www.vladimir13.narod.ru

}
PROGRAM TETRIS;
	USES CRT,DOS,GRAPH;
	LABEL rec,M,m1,m2,m3,m4;

	const
		timelevel:array[1..15] of word=(15000,10000,8000,6000,4500,
													4500,4000, 4500, 3000,2000,
													1500,1000,700,400,100);

	type
		 fig=array [0..4,1..4] of record
					x:shortint;
					y:shortint;
					end;
				A=ARRAY[1..100] OF RECORD
				S:BYTE;
				X:INTEGER;
				Y:INTEGER;
				END;

		 Fi=RECORD
				m:array [1..4] of record
						x:shortint;
						y:shortint;
						end;
				F:BYTE;{НОМЕР Т.Ф.}
				t:BYTE;{НОМЕР Т.П.}
				END;

		  reco=RECORD
				name:string[10];
				rez:word;
				end;

		  time=record
				shas,min,sek,dsek:word;
				 end;

	var
		vr,vr1:time;
		NextFig,b:boolean;
		l,r,w:word;
		fg:array[1..7] of fig;
		VMAS:^A;
		scr1,scr:REAL;
		tecrec:record
			Tpos,Brec:byte;
			end;
		del,bonus,X,Y:INTEGER;
		ST:ARRAY[1..12,1..20] OF record
							s:BYTE;
							c:byte;
							end;
		FP,ft:fi;
		TR:array[1..10] of reco;
		f1:file of fig;
		f:file of reco;
		nadp,srt:string;
		u,level,kr,S,i,I1:byte;
		c:char;

  procedure Nrec;
  begin
		if tecrec.tpos=0 then exit;
		SETTEXTSTYLE(2,0,5);
		if tecrec.tpos<11 then begin
		if tecrec.tpos<=3 then SETCOLOR(14) else
		SETCOLOR(10);
		str(tecrec.tpos,srt);
		OUTTEXTXY(420,175+tecrec.tpos*15,srt+'.');
		OUTTEXTXY(440,175+tecrec.tpos*15,tr[tecrec.tpos].name);
		end;
		setcolor(15);
		tecrec.tpos:=tecrec.brec;
		str(tecrec.tpos,srt);
		OUTTEXTXY(420,175+tecrec.tpos*15,srt+'.');
		OUTTEXTXY(440,175+tecrec.tpos*15,tr[tecrec.tpos].name);
		if tecrec.tpos=1 then tecrec.tpos:=0 else tecrec.brec:=tecrec.tpos-1;
		SETTEXTSTYLE(7,0,4);
	end;

  procedure findrecfile;
  var
 DirInfo: SearchRec;
begin
 FindFirst('tetris.rec', AnyFile, DirInfo);
 if DosError <> 0 then begin
	assign(f,'tetris.rec');
	rewrite(f);
	tr[1].name:='В.Коньков';
	tr[1].rez:=7000;
	for i:=1 to 10 do begin
	write(f,tr[1]);
	tr[1].rez:=tr[1].rez-500;
	end;
	seek(f,10);
	tr[1].name:='       "Уч';
	write(f,tr[1]);
	tr[1].name:='иться, учи';
	write(f,tr[1]);
	tr[1].name:='ться и    ';
	write(f,tr[1]);
	tr[1].name:='     еще р';
	write(f,tr[1]);
	tr[1].name:='аз учиться';
	write(f,tr[1]);
	tr[1].name:='", - как  ';
	write(f,tr[1]);
	tr[1].name:='    говари';
	write(f,tr[1]);
	tr[1].name:='вал частен';
	write(f,tr[1]);
	tr[1].name:='ько Ильич.';
	write(f,tr[1]);
	close(f);
	end;
end;


  procedure byf;    {oчистка буфера клавиатуры+наж.клавиши}
	var
		p:char;
	begin
	while keypressed do  p:=readkey;
	repeat
	until (keypressed);
	end;

procedure knopka(x,y,x1,y1:integer;b:boolean);
var s:byte;
begin
	s:=getcolor;
	SETFILLSTYLE(1,7);
	bar(x,y,x1,y1);
	if b=false then setcolor(15) else SETcolor(8);
	line(x-1,y-1,x1+1,y-1);
	line(x-2,y-2,x1+2,y-2);
	line(x-1,y-1,x-1,y1+1);
	line(x-2,y-1,x-2,y1+2);
	if b=false then setcolor(8) else SETcolor(15);
	line(x-1,y1+1,x1+1,y1+1);
	line(x-2,y1+2,x1+2,y1+2);
	line(x1+1,y-1,x1+1,y1+1);
	line(x1+2,y-1,x1+2,y1+2);
	setcolor(s);
	end;


procedure ris(x,y:byte;s:byte);
begin
		SETFILLSTYLE(1,s);
		if s=7  then SETcolor(7) else setcolor(15);
		bar(x*18+152,y*15+15,151+x*18+18,y*15+29);
		rectangle(x*18+152,y*15+15,151+x*18+18,y*15+29);
end;

PROCEDURE RISfg(fp:fi;e:byte);
	BEGIN
		if e=1 then e:=fp.f-1;
		FOR I:=1 TO 4 DO
		ris(fp.m[i].x,fp.m[i].y,e);
	end;

procedure initgraf;
	var
		grDriver: Integer;
		grMode: Integer;
		ErrCode: Integer;
	begin
		grDriver :=EGA;
		GRMODE:=1;
		InitGraph(grDriver, grMode,'');
		ErrCode := GraphResult;
		if ErrCode <> grOk then
		begin
		Writeln('Graphics error:', GraphErrorMsg(ErrCode));
		HALT(1);
		end;
	end;

PROCEDURE INITVMAS(I:BYTE);
	var
		e:byte;
	BEGIN
		e:=random(2);
		VMAS^[I].S:=RANDOM(4);
		if e=1 then VMAS^[I].X:=320+RANDOM(250);
		if e=0 then VMAS^[I].X:=320-RANDOM(250);
		IF E=1 THEN VMAS^[I].Y:=175+RANDOM(100);
		IF E=0 THEN VMAS^[I].Y:=175-RANDOM(100);
		END;

procedure initfg;
begin
	b:=false;
	for i:=1 to 4 do
	 begin
	fp.m[i].x:=ft.m[i].x-13;
	fp.m[i].y:=ft.m[i].y-2;
	if fp.m[i].x>0 then if st[fp.m[i].x,fp.m[i].y].s=1 then b:=true;
	end;
	fp.f:=ft.f;
	fp.t:=ft.t;
	s:=random(7)+1;
	ft.f:=s;
	ft.t:=2;
	for i:=1 to 4 do begin
	ft.m[i].x:=fg[s,0,i].x+13;
	ft.m[i].y:=fg[s,0,i].y+2;
	end;
	if b=true then begin
						SETFILLSTYLE(1,0);
						BAR(0,247,130,280);
						str(r,srt);
						SETCOLOR(4);
						OUTTEXTXY(47,247,srt);
						SETCOLOR(14);
						OUTTEXTXY(45,245,srt);

	SETTEXTSTYLE(1,0,5);
	SETCOLOR(4);
	OUTTEXTXY(197,137,'Конец !!!');
	SETCOLOR(14);
	OUTTEXTXY(195,135,'Конец !!!');
						SOUND(500);
						DELAY(170);
						NOSOUND;
						SOUND(150);
						DELAY(70);
						NOSOUND;
						SOUND(700);
						DELAY(170);
						NOSOUND;
						SOUND(900);
						DELAY(200);
						NOSOUND;
	byf;
	fp.m[1].x:=-6;
	exit;
	end;
	if fp.m[1].x>0 then risfg(fp,1);
	end;

procedure records(x,y:integer);
begin
		SETCOLOR(12);
		SETTEXTSTYLE(2,0,5);
		for i:=1 to 10 do begin
		if i=2 then SETCOLOR(14);
		if i=4 then SETCOLOR(10);
		str(i,srt);
		OUTTEXTXY(170+x,110+i*15-y,srt+'.');
		str(tr[i].rez,srt);
		OUTTEXTXY(190+x,110+i*15-y,tr[i].name);
		OUTTEXTXY(293+x,110+i*15-y,' '+srt);
		end;
		end;

PROCEDURE TOSH;
	BEGIN
		FOR I:=1 TO 100 DO BEGIN
		if getpixel(vmas^[i].x,vmas^[i].y)=3 then
			PUTPIXEL(VMAS^[I].X,VMAS^[I].Y,0);
		if getpixel(vmas^[i].x+1,vmas^[i].y)=3 then
			PUTPIXEL(VMAS^[I].X+1,VMAS^[I].Y,0);
		IF VMAS^[I].S=0 THEN VMAS^[I].X:=VMAS^[I].X-1;
		IF VMAS^[I].S=0 THEN VMAS^[I].Y:=VMAS^[I].Y-1;
		IF VMAS^[I].S=1 THEN VMAS^[I].X:=VMAS^[I].X+1;
		IF VMAS^[I].S=1 THEN VMAS^[I].Y:=VMAS^[I].Y-1;
		IF VMAS^[I].S=2 THEN VMAS^[I].Y:=VMAS^[I].Y+1;
		IF VMAS^[I].S=2 THEN VMAS^[I].X:=VMAS^[I].X+1;
		IF VMAS^[I].S=3 THEN VMAS^[I].X:=VMAS^[I].X-1;
		IF VMAS^[I].S=3 THEN VMAS^[I].Y:=VMAS^[I].Y+1;
		IF VMAS^[I].X<1 THEN INITVMAS(I);
		IF VMAS^[I].X>639 THEN INITVMAS(I);
		IF VMAS^[I].Y<1 THEN INITVMAS(I);
		if VMAS^[I].Y>349 THEN INITVMAS(I);
		if getpixel(vmas^[i].x,vmas^[i].y)=0 then
			PUTPIXEL(VMAS^[I].X,VMAS^[I].Y,3);
		if getpixel(vmas^[i].x+1,vmas^[i].y)=0 then
			PUTPIXEL(VMAS^[I].X+1,VMAS^[I].Y,3);
		END;
		END;

procedure readtxt(x,y:integer);
label n;
begin
		srt:='';
		bar(x,y,x+88,y+13);
		outtextxy(x,y,'_');
n: 	byf;
		if keypressed then
		c:=readkey else goto n;
		if c=#0 then c:=readkey;
		bar(x,y,x+length(srt)*8+10,y+13);
		 case c of
			  #32..#254:if length(srt)<10 then srt:=srt+c
								else write(#7);
					  #13:begin
							outtextxy(x,y,srt);
							exit;
							end;
					  #8:if srt[0]>#0 then
								srt:=copy(srt,1,length(srt)-1);
								else write(#7);
						end;
		outtextxy(x,y,srt+'_');
 GOTO n;
end;

procedure read3txt(x,y:integer);
label n;
begin
		srt:='';
		for i:=1 to 90 do srt:=srt+' ';
		bar(x,y,x+88,y+13);
		outtextxy(x,y,'_');
n: 	byf;
		if keypressed then
		c:=readkey else goto n;
		if c=#0 then c:=readkey;
		bar(x,y,x+length(srt)*8+10,y+13);
		 case c of
			  #32..#254:if length(srt)<10 then srt:=srt+c
								else write(#7);
					  #13:begin
							outtextxy(x,y,srt);
							exit;
							end;
					  #8:if srt[0]>#0 then
								srt:=copy(srt,1,length(srt)-1);
								else write(#7);
						end;
		outtextxy(x,y,srt+'_');
 GOTO n;
end;


procedure saverec;
begin
	  seek(f,0);
	  for i:=1 to 10 do
	  write(f,tr[i]);
	  srt:=tr[1].name;
	  w:=tr[1].rez;
	  for i:=0 to 8 do begin
	  tr[1].name:=copy(nadp,(i)*10+1,10);
	  write(f,tr[1]);
	  end;
	  tr[1].name:=srt;
	  tr[1].rez:=w;
	  end;

procedure text(i:byte);
	var b:boolean;
	begin
SETTEXTSTYLE(7,0,8);
		SETCOLOR(i);
		if i=5 then b:=true else b:=false;

		SETTEXTSTYLE(7,0,1);
		if s=1 then begin
						 knopka(130,253,205,277,b);
						 OUTTEXTXY(140,255,'Игра');
						 end;
		if s=2 then begin
						 knopka(220,253,370,277,b);
						 OUTTEXTXY(225,255,'Наши герои');
						 end;
		if s=3 then begin
						 knopka(385,253,475,277,b);
						 OUTTEXTXY(395,255,'Выход');
						 end;
	 end;

	BEGIN
		NextFig:=false;
		CheckBreak:=false;
		randomize;
		findrecfile;
		assign(f1,'tetris.ini');
		reset(f1);
		assign(f,'tetris.rec');
		reset(f);
	for i:=1 to 7 do
		read(f1,fg[i]);
		close(f1);
		INITGRAF;
		NEW(VMAS);
		RANDOMIZE;
		FOR I:=1 TO 100 DO
		INITVMAS(i);
		SetActivePage(0);
		SetVisualPage(0);
		SETTEXTSTYLE(1,0,3);
		SETBKCOLOR(0);
		CLEARVIEWPORT;
		if paramstr(1)='ANNA' then begin
		setcolor(4);
		OUTTEXTXY(398,1,' Любимой Анютке ');
		OUTTEXTXY(398,31,' посвящается ...');
		OUTTEXTXY(398,61,'           13-ый.');
		OUTTEXTXY(198,131,'Дорогая Анюта !');
		OUTTEXTXY(98,161,'Поздравляю тебя с Днем Рождения !!!');
		OUTTEXTXY(98,191,'Желаю тебе счастья, любви и всего    ');
		OUTTEXTXY(98,221,'      самого наилучшего !!!    ');
		OUTTEXTXY(98,251,'                       Твой Володя.');
		setcolor(14);
		OUTTEXTXY(396,3,' Любимой Анютке');
		OUTTEXTXY(396,33,' посвящается ... ');
		OUTTEXTXY(196,133,'Дорогая Анюта !');
		OUTTEXTXY(96,191,'Желаю тебе счастья, любви и всего    ');
		OUTTEXTXY(96,163,'Поздравляю тебя с Днем Рождения !!!');
		OUTTEXTXY(96,221,'      самого наилучшего !!!    ');
		OUTTEXTXY(96,253,'                       Твой Володя.');
		OUTTEXTXY(396,63,'           13-ый.');
		end else begin
		setcolor(4);
		OUTTEXTXY(198,122,'   Посвящается');
		OUTTEXTXY(198,152,'    Николаевой');
		OUTTEXTXY(198,182,'Анне Александровне.');
		setcolor(14);
		OUTTEXTXY(196,120,'   Посвящается');
		OUTTEXTXY(196,150,'    Николаевой');
		OUTTEXTXY(196,180,'Анне Александровне.');
		end;

{    exec('e:\13\st.exe','e:\13\13.sh');
 }	while keypressed do  c:=readkey;
		repeat
		tosh;
		until (keypressed);
		dispose(Vmas);
		c:=readkey;
		seek(f,10);
		nadp:='';
		for i:=1 to 9 do begin
		read(f,tr[1]);
		nadp:=nadp+tr[1].name;
		end;
		seek(f,0);
		for i:=1 to 10 do
		read(f,tr[i]);
		NEW(VMAS);
		CLEARVIEWPORT;
		SETTEXTSTYLE(2,0,8);
		SETCOLOR(10);
{		OUTTEXTXY(135,140,'Адаптируюсь к машине ...');
 }		r:=0;
		scr:=6;
		gettime(vr.shas,vr.min,vr.sek,vr.dsek);
		for w:=0 to 1000 do
		begin
		for i:=0 to 55 do begin
		r:=0;
		r:=r+1;
		end;
		end;
		gettime(vr1.shas,vr1.min,vr1.sek,vr1.dsek);
		{$q-}
		scr:=(vr1.shas*60+vr1.min)*60+vr1.sek+(vr1.dsek/100);
		scr:=scr-((vr.shas*60+vr.min)*60+vr.sek+(vr.dsek/100));
		scr:=int(scr*1000);
		{$Q+}
		scr:=(INT((scr*100)/60));
		scr:=scr/100;
		r:=0;
		scr1:=0;
		gettime(vr.shas,vr.min,vr.sek,vr.dsek);
		for w:=0 to 5000 do
		begin
		for i:=0 to 55 do begin
		r:=0;
		r:=r+1;
		end;
		end;
		gettime(vr1.shas,vr1.min,vr1.sek,vr1.dsek);
		{$q-}
		scr1:=(vr1.shas*60+vr1.min)*60+vr1.sek+(vr1.dsek/100);
		scr1:=scr1-((vr.shas*60+vr.min)*60+vr.sek+(vr.dsek/100));
		scr1:=int(scr1*1000);
		scr1:=(INT((scr1*100)/60));
		scr1:=scr1/100;
		{$Q+}
		if scr1>scr then scr:=scr+(scr1-scr)/2 else
							  scr:=scr1+(scr-scr1)/2;


m2:   SaveRec;
		RANDOMIZE;
		FOR I:=1 TO 100 DO
		INITVMAS(i);
		CLEARVIEWPORT;
		knopka(97,77,503,293,false);
		SETFILLSTYLE(1,0);
		BAR(100,80,500,290);
		SETCOLOR(14);
		SETTEXTSTYLE(2,0,6);
		knopka(120,120,480,120,false);
		OUTTEXTXY(116,90,' 05.1996 г.  Коньков В.М.  г.Балтийск');
		SETCOLOR(4);
		SETTEXTSTYLE(7,0,8);
		OUTTEXTXY(187,142,'Tetris');
		SETCOLOR(14);
		OUTTEXTXY(185,140,'Tetris');
		SETCOLOR(1);
		for s:=1 to 3 do text(0);
		s:=1;
		text(15);
M:		TOSH;
		if keypressed then
		c:=readkey else goto m;
		if c=#0 then c:=readkey;
		SETTEXTSTYLE(7,0,8);
		text(0);
		 case c of
			  #75:if s>1 then s:=s-1 else s:=3;
			  #77:if s<3 then s:=s+1 else s:=1;
			  #32,#13:begin
					text(5);
					delay(200);
					goto m1;
					end;
			  #27:begin
				  dispose(vmas);
				  clearviewport;
				  asm
				  mov ah,4ch
				  mov al,1
				  int 21h
				  end;
				  end;
			  end;
			  text(15);
		GOTO M;
rec:  SETCOLOR(7);
		SETBKCOLOR(0);
		CLEARVIEWPORT;
		knopka(97,77,503,293,false);
		SETFILLSTYLE(1,0);
		BAR(100,80,500,290);
		SETCOLOR(4);
		SETTEXTSTYLE(1,0,1);
		OUTTEXTXY(132,82,'     Л у ч ш и е  л ю д и :            ');
		SETCOLOR(14);
		OUTTEXTXY(130,80,'     Л у ч ш и е  л ю д и :            ');
		SETCOLOR(1);
		KNOPKA(120,114,480,114,FALSE);
		if b=true then begin
		str(r,srt);
		if tr[10].rez<r then begin
		for i:=10 downto 1 do
		if tr[i].rez<r then s:=i;
		for i:=10 downto s+1 do
		tr[i]:=tr[i-1];
		tr[s].rez:=r;
		records(-50,0);
		setcolor(15);
		SETTEXTSTYLE(2,0,5);
		SETFILLSTYLE(1,0);
		bar(240,110+s*15,299,125+s*15);
		OUTTEXTXY(243,110+s*15,' '+srt);
		str(s,srt);
		OUTTEXTXY(120,110+s*15,srt+'.');
		readtxt(140,110+s*15);
		tr[s].name:=srt;
		SETTEXTSTYLE(2,0,4);
		OUTTEXTXY(310,120,'Пожалуйста, несколько слов');
		OUTTEXTXY(310,135,'      для потомков:');
		Setcolor(14);
		if s=1 then begin
		nadp:='';
{						readtxt(310,150,30);
						nadp:=nadp+srt;
						readtxt(310,165,30);
						nadp:=nadp+srt;
						readtxt(310,180,30);
						nadp:=nadp+srt;
						OUTTEXTXY(300,200,'                     '+tr[s].name);
 }						end;
		bar(120,125,299,280);
		bar(310,120,500,220);
		records(-50,0);
		end else begin
		records(-50,0);
		SETCOLOR(4);
		SETTEXTSTYLE(2,0,6);
		OUTTEXTXY(332,152,'Ваш результат:');
		SETCOLOR(14);
		OUTTEXTXY(330,150,'Ваш результат:');
		str(r,srt);
		SETCOLOR(4);
		SETTEXTSTYLE(7,0,1);
		OUTTEXTXY(352,182,srt);
		SETCOLOR(14);
		OUTTEXTXY(350,180,srt);
		byf;
		SETFILLSTYLE(1,0);
		bar(310,120,499,220);
		end;
		end;
		records(-50,0);

		SETTEXTSTYLE(2,0,4);
		setcolor(15);
		oUTTEXTXY(295,138,copy(nadp,1,30));
		OUTTEXTXY(295,153,copy(nadp,30,30));
		OUTTEXTXY(295,168,copy(nadp,60,30));
		setcolor(11);
		OUTTEXTXY(290,188,'                   /'+tr[1].name+'/');
		b:=false;
		KNOPKA(350,240,420,260,FALSE);
		SETCOLOR(15);
		SETTEXTSTYLE(1,0,1);
		OUTTEXTXY(361,239,'O'+#44+'key');
		repeat
		while keypressed do c:=readkey;
		tosh;
		until keypressed;
		c:=readkey;
		KNOPKA(350,240,420,260,true);
		SETCOLOR(5);
		OUTTEXTXY(361,239,'O'+#44+'key');
		delay(200);
		goto m2;
m1:	if s=2 then goto rec;
		if s=3 then begin
		dispose(vmas);
		CLEARVIEWPORT;
		  asm
		  mov ah,4ch
		  mov al,1
		  int 21h
		  end;
		end;
		i:=0;
		Level:=1;
		for i:=1 to 4 do begin
		ft.m[i].x:=-40;
		ft.m[i].y:=-40;
		end;
		l:=0;
		for x:=1 to 12 do
		for y:=1 to 20 do begin
		st[x,y].s:=0;
		st[x,y].c:=7;
		end;
		CLEARVIEWPORT;
		knopka(163,32,393,336,FALSE);
		SETFILLSTYLE(1,0);
		bar(165,29,390,334);
		SETCOLOR(15);
		SETFILLSTYLE(1,7);
		BAR(168,29,388,332);
		rectangle(168,29,388,332);
		SETCOLOR(0);
		rectangle(169,29,387,331);
		initfg;
		initfg;
		knopka(465,57,557,120,false);
		if Nextfig=true then risfg(ft,1);
		KNOPKA(442,175,580,175,false);
		SETCOLOR(4);
		SETTEXTSTYLE(7,0,4);
		OUTTEXTXY(442,127,'Top - 10');
		SETCOLOR(14);
		OUTTEXTXY(440,125,'Top - 10');
		KNOPKA(442,40,580,40,false);
		SETCOLOR(4);
		OUTTEXTXY(442,2,'  Next');
		SETCOLOR(14);
		OUTTEXTXY(440,0,'  Next');
		KNOPKA(17,40,135,40,false);
		tecrec.brec:=10;
		tecrec.tpos:=11;
		r:=0;
		w:=0;
		SETCOLOR(4);
		str(Level,srt);
		OUTTEXTXY(27,2,'Level:');
		SETCOLOR(14);
		OUTTEXTXY(25,0,'Level:');
		SETCOLOR(4);
		OUTTEXTXY(62,52,srt);
		SETCOLOR(14);
		OUTTEXTXY(60,50,srt);
		KNOPKA(17,135,135,135,false);
		Bonus:=0;
		SETCOLOR(4);
		OUTTEXTXY(16,97,'Bonus:');
		SETCOLOR(14);
		OUTTEXTXY(14,95,'Bonus:');
		str(Bonus,srt);
		SETCOLOR(4);
		OUTTEXTXY(47,147,srt);
		SETCOLOR(14);
		OUTTEXTXY(45,145,srt);
		KNOPKA(17,235,135,235,false);
		SETCOLOR(4);
		u:=0;
		OUTTEXTXY(20,197,'Scores:');
		SETCOLOR(14);
		OUTTEXTXY(18,195,'Scores:');
		str(r,srt);
		SETCOLOR(4);
		OUTTEXTXY(47,247,srt);
		SETCOLOR(14);
		OUTTEXTXY(45,245,srt);
		SETCOLOR(15);
		records(250,-65);
		SETTEXTSTYLE(2,0,5);
		SETCOLOR(14);
		knopka(30,300,140,320,false);
		SETFILLSTYLE(1,0);
		bar(34,303,136,317);
		OUTTEXTXY(33,303,' F1 -');
		setcolor(10);
		OUTTEXTXY(73,303,' помощь');
		SETTEXTSTYLE(7,0,4);
		with vr do
		gettime(shas,min,sek,dsek);
m3:	if keypressed then
		c:=readkey else goto m4;
		if c=#0 then c:=readkey;
		 case c of
			  #60:begin
						if Nextfig=true then risfg(ft,7);
						if Nextfig=false then risfg(ft,1);
						Nextfig:=not(NextFig);
						end;
			  #61:begin
						SETCOLOR(4);
						OUTTEXTXY(220,97,'Pause');
						SETCOLOR(14);
						OUTTEXTXY(220,95,'Pause');
						repeat
						c:=readkey;
						if c=#27 then c:=#61;
						until c=#61;
						SETCOLOR(7);
						OUTTEXTXY(220,97,'Pause');
						OUTTEXTXY(220,95,'Pause');
					end;
			  #62:begin
					SetVisualPage(1);
						repeat
						c:=readkey;
						if c=#27 then c:=#62;
						until c=#62;
					SetVisualPage(0);
					byf;
					end;
			  #59:begin
					SetActivePage(1);
					knopka(97,67,503,293,false);
					SETCOLOR(8);
					rectangle(102,72,500,289);
					SETCOLOR(15);
					rectangle(100,70,498,287);
					SETCOLOR(7);
					rectangle(101,71,499,288);
					for i1:=0 to 1 do
					for i:=0 to 1 do begin
					SETCOLOR(8);
					circle(109+i*380,79+i1*200,3);
					SETCOLOR(15);
					circle(108+i*380,78+i1*200,2);
					end;
					SETCOLOR(4);
					SETTEXTSTYLE(7,0,4);
					OUTTEXTXY(216,81,'Справка.');
					SETCOLOR(14);
					OUTTEXTXY(215,79,'Справка.');
					SETTEXTSTYLE(2,0,5);
					SETCOLOR(0);
					OUTTEXTXY(190,140,'F1  - справка.');
					OUTTEXTXY(190,160,'F2  - вкл / выкл подсказки.');
					OUTTEXTXY(190,180,'F3  - пауза.');
					OUTTEXTXY(190,200,'F4  - начальник идет !!!');
					OUTTEXTXY(190,220,'ESC - выход.');
					setcolor(7);
					rectangle(355,209,365,209);
					knopka(260,260,340,270,false);
					setcolor(0);
					rectangle(257,257,343,273);
					SETTEXTSTYLE(2,0,5);
					OUTTEXTXY(275,258,'Дальше');
					SetVisualPage(1);
					byf;
					knopka(260,260,340,270,true);
					setcolor(15);
					OUTTEXTXY(275,259,'Дальше');
					delay(200);
					SETFILLSTYLE(1,7);
					BAR(108,120,490,270);
					SETTEXTSTYLE(2,0,5);
					SETCOLOR(1);
					OUTTEXTXY(160,130,'           Расценки:');
					SETCOLOR(0);
					OUTTEXTXY(160,150,'        фигура - 5 очков');
					OUTTEXTXY(160,170,'   сокращеная линия -  20 очков');
					OUTTEXTXY(160,190,'падающая фигура (клавиша пробел) -');
					OUTTEXTXY(160,210,'   1 очков за каждые 2 линии.');
					knopka(260,260,340,270,false);
					setcolor(0);
					rectangle(257,257,343,273);
					SETTEXTSTYLE(2,0,5);
					OUTTEXTXY(275,258,'Дальше');
					byf;
					knopka(260,260,340,270,true);
					setcolor(15);
					OUTTEXTXY(275,259,'Дальше');
					delay(200);
					SETFILLSTYLE(1,7);
					BAR(108,120,490,270);
					SETTEXTSTYLE(2,0,5);
					SETCOLOR(0);
					OUTTEXTXY(150,130,'    Программа написана мною, матросом');
					OUTTEXTXY(150,150,'      срочной службы, Коньковым В.М.');
					OUTTEXTXY(150,170, 'Группа испытателей и моральной поддержки:');
					OUTTEXTXY(150,190,'      Чичерин А.А., Кудрявцев А.А.,');
					OUTTEXTXY(150,210,'     Сыромолотов В.В., Токарев Д.В.');
					SETTEXTSTYLE(2,0,4);
					SETCOLOR(1);
					OUTTEXTXY(145,235,'    АСУ "Меркурий" Балтийской Военно-Морской Базы.');
					knopka(260,260,340,270,false);
					setcolor(0);
					rectangle(257,257,343,273);
					SETTEXTSTYLE(2,0,5);
					OUTTEXTXY(275,258,'Дальше');
					SetVisualPage(1);
					byf;
					knopka(260,260,340,270,true);
					setcolor(15);
					OUTTEXTXY(275,259,'Дальше');
					delay(200);
					SetVisualPage(0);
					byf;
					SETTEXTSTYLE(7,0,4);
					ClearViewPort;
					SetActivePage(0);
					end;
			  #72:begin
						s:=0;
						if fp.f=3 then if fp.t=2 then if fp.m[1].y=1 then
						s:=1;
						if fp.f=4 then if fp.t=2 then if fp.m[4].y=1 then
						s:=1;
						if s=1 then begin
											risfg(fp,7);
											for i:=1 to 4 do fp.m[i].y:=fp.m[i].y+1;
											s:=0;
											end;

						for i:=1 to 4 do begin
						if fp.m[i].x+fg[fp.f,fp.t,i].x<1 then s:=1;
						if fp.m[i].x+fg[fp.f,fp.t,i].x>12 then s:=1;
						if fp.m[i].y+fg[fp.f,fp.t,i].y>20 then s:=1;
						if fp.m[i].y+fg[fp.f,fp.t,i].y<1 then s:=1;
						if s=0 then if st[fp.m[i].x+fg[fp.f,fp.t,i].x,fp.m[i].y+fg[fp.f,fp.t,i].y].s=1 then s:=1;
						end;
						if s=0 then risfg(fp,7);
						if s=0 then begin
						for i:=1 to 4 do begin
						fp.m[i].x:=fp.m[i].x+fg[fp.f,fp.t,i].x;
						fp.m[i].y:=fp.m[i].y+fg[fp.f,fp.t,i].y;
						end;
						risfg(fp,1);
						if fp.t=4 then fp.t:=1 else fp.t:=fp.t+1;
						end;
						end;
				#32:begin
						kr:=0;
						repeat
						kr:=kr+1;
						s:=0;
						for i:=1 to 4 do begin
						if fp.m[i].y+1>20 then s:=1;
						if s=0 then if st[fp.m[i].x,fp.m[i].y+1].s=1 then s:=1;
						end;
						if s=0 then risfg(fp,7);
						if s=0 then
						for i:=1 to 4 do fp.m[i].y:=fp.m[i].y+1;
						risfg(fp,1);
						until s=1;
						kr:=kr shr(1);
						u:=1;
						r:=r+kr;
						end;
			  #75: begin
						s:=0;
						for i:=1 to 4 do begin
						if fp.m[i].x-1<1 then s:=1;
						if s=0 then if st[fp.m[i].x-1,fp.m[i].y].s=1 then s:=1;
						end;
						if s=0 then risfg(fp,7);
						if s=0 then
						for i:=1 to 4 do fp.m[i].x:=fp.m[i].x-1;
						risfg(fp,1);
						end;
			  #77: begin
						s:=0;
						for i:=1 to 4 do begin
						if fp.m[i].x+1>12 then s:=1;
						if s=0 then if st[fp.m[i].x+1,fp.m[i].y].s=1 then s:=1;
						end;
						if s=0 then risfg(fp,7);
						if s=0 then
						for i:=1 to 4 do fp.m[i].x:=fp.m[i].x+1;
						risfg(fp,1);
						end;
			  #27:goto m2;
			  end;
m4:   gettime(vr1.shas,vr1.min,vr1.sek,vr1.dsek);

		if (vr1.shas-vr.shas)*60+vr1.min - vr.min+(vr1.shas-vr.shas)*60 >= 2 then begin
												level:=level+1;
												w:=0;
					str(Level,srt);
					SETFILLSTYLE(1,0);
					BAR(0,52,100,100);
					SETCOLOR(4);
					OUTTEXTXY(62,52,srt);
					SETCOLOR(14);
					OUTTEXTXY(60,50,srt);
        		gettime(vr.shas,vr.min,vr.sek,vr.dsek);
					end;
                if scr=0 then
        		if w>=int(timelevel[level]) then w:=0 else w:=w+1 else
	                	if w>=INT(timelevel[level]/scr) then w:=0 else w:=w+1;

		if u=0 then for i:=1 to 4 do
							if fp.m[i].y=20 then u:=1
							else
							if st[fp.m[i].x,fp.m[i].y+1].s<>0 then u:=1;
		if u=1 then begin
						u:=4;
						del:=4000;
						end;
		if u=4 then begin
						if del=0 then begin
						u:=3;
						w:=0
						end else del:=del-1;
						end;
		if w<>0 then goto m3;
						s:=0;
						for i:=1 to 4 do begin
						if fp.m[i].y=20 then begin
						s:=1;
						end
						 else
						if st[fp.m[i].x,fp.m[i].y+1].s=1 then s:=1;
						end;
						if s=1 then begin
						for i:=1 to 4 do begin
						st[fp.m[i].x,fp.m[i].y].s:=1;
						st[fp.m[i].x,fp.m[i].y].c:=fp.f-1;
						end;
						kr:=0;
						for i:=1 to 4 do begin
						s:=0;
						for i1:=1 to 12 do
						if st[i1,fp.m[i].y].s=0 then s:=1;
						if s=0 then BEGIN
						kr:=kr+1;
						r:=r+20;
						l:=l+1;
						for s:=FP.M[I].Y downto 2 do
						for i1:=1 to 12 do begin
						st[i1,s].s:=st[i1,s-1].s;
						st[i1,s].c:=st[i1,s-1].c;
						ris(i1,s,st[i1,s].c);
						END;
						for i1:=1 to 12 do
						ris(i1,fp.m[i].y,st[i1,fp.m[i].y].c);
						SOUND(500);
						DELAY(170);
						NOSOUND;
						SOUND(150);
						DELAY(70);
						NOSOUND;
						SOUND(700);
						DELAY(170);
						NOSOUND;
						SOUND(900);
						DELAY(200);
						NOSOUND;
						i:=i-1;
						end;
						end;
						if NextFig=true then r:=r+3 else r:=r+5;
						if Nextfig=true then risfg(ft,7);
						initfg;
						u:=0;
						if kr>0 then kr:=kr-1;
						r:=r+kr*(10+kr*2);
						Bonus:=Bonus+kr*(20+kr*2)+(kr*20);
						SETFILLSTYLE(1,0);
						BAR(0,147,130,190);
						s:=0;
						for i:=1 to 12 do if  st[i,20].s=1 then s:=1;
						if s=0 then begin
						bonus:=bonus+500;
						r:=r+500;
						end;
					if bonus>0 then begin
					str(Bonus,srt);
					SETCOLOR(4);
					OUTTEXTXY(47,147,srt);
					SETCOLOR(14);
					OUTTEXTXY(45,145,srt);
					Bonus:=0;
					end;
						if b=false then begin
						if Nextfig=true then risfg(ft,1);
						SETFILLSTYLE(1,0);
						BAR(0,247,130,280);
						SETCOLOR(4);
						str(r,srt);
						OUTTEXTXY(47,247,srt);
						SETCOLOR(14);
						OUTTEXTXY(45,245,srt);
						if r>=tr[tecrec.brec].rez then Nrec;
						end else	 goto rec;
						end;
						if s=0 then begin
						risfg(fp,7);
						for i:=1 to 4 do fp.m[i].y:=fp.m[i].y+1;
						risfg(fp,1);
						end;

		GOTO M3;

	END.