uses crt,graph; type Tzmey=array[0..5040] of integer; const left=#75; up=#72; esc=#27; right=#77; down=#80; enter=#13; n=56; m=90; var pole:array[0..n,0..m] of integer; izk,jzk,iz,jz:Tzmey; ch:char; ochki,dx,dy,nx,ny,gd,gm:integer; procedure SOZDzmey; var i:integer; begin for i:=0 to 15 do if i<=3 then begin iz[i]:=4; jz[i]:=8+i; end else begin iz[i]:=0; jz[i]:=0; end; end; //end; procedure SOZD_pole; var k,i,j:integer; begin for i:=0 to n do for j:=0 to m do if (j=0) or (i=n) or (j=m) or (i=0) then pole[i,j]:=-1 else pole[i,j]:=0; k:=0; repeat i:=random (n-2)+1; j:=random (m-2)+1; if (pole [i,j]=0) and (i<>4) and (abs(pole[i-1,j])<>1) and (abs(pole[i+1,j])<>1) and (abs(pole[i,j-1])<>1) and (abs(pole[i,j+1])<>1) then begin pole[i,j]:=1; k:=k+1; end; until k=11; end; procedure RISzmey; var i,x,y:integer; begin setfillstyle(1,12); for i:=0 to 15 do if (iz[i]>0) and (jz[i]>0) then begin x:=nx+jz[i]*dx; y:=ny+iz[i]*dy; bar(x,y,x+dx,y+dy); end; end; procedure RISpole; var i,j:integer; x,y:integer; begin for i:=0 to n do for j:=0 to m do begin x:=j*dx+nx; y:=i*dy+ny; case pole[i,j] of 0: begin setcolor(1); setfillstyle(1,0); bar (x,y,x+dx,y+dy); rectangle(x,y,x+dx,y+dy); end; -1: begin setfillstyle(1,white); bar(x,y,x+dx,y+dy); end; 1: begin setfillstyle(1,14); bar(x,y,x+dx,y+dy); end; end; // end; end; Procedure zastavka; Var c,n:integer; begin cleardevice; setcolor(2); setfillstyle(1,2); bar(0,0,getmaxx,getmaxy); repeat c:=random(15)+1; n:=random(500)+500; sound(n); setcolor(c); settextstyle(0,0,3); outtextxy(250,10,'zmeyka'); //outtextxy(250,40,''); settextstyle(0,0,2); outtextxy(100,100,'Autor Kirin Dmitry Sergeevich 903c3'); outtextxy(100,150,'Teacher Ukhnova'); outtextxy(250,300,'Goodlike!'); outtextxy(250,350,'Prees any key'); delay(500); nosound; until keypressed; while keypressed do ch:=readkey; cleardevice; end; procedure help; var f:text; s:string; y:integer; begin assign(f,'help.pas'); reset(f); setcolor(15); 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; end; { procedure menu; var np,pk:integer; begin cleardevice; setcolor(12); settextstyle(0,0,3); outtextxy(250,40,'MENU'); outtextxy(50,200,'game'); outtextxy(50,240,'help'); outtextxy(50,280,'exit'); setcolor(14); settextstyle(0,0,2); outtextxy(150,400,'viberite nuzniy punkt i nazmite enter'); np:=1; putimage(400,200+(np-1)*40,pk^,1); repeat ch:=readkey; if ch=#0 then begin ch:=readkey; putimage(400,200+(np-1)*40,pk^,1); case ch of up:if np>1 then np:=np-1; down:if np<3 then np:=np+1; end; putimage(400,200+(np-1)*40,pk^,1); end; until ch=enter; case np of // 1:game; 2:help; 3:halt; end; cleardevice; end;} procedure schet; var xw,yw,n:integer; var s:string; begin setfillstyle(1,1); bar(xw,yw,xw+40,yw+20); setcolor(14); settextstyle(0,0,1); str(n,s); outtextxy(xw+5,yw+5,s); end; procedure DVIGzmey; var i,kz,hi,hj,x,y:integer; stop:boolean; procedure POVOROTzmey; begin ch:=readkey; if ch=#0 then ch:=readkey; //begin case ch of left:if hj=0 then begin hi:=0; hj:=-1; end; right:if hj=0 then begin hi:=0; hj:=1; end; up:if hj=0 then begin hi:=-1; hj:=0; end; down: if hj=0 then begin hi:=1; hj:=0; end; end; // end; end; begin hi:=0; hj:=-1; kz:=3; stop:=false; repeat setfillstyle(1,0); x:=nx+jz[kz]*dx; y:=ny+iz[kz]*dy; bar(x,y,x+dx,y+dy); setcolor(1); rectangle(x,y,x+dx,y+dy); izk:=iz; jzk:=jz; for i:=1 to kz do begin iz[i]:=izk[i-1]; jz[i]:=jzk[i-1]; end; if keypressed then POVOROTzmey; iz[0]:=iz[0]+hi; jz[0]:=jz[0]+hj; setfillstyle(1,12); x:=nx+jz[0]*dx; y:=ny+jz[0]*dy; bar(x,y,x+dx,y+dy); if pole[iz[0],jz[0]]=1 then begin kz:=kz+1; {ochki:=ochki+10; schet(500,10,ochki);} end; for i:=1 to 14 do if(iz[i]=iz[0]) and (jz[i]=jz[0]) then stop:=true; delay(30000); until (pole[iz[0],jz[0]]=-1) or (ch=esc) or stop or (kz=14); end; begin gd:=detect; initgraph(gd,gm,''); randomize; //ochki:=0; dx:=15; dy:=15; nx:=20; ny:=0; zastavka; //menu; SOZD_pole; SOZDzmey; RISpole; RISzmey; readkey; DVIGzmey; readln; closegraph; End. body_zmey:array[1..2,1..5040]of integer;