Snake game in pascal
controls are wasd.
SCAR Code:
program Snake;
uses
crt;
type
TPoint = record
x, y: Integer;
end;
var
I, II, x, y, Suunta, Pisteet, x2, y2, elamat: Integer;
K: Char;
IA: Array [0..10000000] of TPoint;
Syoty: Boolean;
procedure Setup;
begin
Clrscr;
Window (1,1,45, 45);
WriteLn('---------------------------------------');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('| |');
WriteLn('---------------------------------------');
Elamat := 1;
I := 0;
Suunta := 0;
Pisteet := 0;
x := 15;
y := 10;
Syoty := True;
IA[I].x := x;
IA[I].y := y;
end;
procedure NaytaPisteet;
begin
GotoXY(3,24);
WriteLn('Score: ', Pisteet);
GotoXY(20,24);
WriteLn('Lifes: ', Elamat);
end;
begin
repeat
Setup;
repeat
if KeyPressed then
begin
K := ReadKey;
case K of
'w': if not (Suunta = 2) then Suunta := 1;
's': if not (Suunta = 1) then Suunta := 2;
'a': if not (Suunta = 4) then Suunta := 3;
'd': if not (Suunta = 3) then Suunta := 4;
end;
end;
if (Suunta = 1) or (Suunta = 2) then Delay(110)
else Delay(90);
if I > Pisteet-1 then
begin
GotoXY(IA[I-Pisteet].x, IA[I-Pisteet].y);
WriteLn(' ');
end;
case Suunta of
1: if y = 2 then y := 22
else y := y-1;
2: if y = 22 then y := 2
else y := y+1;
3: if x = 2 then x := 38
else x := x-1;
4: if x = 38 then x := 2
else x := x+1;
end;
if Suunta > 0 then
begin
I := I+1;
IA[I].x := x;
IA[I].y := y;
end;
if syoty then
begin
repeat
x2 := 2+Random(37);
y2 := 2+Random(21);
for II := I-Pisteet to I do
begin
if (x2=IA[II].x) and (y2=IA[II].y) then
Break else Continue;
end;
until(II > I-1);
GotoXY(x2, y2);
WriteLn('O');
Syoty := False;
end;
if (x = x2) and (y = y2) then
begin
Syoty := True;
Pisteet := Pisteet+1;
end;
for II := I-Pisteet to I-1 do
if (x=IA[II].x) and (y=IA[II].y) then
begin
Elamat := Elamat-1;
Break;
end;
GotoXY(x, y);
if Syoty then WriteLn('@')
else
Case Suunta of
0..2: WriteLn('|');
3..4: WriteLn('-');
end;
NaytaPisteet;
until(Elamat = 0);
WriteLn('Q = quit, N = new game');
Delay(2000);
repeat
if ReadKey = 'q' then Halt;
if ReadKey = 'n' then Break;
until(False);
until(false);
end.