unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TSpiel =
class(TForm)
Spielfeld: TImage;
Timer1: TTimer;
Punkte: TLabel;
rang: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
const
sup = 1;
sdown = 2;
sleft = 3;
sright = 4;
Wand = 5;
Essen = 6;
var
Spiel: TSpiel;
Karte:
array[1..150]
of array[1..150]
of integer;
// Doppeltes Array
Schlange:
array of TPoint;
Essenposition: Tpoint;
// position des Essens
schlangenlaenge,setlaenge, KeyDirection,Direction,level, P, HighScore: integer;
//HSFile: TIniFile;
implementation
uses Unit2;
{$R *.dfm}
procedure Spielflaeche(x,y: integer; color: Tcolor);
// Spielfeld zeichnen
begin
with Spiel.Spielfeld.canvas
do
begin
pen.color:= color;
brush.color:= color;
rectangle(x*5-4, y*5-4, x*5, y*5);
end;
end;
procedure Zeichnewand;
var
x, y, i: integer;
begin
for i:= 1
to 90
do
begin
x:= 1;
y:= i;
Spielflaeche(x, y, clblack);
Karte[x, y]:= Wand;
x:= 90;
// Feldgröße;
Spielflaeche(x, y, clblack);
Karte[x, y]:= Wand;
x:= i;
y:= 1;
Spielflaeche(x, y, clblack);
Karte[x, y]:= Wand;
y:= 90;
// Feldgröße
Spielflaeche(x, y, clblack);
Karte[x, y]:= Wand;
end;
end;
procedure Zeichnekarte;
var
x, y, i: integer;
begin
with Spiel.Spielfeld.Canvas
do
begin
brush.color:= clwhite;
rectangle(0, 0, 450, 450);
end;
x:= 0;
y:= 0;
for i:= 0
to 40
do
begin
with Spiel.Spielfeld.canvas
do
x:= x + 5;
y:= y + 5;
end;
Zeichnewand;
end;
procedure Zeichneschlange;
var
i: integer;
begin
Spielflaeche(Schlange[0].X, Schlange[0].Y, clred);
for i:= 1
to Schlangenlaenge
do
Spielflaeche(Schlange[i].X, Schlange[i].Y, clgreen);
end;
procedure Zeichneessen;
begin
Spielflaeche(Essenposition.x, Essenposition.y, clblue);
end;
procedure ErstelleEssen;
var
i: integer;
begin
Essenposition.X:= random(37) + 2;
Essenposition.Y:= random(37) + 2;
for i:= 0
to Schlangenlaenge
do
if (Schlange[i].X = Essenposition.X)
and (Schlange[i].Y = Essenposition.Y)
then
ErstelleEssen
else
Karte[Essenposition.x, Essenposition.y]:= Essen;
end;
procedure StartGame;
var
i, x, y: integer;
begin
//try
//HSFile:=TIniFile.Create('Highscore.ini');
//HighScore:= HSFile.Readinteger('Score', 'HighScore', 0);
//finally
//HSFile.Free;
//end;
//Spiel.HSDisplay.caption:= 'HighScore: ' + inttostr(HighScore);
Spiel.Timer1.Enabled:= true;
P:= 0;
Spiel.Punkte.Caption:= '
Punkte: ' + inttostr(P);
for x:= 1
to 40
do
for y:= 1
to 40
do
Karte[x, y]:= 0;
direction:= random(4)+1;
schlangenlaenge:= 8;
setlength(schlange, schlangenlaenge + 1);
schlange[0].x:= random(20) + 10;
schlange[0].y:= random(20) + 10;
for i:= 1
to schlangenlaenge
do
begin
schlange[i].Y:= schlange[0].Y;
schlange[i].X:= schlange[0].X;
end;
ErstelleEssen;
Zeichnekarte;
ZeichneEssen;
Zeichneschlange;
end;
procedure GameOver;
begin
Spiel.Timer1.Enabled:= false;
//try
//HSFile:=TIniFile.Create('Highscore.ini');
//if HSFile.Readinteger('Score', 'HighScore', 0) < Points
//then HSFile.Writeinteger('Score', 'Highscore', Points);
//finally
// HSFile.Free;
//end;
showmessage('
Spielvorbei!');
StartGame;
end;
procedure TSpiel.FormCreate(Sender: TObject);
begin
randomize;
Spiel.DoubleBuffered:= true;
StartGame;
end;
procedure TSpiel.Timer1Timer(Sender: TObject);
var i,c:integer;
begin
for i:= schlangenlaenge
downto 1
do
begin
schlange[i].y:= schlange[i-1].Y;
schlange[i].X:= schlange[i-1].X;
end;
if Direction = sUp
then
schlange[0].Y:= schlange[0].Y - 1
else if Direction = sDown
then
schlange[0].Y:= schlange[0].Y + 1
else if Direction = sLeft
then
schlange[0].X:= schlange[0].X - 1
else if Direction = sRight
then
schlange[0].X:= schlange[0].X + 1
else if Karte[schlange[0].X, schlange[0].y] = Wand
then
begin
GameOver;
exit;
end;
if Karte[schlange[0].X, schlange[0].Y] = Essen
then begin
P:= P + 25;
// Zählen der Punkte
Punkte.Caption:= '
Punkte: ' + inttostr(P);
//Punkte
schlangenlaenge:= schlangenlaenge + 1;
setlength(schlange, schlangenlaenge + 1);
Karte[Essenposition.x, Essenposition.y]:= 0;
ErstelleEssen;
end;
for c:= 1
to schlangenlaenge
do
if (schlange[0].X = schlange[c].X)
and (schlange[0].Y = schlange[c].Y)
then
begin
GameOver;
exit;
end;
Zeichnekarte;
Zeichneessen;
ZeichneSchlange;
//LVL Backgroundwechsel
if p=100
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl2.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=150
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl3.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=200
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl4.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=250
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl5.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=300
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl6.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=350
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl7.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=400
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl8.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=450
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl9.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-20;
end;
if p=500
then
begin
Spielfeld.Picture.LoadFromFile('
Bilder/lvl10.bmp');
level:=level+1;
rang.Caption:='
Level: '+inttostr(level);
timer1.Interval:=timer1.interval-19;
end;
end;
procedure TSpiel.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
if (key = vk_up)
and (Direction <> sDown)
then
Direction:= sUp ;
if (key = vk_down)
and (Direction <> sUp)
then
Direction:= sDown;
if (key = vk_left)
and (Direction <> sRight)
then
Direction:= sleft;
if (key = vk_right)
and (Direction <> sLeft)
then
Direction:= sright;
end;
end.