program snake29;
uses crt;
const
left=#75;
right=#77;
up=#72;
down=#80;
Esc=#27;
var
Ch : Array [1..20,1..40] of char;
Name : Array [1..6] of String;
HiScore : Array [1..6] of integer;
AHead,BHead : Array [1..15000] of integer;
a,b,aFood,bFood,i,k,j,iTail,iCounter,iCrash,iGained,xGamble,yGamble,
iLastScore,iList,iLive,iLifeScore,iMove,iScore,iTemp,Color,iLevel,iFactor,iChance : integer;
StTemp,User : String[10];
ChLevel,Decision,key,KeyControl : Char;
Lock,Pause,SoundLock : Boolean;
Procedure CreateFrame;
begin
gotoxy(19,9);
write('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ SNAKE ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
for i:=10 to 16 do
begin
gotoxy(19,i);
write('º º');
end;
gotoxy(19,17);
write('º ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º');
gotoxy(19,18);
write('º º º º');
gotoxy(19,19);
write('ÈÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍͼ');
end;
begin
randomize;
clrscr;
textcolor(11);
gotoxy(25,13);
write('*** LUCKY SNAKE ***');
gotoxy(24,15);
textcolor(9);
write('a Mr.Stork Production...');
textcolor(15);
readkey;
textcolor(15);
iCounter:=1;
clrscr;
writeln('Please write your name!');
readln(User);
iList:=6; {It is 6,because we have 5 people in hi-score list.}
Name[iList]:=User;
clrscr;
iLevel:=3;
iFactor:=3;
iLifeScore:=1500;
SoundLock:=True;
repeat
clrscr;
iLive:=2;
CreateFrame;
gotoxy(21,10);
writeln('What would you like to do ',User,'?');
gotoxy(21,11);
writeln('1. Let us roll!');
gotoxy(21,12);
writeln('2. I will decide how fast I am !');
gotoxy(21,13);
writeln('3. I wonder who is the best?');
gotoxy(21,14);
writeln('4. New player');
gotoxy(21,15);
writeln('5. Sound Option');
gotoxy(21,16);
writeln('6. Quit');
repeat
for k:=1 to 500 do
begin
gotoxy(31,18);
Write(' º');
delay(20000);
gotoxy(31,18);
write('*** GOOD LUCK *** º');
if KeyPressed then Break;
delay(60000);
end;
Decision:=Readkey;
if Decision='1' then
begin
if SoundLock=True then
begin
for i:=1 to 3 do
begin
if KeyPressed then Break;
delay(30000); {Start Music}
sound(100);
delay(30000);
sound(150);
delay(30000);
sound(200);
delay(30000);
sound(75);
delay(30000);
sound(175);
delay(30000);
NoSound;
end;
end;
end;
until(Decision in ['1','2','3','4','5','6'] );
case Decision of
'1' :
begin
repeat {That is for lives}
clrscr;
gotoxy(21,12);
writeln('PRESS ENTER WHEN YOU ARE READY! ',User);
readln;
if (i>j) then
begin
for a:=1 to 1500 do
begin
AHead[a]:=0;
BHead[a]:=0;
end
end
else
for a:=1 to 1500 do
begin
AHead[a]:=0;
BHead[a]:=0;
end;
clrscr;
writeln('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
for i:=1 to 20 do
begin
writeln('º º º º ');
end;
writeln('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');
gotoxy(45,4);
write('Score: ');
gotoxy(45,4);
write('Score: ',iScore);
gotoxy(45,6);
write('Lives: ',iLive);
gotoxy(45,8);
iList:=1;
write('Leader: ',Name[iList]);
gotoxy(45,10);
if (HiScore[iList]=0) then
begin
write('Hi-Score: ',iScore);
gotoxy(45,8);
write('Leader: ',User);
end
else
begin
write('Hi-Score: ',HiScore[iList]);
gotoxy(45,8);
write('Leader: ',Name[iList]);
end;
a:=1;
b:=1;
i:=10;
aFood:=10;
bFood:=16;
gotoxy(bFood,aFood);
textcolor(13);
write('~');
for j:=2 to 4 do
begin
AHead[a]:=i;
BHead[b]:=j;
Ch[i,j]:='';
gotoxy(j,i);
write(Ch[i,j]);
a:=a+1;
b:=b+1;
end;
key:=Right;
iTail:=1;
repeat
iList:=6;
Name[iList]:=User;
repeat {If it is alive,go on}
delay(60000 div iLevel);
gotoxy(45,2);
write(User);
Lock:=True;
KeyControl:=Key;
if KeyPressed then
begin
key:=Readkey;
end;
if (key=#0) then
begin
key:=Readkey;
end;
if ((key<>Up) or (key<>Down) or (key<>Right) or (key<>Left) or (key<>Esc)) {This control is for monkey touching}
and
((key<>Up) and (key<>Down) and (key<>Right) and (key<>Left) and (key<>Esc)) then
Key:=KeyControl;
case key of
Right: j:=j+1; {Right}
Left : j:=j-1; {Left}
Up : i:=i-1; {Up}
Down : i:=i+1; {Down}
Esc : begin
gotoxy(50,18);
write('PAUSED');
gotoxy(46,20);
write(' 1. QUIT ');
gotoxy(46,21);
write(' 2. Continue ');
repeat
Decision:=Readkey;
until (Decision in ['1','2']);
case Decision of
'1' : EXIT;
'2' : Pause:=True;
end;
if (Pause=True) then
begin
key:=KeyControl;
gotoxy(50,18);
write(' ');
gotoxy(45,20);
write(' ');
gotoxy(45,21);
write(' ');
Continue;
end;
end;
end;
if (i>21) or (i<2) or (j>41) or (j<2) then Continue; {If it runs into the wall,stop!}
for iCrash:=a downto iTail do
begin
if (AHead[iCrash]=i) and (BHead[iCrash]=j) then {We'll use this statement again!Don't forget!}
begin
Lock:=False;
break; {Gives up the loop if the snake bites itself}
end;
end;
if Lock=True then {If it eats itself,we cannot open this}
begin
gotoxy(j,i);
Ch[i,j]:='';
write(Ch[i,j]);
AHead[a]:=i;
BHead[b]:=j;
a:=a+1;
b:=b+1;
iMove:=iMove + 1;
if (iMove=65) then
begin
Ch[xGamble,yGamble]:=' ';
gotoxy(46,12);
write(' ');
gotoxy(yGamble,xGamble);
write(Ch[xGamble,yGamble]);
xGamble:=50;
yGamble:=50;
gotoxy(45,14);
write(' ');
end;
if (iCounter mod 6=0) then
begin
repeat
xGamble:=Random(20);
yGamble:=Random(40);
iChance:=Random(2);
for iCrash:=a downto iTail do
if (AHead[iCrash]=xGamble) and (BHead[iCrash]=yGamble) then Break;
until (xGamble > 1) and (yGamble > 1) and (AHead[iCrash]<>xGamble) and (BHead[iCrash]<>yGamble);
Ch[xGamble,yGamble]:='?';
gotoxy(yGamble,xGamble);
write(Ch[xGamble,yGamble]);
gotoxy(46,12);
write('ARE YOU BRAVE ENOUGH?');
iGained:=Random(250);
iCounter:=iCounter + 1;
iMove:=0;
end;
if (xGamble=i) and (yGamble=j) then
begin
gotoxy(45,4);
write('Score: ');
gotoxy(45,4);
write('Score: ',iScore);
Ch[xGamble,yGamble]:='';
gotoxy(46,12);
write(' ');
if (iChance=1) then
begin
iScore:=iScore + iGained;
gotoxy(46,12);
write('YOU HAVE BONUS!');
end;
if (iChance=0) then
begin
iScore:=iScore - iGained;
gotoxy(46,12);
write('HA-HAH! YOU LOSE :-D');
end;
gotoxy(yGamble,xGamble);
write(Ch[xGamble,yGamble]);
xGamble:=50;
yGamble:=50;
end;
if (aFood=i) and (bFood=j) then
begin
iCounter:=iCounter + 1;
gotoxy(bFood,aFood);
write('');
iScore:=iScore + (10 * iFactor);
if (iScore > iLifeScore) then
begin
iLive:=iLive + 1; {HEEY!We have one more life!}
gotoxy(45,14);
write('WELL DONE! EXTRA LIFE!');
iLifeScore:=iLifeScore + 1500;
gotoxy(45,6);
write('Lives: ',iLive);
end;
gotoxy(45,4);
if SoundLock=True then
begin
delay(30000); {Music part when the snake feeds}
sound(200);
delay(10000);
sound(150);
delay(10000);
sound(150);
delay(30000);
sound(300);
delay(30000);
NoSound;
end;
write('Score: ');
textcolor(15);
gotoxy(45,4);
write('Score: ',iScore);
iList:=1;
if (iScore > HiScore[iList]) then
begin
gotoxy(45,10);
write('Hi-Score: ');
gotoxy(45,10);
write('Hi-Score: ',iScore);
gotoxy(45,8);
write('Leader: ',User);
end
else
begin
gotoxy(45,10);
write('Hi-Score: ');
gotoxy(45,10);
write('Hi-Score: ',HiScore[iList]);
gotoxy(45,8);
write('Leader: ',Name[iList]);
end;
repeat
aFood:=random(19);
bFood:=random(39);
for iCrash:=a downto iTail do
if (AHead[iCrash]=aFood) and (BHead[iCrash]=bFood) then break;
until ( (aFood>1) and (bFood>1) ) and ( (AHead[iCrash]<>aFood) and (BHead[iCrash]<>bFood) );
gotoxy(bFood,aFood);
Ch[aFood,bFood]:='~';
repeat
Color:=random(15);
until (Color > 8);
textcolor(Color);
write(Ch[aFood,bFood]);
Continue;
end;
gotoxy(BHead[iTail],AHead[iTail]);
Ch[AHead[iTail],BHead[iTail]]:=' ';
write(Ch[AHead[iTail],BHead[iTail]]);
iTail:=iTail + 1;
end; {End of Boolean}
until ( (i>21) or (i<2) or (j>41) or (j<2) ) or ( (AHead[iCrash]=i) and (BHead[iCrash]=j) );
if (i>21) or (i<2) or (j>41) or (j<2) then
begin
if SoundLock=True then
begin
for i:=1 to 3 do
begin
delay(30000);
sound(100);
delay(30000);
sound(125);
delay(30000);
sound(75);
delay(60000);
NoSound;
end;
end;
Break;
end;
if (AHead[iCrash]=i) and (BHead[iCrash]=j) then
begin
if SoundLock=True then
begin
for i:=1 to 3 do
begin
sound(350);
delay(60000);
sound(150);
delay(60000);
sound(70);
delay(60000);
NoSound;
end;
end;
Break;
end;
until KeyPressed;
iLive:=iLive - 1;
until (iLive=0);
gotoxy(20,8);
textcolor(28);
write('GAME OVER');
gotoxy(8,13);
write('Press any key to return menu..!');
Readkey;
textcolor(15);
iList:=6;
HiScore[iList]:=iScore;
iScore:=0;
for iList:=1 to 6 do
for k:=iList + 1 to 6 do
begin
if (HiScore[k] > HiScore[iList]) then
begin
iTemp:=HiScore[iList];
HiScore[iList]:=HiScore[k];
HiScore[k]:=iTemp;
{Score is ordered,let's order the name!}
StTemp:=Name[iList];
Name[iList]:= Name[k];
Name[k]:=StTemp;
end;
end;
end; {End of game part}
'2' :
begin
clrscr;
CreateFrame;
gotoxy(20,11);
writeln('1. Probably I can beat a turtle!');
gotoxy(20,12);
writeln('2. Let us run a little faster!');
gotoxy(20,13);
writeln('3. I feel as if I was a cheetah');
gotoxy(20,14);
writeln('4. Wind is my nickname!');
gotoxy(20,15);
writeln('5. My only opponent is Turkish Airlines!');
repeat
for k:=1 to 500 do
begin
gotoxy(31,18);
Write(' º');
delay(20000);
gotoxy(31,18);
write('** CHOOSE LEVEL **º');
if KeyPressed then Break;
delay(60000);
end;
ChLevel:=Readkey;
until(ChLevel in ['1','2','3','4','5'] );
case ChLevel of
'1': begin
iLevel:=1;
iFactor:=1;
end;
'2': begin
iLevel:=2;
iFactor:=2;
end;
'3': begin
iLevel:=3;
iFactor:=3;
end;
'4': begin
iLevel:=4;
iFactor:=4;
end;
'5': begin
iLevel:=5;
iFactor:=5;
end;
end;
end;
'3' :
begin {Outputs hi-score list}
clrscr;
for iList:=1 to 5 do
begin
writeln(iList,'. ',Name[iList],' ',HiScore[iList]);
end;
readkey;
end;
'4' : begin
clrscr;
writeln('Welcome!..Please write your name');
readln(User);
iList:=6;
name[iList]:=User;
end;
'5' : begin
clrscr;
writeln('1. Sound on');
writeln('2. Sound off');
repeat
Decision:=Readkey;
until (Decision in ['1','2']);
case Decision of
'1' : SoundLock:=True;
'2' : SoundLock:=False;
end;
end;
'6' : begin
clrscr;
gotoxy(25,13);
textcolor(red);
for i:=1 to 2 do
begin
clrscr; {I just wanted it's to seem a little more}
gotoxy(25,13);
write('TO BE CONTINUED...');
Delay(65000);
end;
end;
end;
until (Decision='6');
end.
{written by mr.stork}
{mr.stork@mynet.com}