Hallo,
ich halte das für ein Tutorial ziemlich ungeeignet.
Der Code verstößt in allen Punkten gegen die Styleguides in Luckie's Artikel
CodeDesign
Hier meine Kritikpunkte:
Delphi-Quellcode:
public
{ Public-Deklarationen }
procedure enable_buttons(status: Boolean);
procedure spiel_ende;
procedure neues_futter;
procedure paint_map;
procedure calc_snake;
end;
Die proceduren werden von keinem anderen Objekt aufgerufen, noch werden sie außerhalb des Forms benötigt. Deshalb gehöre´n sie in den private Abschnitt.
Delphi-Quellcode:
var
map: Array [0..breite] of Array [0..hoehe] of Integer;
kopf,
richtung,
futter: TPoint;
laenge: Integer;
ende: Boolean;
Globale Variablen sind extrem schlechter Stil und sind unbedingt zu vermeiden.
Delphi-Quellcode:
procedure TForm1.calc_snake;
var
i, j: Integer;
begin
for i := 0
to breite
do
for j := 0
to hoehe
do
if map[i, j]>0
then
Dec(map[i, j]);
Inc(kopf.X, richtung.X);
Inc(kopf.Y, richtung.Y);
if (kopf.X<0)
or (kopf.X>breite)
or (kopf.Y<0)
or (kopf.Y>hoehe)
then
begin
spiel_ende;
ShowMessage('
Sie haben den Rand berührt!');
end;
if map[kopf.X, kopf.Y]>0
then
begin
spiel_ende;
ShowMessage('
Sie haben sich selbst gebissen!');
end;
if (kopf.X=futter.X)
and (kopf.Y=futter.Y)
then
begin
Inc(laenge);
neues_futter;
end;
map[kopf.X, kopf.Y] := laenge;
end;
Berechnung ist mit der Benutzeroberfläche verbunden. Evt wäre eine function, die ein dem
Ereignis entsprechendes Ergebnis zurück liefert besser.
Delphi-Quellcode:
for i := 0
to breite
do
for j := 0
to hoehe
do
if map[i, j]>0
then
Dec(map[i, j]);
Wenn man lange genug spielt könnte map[i,j] evt. den gültigen Bereich eines Integers verlassen !!! Das kann zu schwer auffindbaren Fehlern führen.
Eigentlich ist es Beispiel um zu zeigen wie man es nicht machen sollte.