uses graph,wincrt; var gd,gm:integer; count:integer; key:char; p:pointer; prize:integer; nx,ny,dx,dy,ik,jk,i,j:integer; const left=#75; right=#77; up=#72; down=#80; esc=#27; enter=#13; tab:array[1..23,1..33] of integer = ((0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), (0,2,0,1,1,1,0,1,3,1,1,3,1,1,1,1,1,3,1,1,1,1,0,1,0,1,3,1,0,1,1,1,0), (0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,3,0), (0,1,0,1,0,3,0,1,0,1,0,3,0,1,3,1,0,1,1,1,3,1,1,1,0,1,0,1,1,1,0,1,0), (0,1,0,1,0,1,0,1,0,3,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,3,0,0,0,0,0,1,0), (0,1,0,1,0,1,1,3,0,1,0,1,3,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0), (0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,3,0,0,0,0,0,3,0), (0,3,0,3,1,1,0,1,1,1,1,3,1,1,0,1,1,1,3,1,0,1,1,1,0,1,0,1,1,1,1,1,0), (0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,3,0,0,0,1,0), (0,1,1,1,0,1,0,1,3,1,1,1,0,1,0,1,1,1,3,1,1,1,0,1,1,1,0,1,1,1,0,1,0), (0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,0), (0,1,3,1,0,3,0,1,0,3,1,1,0,1,1,3,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0), (0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,3,0,1,0,1,0,3,0,1,0,1,0,0,0,1,0), (0,1,1,1,0,1,1,1,0,1,0,1,1,3,1,1,0,1,1,1,0,1,0,1,1,3,0,1,0,1,0,1,0), (0,1,0,1,0,0,0,0,0,1,0,3,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0), (0,1,0,1,3,1,1,3,0,1,0,1,0,1,1,1,0,3,0,1,1,1,0,1,1,1,0,3,0,3,1,1,0), (0,1,0,0,0,0,0,1,0,3,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0), (0,1,1,3,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0), (0,0,0,0,0,3,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,3,0), (0,3,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,3,1,0,1,0,1,1,3,1,1,3,1,1,1,0), (0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0), (0,1,1,1,1,3,1,1,0,1,1,1,1,3,1,1,1,1,0,3,0,1,1,1,1,3,1,1,4,1,1,1,0), (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); procedure prcount(count:integer); var st:string[3]; begin setcolor(red); str(count,st); setfillstyle(1,0); bar(370,310,640,340); settextstyle(0,0,2); outtextxy(400,320,'Ваши очки - '+st); end; procedure help; var f:text; s:string; y:integer; begin assign(f,'help.pas'); reset(f); setcolor(green); settextstyle(0,0,1); y:=20; cleardevice; while not (eof(f)) do begin readln(f,s); outtextxy(50,y,s); y:=y+20; end; close(f); readkey; cleardevice; end; procedure game; begin drawcol; prcount(count); drawlab(ik,jk); repeat i:=ik; j:=jk; analysekey(key,i,j,ik,jk); movelab(i,j,ik,jk); until key=esc; closegraph; end; procedure zastavka; var c,n:integer; begin cleardevice; repet; setcolor(green); settextstyle(0,0,6); outtextxy(250,10,'Игра'); outtextxy(250,40,'Лабиринт'); settextstyle(0,0,3); outtextxy(100,100,'Автор Качулина В.Е.'); outtextxy(100,150,'Преподаватель Баютов О.В.'); outtextxy(250,300,'Желаем Удачи!'); outtextxy(250,350,'Нажмите любую клавишу'); delay(500); until keypressed; cleardevice; end; procedure menu; var np:integer; begin cleardevice; settextstyle(0,0,4); setcolor(Red); outtextxy(200,90,'...МЕНЮ...'); setcolor(LightBlue); outtextxy(50,200,'-Игра'); setcolor(Red); outtextxy(50,280,'-Помощь'); setcolor(LightBlue); outtextxy(50,360,'-Выход'); setcolor(red); settextstyle(0,0,2); outtextxy('выберите нужный пункт меню'); np:=1; putimage(400,200+(np-1)*40,p^1); repeat key:=readkey; if key=#0 then begin key:=readkey; putimage(400,200+(np-1)*40,p^); case key of up: if np>1 then np:=np-1; down: if np<3 then np:=np+1; end; putimage(400,200+(np-1)*40,p^,1); end until key=enter; case np of 1:game; 2:help; 3:halt; end; End; procedure drawcol; var size:integer; begin setcolor(yellow); setfillstyle(1,yellow); circle(round(dx/2),round(dy/2),round(dx/4)); floodfill(round(dx/2),round(dy/2),yellow); size:=imagesize(0,0,dx,dy); getmem(p,size); getimage(0,0,dx,dy,p^); end; procedure drawlab(var ik,jk:integer); var i,j:integer; x,y:integer; begin x:=nx+dx*23+1; y:=ny+dy*33+1; for i:=1 to 23 do for j:=1 to 33 do begin x:=(j-1)*dx+nx; y:=(i-1)*dy+ny; case tab[i,j] of 0:begin setfillstyle(2,green); bar(x,y,x+dx,y+dy); end; 1:begin setfillstyle(1,blue); bar(x,y,x+dx,y+dy); end; 2:begin setfillstyle(1,white); bar(x,y,x+dx,y+dy); ik:=i; jk:=j; putimage(x,y,p^,xorput); end; 3:begin setfillstyle(1,red); bar(x,y,x+dx,y+dy); prize:=prize+1; end; 4:begin setfillstyle(1,yellow); bar(x,y,x+dx,y+dy); end; end; end; end; procedure analysekey(var key:char; var i,j, jk,ik:integer); begin key:=readkey; if key=#0 then begin key:=readkey; case key of left:i:=ik-1; right:i:=ik+1; up:j:=jk-1; down:j:=jk+1; end; end; setcolor(0); settextstyle(0,0,3); outtextxy(450,200,'стена'); end; procedure movelab(var i,j,ik,jk:integer); var x,y,xk,yk:integer; begin if (i=ik) and (j=jk) then exit; x:=(j-1)*dx+nx; y:=(i-1)*dy+ny; xk:=(jk-1)*dx+nx; yk:=(ik-1)*dy+ny; case tab[i,j] of 0:begin delay(20); count:=count-2; prcount(count); setcolor(red); settextstyle(0,0,3); outtextxy(450,200,'стена'); i:=ik; j:=jk; end; 1:begin putimage(x,y,p^,xorput); putimage(xk,yk,p^,xorput); tab[ik,jk]:=1; tab[i,j]:=2; ik:=i; jk:=j; end; 3:begin count:=count+10; prcount(count); setfillstyle(1,white); bar(x,y,x+dx-1,y+dy-1); putimage(x,y,p^,xorput); putimage(xk,yk,p^,xorput); tab[ik,jk]:=1; tab[i,j]:=2; ik:=i; jk:=j; end; 4:begin putimage(x,y,p^,xorput); putimage(xk,yk,p^,xorput); setcolor(green); settextstyle(0,0,3); if count