Thema: Delphi Snake (das Spiel)

Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Snake (das Spiel)

  Alt 25. Mai 2004, 15:08
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.
I come from outer space to save the human race
  Mit Zitat antworten Zitat