var
yilanx:array[1..3500] of integer;
yilany:array[1..3500] of integer;
doy:array[1..6] of string;
dpu:array[1..6] of integer;
duv,yemsay,c,n,i,j,yemx,yemy:byte;
R:REGISTERS;
kytsay,puan,hiz:integer;
tus,tus1:char;
ses,d,k,yem,yanma,a:boolean;
d1:text;
eyoy:string[20]; eypuan:integer; isim:string[20];
mesaj:string;
function sor:boolean;
var
tus:char;
begin
write(mesaj);
repeat tus:=readkey; until tus in ['E','e','H','h'];
if tus in ['e','E'] then sor:=true
else sor:=false
end;
procedure cerceve(x1,y1,x2,y2:byte);
var
i:byte;
begin
gotoxy(x1,y1); write(#201);
for i:=x1+1 to x2-1 do write(#205);
write(#187);
for i:=y1+1 to y2-1 do
begin
gotoxy(x1,i); write(#186);
gotoxy(x2,i); write(#186);
end;
gotoxy(x1,y2); write(#200);
for i:=x1+1 to x2-1 do write(#205);
write(#188);
end;
procedure renk(x,y:byte);
begin
textcolor(x); textbackground(y);
end;
procedure duv2;
begin
gotoxy(22,13); write(#201); {sol ?st}
gotoxy(57,13); write(#187); {sag ?st}
gotoxy(22,35); write(#200); {sol alt}
for i:=23 to 56 do
begin
gotoxy(i,13); write(#205); {?st x}
gotoxy(i,35); write(#205); {alt x}
end;
write(#188); {sag alt}
for i:=14 to 21 do
begin
gotoxy(22,i); write(#186);
gotoxy(57,i); write(#186);
gotoxy(22,i+13); write(#186);
gotoxy(57,i+13); write(#186);
end;
end;
procedure duv3;
begin
j:=0;
repeat
j:=j+10;
for i:=9 to 38 do
begin
gotoxy(j+6,i);
write(#186);
end;
until j=60;
end;
procedure duv4;
begin
gotoxy(1,1); write(#201);
j:=0;
for i:=2 to 79 do
begin
gotoxy(i,1); write(#205);
gotoxy(i,49); write(#205);
j:=j+1;
if j in [1..21,60..79] then
begin
gotoxy(i,18); write(#205);
gotoxy(i,33); write(#205);
end;
end;
write(#187);
for i:=2 to 49 do
if i in [2..17,34..48] then
begin
gotoxy(1,i); write(#186);
gotoxy(80,i); write(#186);
end;
write(#200);
gotoxy(80,1); write(#187);
gotoxy(80,49); write(#188);
gotoxy(1,18); write(#200);
gotoxy(80,18); write(#188);
gotoxy(1,33); write(#201);
end;
procedure skortablosu;
var
skoy:string[20];
satir,skpu:integer;
begin
R.CH:=31;
R.CL:=0;
R.Ah:=1;
R.Al:=0;
INTR($10,R);
kytsay:=0; satir:=0; clrscr;
assign(d1,'skor.dat'); reset(d1);
while not eof(d1) do
begin
kytsay:=kytsay+1;
readln(d1); readln(d1);
end; close(d1); reset(d1);
cerceve(20,20,48,23+kytsay);
gotoxy(28,20); write('SKOR TABLOSU');
gotoxy(21,21); write('Isim'); gotoxy(42,21); write('Puan');
gotoxy(21,22); write('----'); gotoxy(42,22); write('----');
while not eof(d1) do
begin
satir:=satir+1;
readln(d1,skoy); readln(d1,skpu);
gotoxy(21,22+satir); write(satir,'-',skoy);
gotoxy(42,22+satir); write(skpu);
end;
readln;
end;
procedure skor(ppuan:integer);
var
durum:boolean;
sayac,tutpu:integer;
tutoy,adi:string[20];
doy:array[1..6] of string;
dpu:array[1..6] of integer;
begin
assign(d1,'skor.dat');
reset(d1);
sayac:=0; kytsay:=0; durum:=false;
while not eof(d1) do
begin
kytsay:=kytsay+1;
readln(d1); readln(d1);
end;
if kytsay<6 then kytsay:=kytsay+1;
close(d1); reset(d1);
if not(ppuan=0) then
begin
for i:=1 to kytsay do
begin
sayac:=sayac+1; tutpu:=0;
if (kytsay>1) then
readln(d1,tutoy,tutpu);
if (ppuan>tutpu) and (durum=false) then
begin
clrscr; gotoxy(20,20); write('Skor tablosuna girmeye hak kazandiniz.');
gotoxy(33,21); write('Isminiz:'); readln(adi);
doy[sayac]:=adi; dpu[sayac]:=ppuan;
if (kytsay>1) and (not(kytsay=sayac)) then
begin
sayac:=sayac+1;
doy[sayac]:=tutoy; dpu[sayac]:=tutpu;
end;
durum:=true;
end
else if ppuan>0 then begin doy[sayac]:=tutoy; dpu[sayac]:=tutpu; end;
if sayac=kytsay then break;
end;
close(d1);
rewrite(d1);
for i:=1 to kytsay do
begin
writeln(d1,doy[i]); writeln(d1,dpu[i]);
end;
close(d1);
skortablosu;
end;
end;
procedure yemcikar;
begin
repeat
yem:=true;
yemx:=random(79); yemy:=random(48);
for i:=1 to n do
if (yemx=yilanx[i]) and (yemy=yilany[i]) then yem:=false;
if (yemx in [0,1]) or (yemy in [0,1]) then yem:=false; {duv2 yem engel}
if (duv=3) then if (yemy in [13,35]) and (yemx in [22..57])
or (yemx in [22,57]) and (yemy in [14..21]) {duv3 yem engel}
or (yemx in [22,57]) and (yemy in [27..34]) then yem:=false;
if (duv=4) and (yemy in [9..38]) then
if (yemx in [16,26,36,46,56,66]) then yem:=false; {duv4 yem engel}
if (yemy in [1,80]) or (yemx in [1..22,61..79])
and (yemy in [18,33]) or (yemy in [1..17,34..48])
and (yemx in [1,80]) then yem:=false; {duv5 yem engel}
until yem=true;
gotoxy(yemx,yemy); write('*');
end;
procedure puanlama;
begin
gotoxy(70,49);
write('PUAN=',puan);
puan:=puan+10;
end;
procedure harmenu(adet:byte; m1,m2,m3,m4,m5,m6:string);
var
x,y:byte;
tus:char;
b:boolean;
procedure giris;
begin
repeat
tus:=readkey;
b:=false;
if tus=#27 then halt;
if tus=#13 then b:=true;
if tus=#0 then
begin
tus:=readkey;
if tus=#80 then begin if c=adet then c:=1 else c:=c+1; end;
if tus=#72 then begin if c=1 then c:=adet else c:=c-1; end;
end;
until tus in [#72,#80,#13];
end;
begin
menu; c:=1;
repeat
if c=1 then begin gotoxy(32,15); renk(1,7); write(m1);
giris; menu; continue; end;
if c=2 then begin gotoxy(32,16); renk(1,7); write(m2);
giris; menu; continue; end;
if c=3 then begin gotoxy(32,17); renk(1,7); write(m3);
giris; menu; continue; end;
if c=4 then begin gotoxy(32,18); renk(1,7); write(m4);
giris; menu; continue; end;
if c=5 then begin gotoxy(32,19); renk(1,7); write(m5);
giris; menu; continue; end;
if c=6 then begin gotoxy(32,20); renk(1,7); write(m6);
giris; menu; continue; end;
clrscr;
puan:=0; yanma:=false;
repeat
clrscr;
cerceve(28,12,48,22);
harmenu(5,'Yeni oyun..','Seviye..','Ses..','Duvarlar','Skor tablasi','');
if c=1 then break;
if c=2 then
begin
clrscr;
cerceve(28,12,48,24);
harmenu(6,'Seviye 1','Seviye 2','Seviye 3','Seviye 4','Seviye 5','Seviye 6');
d:=true;
case c of
1 : hiz:=8500;
2 : hiz:=7000;
3 : hiz:=5500;
4 : hiz:=4000;
5 : hiz:=2400;
6 : hiz:=1750;
end;
c:=2;
end;
if c=3 then
begin
clrscr;
cerceve(28,12,48,20);
harmenu(2,'A?ik','Kapali','','','','');
if c=1 then ses:=false;
if c=2 then ses:=True;
end;
if c=4 then
begin
clrscr;
cerceve(28,12,48,22);
harmenu(5,'Duvar yok','Duvar1','Duvar2','Duvar3','Duvar4','');
duv:=c;
end;
if c=5 then skortablosu;
until 1=2;
if d=false then hiz:=3500;
clrscr;
if duv=2 then cerceve(1,1,80,49);
if duv=3 then duv2;
if duv=4 then duv3;
if duv=5 then duv4;
yemcikar;
for i:=2 to n+1 do
begin yilanx[i-1]:=i; yilany[i-1]:=22; end; {baslangi? yilani}
repeat tus:=readkey;
if tus=#0 then tus:=readkey;
until ord(tus) in [72,77,80];
repeat {d?ng? basi}
if ord(tus) in [72,75,77,80] then
begin
gotoxy(yilanx[1],yilany[1]); write(' '); {silme}
for i:=1 to n-1 do
begin
yilanx[i]:=yilanx[i+1]; {kuyruk degeri artirma}
yilany[i]:=yilany[i+1];
end;
if tus=#77 then yilanx[n]:=yilanx[n]+1;
if tus=#75 then yilanx[n]:=yilanx[n]-1; {bas degeri artirma}
if tus=#72 then yilany[n]:=yilany[n]-1;
if tus=#80 then yilany[n]:=yilany[n]+1;
if duv in [1,3,4] then
begin
if yilanx[n]=1 then yilanx[n]:=79;
if yilanx[n]=80 then yilanx[n]:=2;
if yilany[n]=1 then yilany[n]:=48; {duvar yok}
if yilany[n]=49 then yilany[n]:=2;
end;
if (duv=2) and (yilanx[n] in [1,80]) or (yilany[n] in [1,49]) then
yanma:=true; {yanma kenarlara}
if (duv=3) then if (yilany[n] in [13,35]) and (yilanx[n] in [22..57])
or (yilanx[n] in [22,57]) and (yilany[n] in [14..21])
or (yilanx[n] in [22,57]) and (yilany[n] in [27..34]) then
yanma:=true; {duvar2 yanma}
if (duv=4) and (yilany[n] in [9..38]) then
if (yilanx[n] in [16,26,36,46,56,66]) then
yanma:=true; {duvar3 yanma}
if duv=5 then
begin
if (yilanx[n]=1) and (yilany[n] in [19..32]) then
yilanx[n]:=79;
if (yilanx[n]=80) and (yilany[n] in [19..32]) then
yilanx[n]:=2; {duvar4 ge?is}
if (yilany[n] in [1,80]) or (yilanx[n] in [1..22,61..79])
and (yilany[n] in [18,33]) or (yilany[n] in [1..17,34..48])
and (yilanx[n] in [1,80]) then yanma:=true; {duvar4 yanma}
end;
for i:=1 to n-1 do
if (yilanx[n]=yilanx[i]) and (yilany[n]=yilany[i]) then
yanma:=true; {yanma kuyruga}
if yanma then break;
for i:=1 to n do
begin
gotoxy(yilanx[i],yilany[i]);
if i=n then write(' ')
else write(#9);
end; {ilerletme}
if k=true then begin yemcikar; k:=false end;
if (yilanx[n]=yemx) and (yilany[n]=yemy) then
begin
n:=n+1; k:=true; yilanx[n]:=yilanx[n-1]; yilany[n]:=yilany[n-1];
yemsay:=yemsay+1;
if ses=false then
begin
sound(180); delay(2000); nosound;
end;
puanlama;
end; {yem yeme}
{if (k=true) and (yemsay mod 10=0) then hiz:=hiz-500; hiz artirma
if hiz<1000 then hiz:=1000;}
delay(100); {yilan hizi}
if keypressed then
begin
tus1:=readkey;
if tus1=#0 then tus1:=readkey;
if ord(tus1) in [72,75,77,80,27] then a:=true
else a:=false;
if (ord(tus) in [72,80]) and (ord(tus1) in [72,80]) then a:=false;
if (ord(tus) in [75,77]) and (ord(tus1) in [75,77]) then a:=false;
end;
end;
if a=true then begin tus:=tus1; a:=false end;
until tus=#27;
if (yanma=true) and (ses=false) then begin sound(50); delay(5000); nosound; end;
clrscr;
cerceve(33,19,47,22);
gotoxy(34,20); write('OYUN BITTI');
gotoxy(34,21); write('Puaniniz:',puan-10); readln;
R.CH:=31;
R.CL:=31;
R.Ah:=1;
R.Al:=0;
INTR($10,R);
skor(puan-10);
until 1=2; {bastan}