Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Problem mit Form1.Close (https://www.delphipraxis.net/166636-problem-mit-form1-close.html)

dennis1707 22. Feb 2012 19:25

Problem mit Form1.Close
 
Hey leute hab das spiel Snake etwas umgeändert und wollte es mit einem Button schließen.
Anfangs ging es aber dann hab ich wohl irgendwas geändert und jetzt kommt immer eine Fehlermeldung

[Error] Unit1.pas(349): Undeclared identifier: 'Close'

Ich hoffe ich bin hier richtig und ihr könnt mir helfen.
mfg Dennis

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ExtDlgs, JPEG, XPMan, Menus, MPlayer;

const
  raster = 15;
  hoehe = 99;
  breite = 99;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button_Start: TButton;
    Label1: TLabel;
    Label_Apfelanzahl: TLabel;
    Panel1: TPanel;
    Label4: TLabel;
    Label5: TLabel;
    ColorDialog_HG: TColorDialog;
    ColorDialog_Futter: TColorDialog;
    ColorDialog_Schlange: TColorDialog;
    ColorDialog_Hindernis: TColorDialog;
    Spielfeld: TImage;
    MainMenu1: TMainMenu;
    Schwierigkeit1: TMenuItem;
    Leicht1: TMenuItem;
    Mittel1: TMenuItem;
    Schwer1: TMenuItem;
    Einstellungen1: TMenuItem;
    Image1: TImage;
    Label_Schlange: TLabel;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    Anleitung1: TMenuItem;
    VonSebastianundDennis1: TMenuItem;
    Form1: TMenuItem;
    Quadrate1: TMenuItem;
    Kreise1: TMenuItem;
    Farben1: TMenuItem;
    Hintergrundfarbe1: TMenuItem;
    Futterfarbe1: TMenuItem;
    Schlangenfarbe1: TMenuItem;
    Hindernisfarbe1: TMenuItem;
    procedure Button_StartClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    procedure Leicht1Click(Sender: TObject);
    procedure Mittel1Click(Sender: TObject);
    procedure Schwer1Click(Sender: TObject);
    procedure Quadrate1Click(Sender: TObject);
    procedure Kreise1Click(Sender: TObject);
    procedure Anleitung1Click(Sender: TObject);
    procedure Futterfarbe1Click(Sender: TObject);
    procedure Hintergrundfarbe1Click(Sender: TObject);
    procedure Hindernisfarbe1Click(Sender: TObject);
    procedure Schlangenfarbe1Click(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
  private
    hoehe, breite:Integer;
    kopf:TPoint;
    richtung:TPoint;
    futter:TPoint;
    Hindernis:TPoint;
    laenge,anzahl:Integer;
    Apfel:Integer;
    ende:Boolean;
    procedure snake_ende;
    procedure snake_futter;
    procedure neue_hindernisse(_anzahl:Integer);
    procedure paint_map;
    procedure calc_snake;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  map: Array [0..breite] of Array [0..hoehe] of Integer;

implementation

{$R *.dfm}

procedure TForm1.snake_ende;
begin
  ende:=True;
  Timer1.Enabled:=False;
  Button_Start.Enabled:=True;
end;

procedure TForm1.snake_futter;
begin
  Inc(Apfel);
  Label_Apfelanzahl.Refresh;
  futter:=Point(Random(breite), Random(hoehe));
  while map[futter.X, futter.Y]<>0 do
    futter:=Point(Random(breite), Random(hoehe));
    map[futter.X,futter.Y]:=-1;
end;

procedure TForm1.neue_hindernisse(_anzahl:Integer);
var
  I:Integer;
begin
  for I:=0 to _anzahl-1 do
  begin
    Hindernis:=Point(Random(breite), Random(hoehe));
    map[Hindernis.X,Hindernis.Y]:=-2;
  end;
end;

procedure TForm1.paint_map;
var
  i, j: Integer;
  col: TColor;
begin
    for i:=0 to breite do
    for j:=0 to hoehe do
    begin
      case map[i, j] of
        -2: col:=ColorDialog_Hindernis.Color;
        -1: col:=ColorDialog_Futter.Color;
         0: col:=ColorDialog_HG.Color;
      else
        col:=ColorDialog_Schlange.Color;
      end;
      Spielfeld.Canvas.Brush.Color:=col;
      if Kreise1.Checked then
      begin
        Spielfeld.Canvas.Brush.Color:=ColorDialog_HG.Color;
        Spielfeld.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
        Spielfeld.Canvas.Brush.Color:=col;
        Spielfeld.Canvas.Ellipse(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
      end
      else
        Spielfeld.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
    end;
end;

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 Leicht1.Checked then
  begin
    if kopf.X<0 then
      kopf.X:=breite;
    if kopf.X>breite then
      kopf.X:=0;
    if kopf.Y<0 then
      kopf.Y:=hoehe;
    if kopf.Y>hoehe then
      kopf.Y:=0;
  end
  else
  begin
    if (kopf.X<0) or (kopf.X>breite) or (kopf.Y<0) or (kopf.Y>hoehe) then
    begin
      snake_ende;
      ShowMessage('Du bist von der Weltenscheibe gefallen! '+#13+
                  '(Die Schlange wusste nicht, dass die Erde eine Kugel ist.)');
    end;
  end;

  if (map[kopf.X, kopf.Y]>0) and (not ende) then
  begin
    snake_ende;
    ShowMessage('Du hast dich selbst gebissen! '+#13+'(Die letzten Gedanken der '+
                'Schlange: '+#13+'"Bin ich eigentlich eine Giftschlange...?")');
  end;
  if (kopf.X=futter.X) and (kopf.Y=futter.Y) then
  begin
    if Schwer1.Checked then
      laenge:=laenge+3;
    if Mittel1.Checked then
      laenge:=laenge+2;
    if Leicht1.Checked then
      Inc(laenge);
    snake_futter;
  end;
  if (map[kopf.X, kopf.Y]=-2) and (not ende) then
  begin
    snake_ende;
    ShowMessage('Du bist gegen ein Hindernis gelaufen! '+#13+'(Vielleicht '+
                'wärst du besser eine Brillenschlange geworden...)');
  end;
  map[kopf.X, kopf.Y]:=laenge;
  Label_Schlange.Caption:=IntToStr(laenge);
  Label_Apfelanzahl.Caption:=IntToStr(Apfel);
end;

procedure TForm1.Button_StartClick(Sender: TObject);
var
  i, j: Integer;
begin
  Spielfeld.Refresh;
  Label_Apfelanzahl.Refresh;
  breite:=30;
  hoehe:=30;
  Spielfeld.Width:=breite*raster;
  Spielfeld.Height:=hoehe*raster;
  Apfel:=-1;
  Button_Start.Enabled:=False;
  for i:=0 to breite do
    for j:=0 to hoehe do
      map[i, j]:=0;
  kopf:=Point(1, 1);
  laenge:=5;

  richtung:=Point(0, 1);
  map[kopf.X, kopf.Y]:=laenge;
  snake_futter;
  paint_map;
  ende:=False;
  Timer1.Enabled:=true;
  neue_hindernisse(anzahl);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  calc_snake;
  if not ende then
    paint_map;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.HintHidePause:=4000;
  Spielfeld.Height:=1000;
  Spielfeld.Width:=1000;
  Randomize;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_right then
    if richtung.X=0 then
      begin
      richtung:=Point(1, 0)
      end;
  if Key=VK_left then
    if richtung.X=0 then
      richtung:=Point(-1, 0);
  if Key=VK_up then
    if richtung.Y=0 then
      richtung:=Point(0, -1);
  if Key=VK_down then
    if richtung.Y=0 then
      richtung:=Point(0, 1);
  if Key=VK_Escape then
    begin
     snake_ende;
      if MessageDlg('Möchtest du das Spiel schließen?', mtCustom, [mbYes, mbNo], 0) = mrYes then

      end;
  if Key=VK_Space then
    begin
    if Timer1.Enabled then
      Timer1.Enabled:=false
    else
      Timer1.Enabled:=true;
    end;
 end;

procedure TForm1.Leicht1Click(Sender: TObject);
begin
    anzahl:=0;
    timer1.Interval:=135;
    Leicht1.Checked:=true;
    ShowMessage('Die Schlange kann durch Wände '+#13+
                'gehen und bewegt sich langsam.'+#13+
                'Es erscheinen keine Hindernisse.');
end;

procedure TForm1.Mittel1Click(Sender: TObject);
begin
    anzahl:=10;
    timer1.Interval:=100;
    Mittel1.Checked:=true;
    ShowMessage('Die Schlange kann nicht durch Wände '+#13+
                'gehen und bewegt sich schneller.'+#13+
                'Sie wächst doppelt so schnell.'+#13+
                'Es erscheinen 10 Hindernisse.');
end;

procedure TForm1.Schwer1Click(Sender: TObject);
begin
  anzahl:=20;
  timer1.Interval:=50;
  Schwer1.Checked:=true;
  ShowMessage('Die Schlange kann nicht durch Wände '+#13+
              'gehen und bewegt sich am schnellsten.'+#13+
              'Sie wächst dreimal so schnell wie üblich.'+#13+
              'Es erscheinen 20 Hindernisse.');
end;

procedure TForm1.Quadrate1Click(Sender: TObject);
begin
  Quadrate1.Checked:=true;
end;

procedure TForm1.Kreise1Click(Sender: TObject);
begin
  Kreise1.Checked:=true;
end;

procedure TForm1.Anleitung1Click(Sender: TObject);
begin
 ShowMessage('Anleitung'+#13+'Pfeiltasten = Steuerung'+#13+'Leertaste = Pause'+#13+'Esc = Beenden');
end;

procedure TForm1.Futterfarbe1Click(Sender: TObject);
begin
  ColorDialog_Futter.Execute;
end;

procedure TForm1.Hintergrundfarbe1Click(Sender: TObject);
begin
  ColorDialog_HG.Execute;
end;

procedure TForm1.Hindernisfarbe1Click(Sender: TObject);
begin
  ColorDialog_Hindernis.Execute;
end;

procedure TForm1.Schlangenfarbe1Click(Sender: TObject);
begin
  ColorDialog_Schlange.Execute;
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  snake_ende;
  if MessageDlg('Möchtest du das Spiel schließen?', mtCustom, [mbYes, mbNo], 0) = mrYes then
  Form1.Close;

end;

end.

himitsu 22. Feb 2012 19:42

AW: Problem mit Form1.Close
 
Du bist doch schon innerhalb der Form-Klasse, warum willst du dann über die globale Formular-Variable drauf zugreifen? (anstatt über Self)

Tipp:
Delphi-Quellcode:
Form1: TMenuItem;

Tja, das kennt dann wohl kein Close. :stupid:

Aber ich bin mir fast sicher, daß dein Delphi dir sagen könnte, warum dieses Form1 das Close nicht kennt. (z.B. Strg+Linksklick)
Aber sicherheitshalber: Welche Delphi-Version nutzt du denn? (entweder immer in den Beiträgen nennen, oder einfach im Forenprofil eintragen)


PS: Warum ist map global deklariert?

PPS: Ein Zeilenumbruch ist eigentlich #13#10 (Windows) oder sLineBreak und nicht WENIGER #13 (Mac), aber wenn schon, dann eher #10 (Linux), welches von Windows besser verstanden wird.

dennis1707 22. Feb 2012 19:49

AW: Problem mit Form1.Close
 
Danke hat geklappt, ich frag mich nur warum das so vor ein paar stunden noch funktioniert hat :)
Die variable map hab ich jetzt auch in privat gezogen doch was meinst du genau mit:

Form1: TMenuItem;

bzw. was verändert sich dadurch ?

mfg

haentschman 22. Feb 2012 20:57

AW: Problem mit Form1.Close
 
Deine Form heißt auch Form1.
Delphi-Quellcode:
var
  Form1: TForm1;
Doppelte Namen gehen eh nicht...und einen Menüpunkt Form1 nennen ist nicht gerade glücklich :zwinker: Das wirst du wohl nicht mit Absicht gemacht haben. C&P Fehler ? :wink:

hoika 22. Feb 2012 20:58

AW: Problem mit Form1.Close
 
Hallo,

du hast im Moment 2 Variablen Form1, TForm1 und TMenuItem.
Das kann irgendwann Verständnis-Probleme geben.
Benenne deine Menupunkte z.B. MnuForm1 statt nur Form1.


Heiko

dennis1707 22. Feb 2012 22:15

AW: Problem mit Form1.Close
 
Ok, dass mit dem Menüpunkt hab ich jetzt gefunden und geändert.
Aber ich könnte doch auch anstatt:

Delphi-Quellcode:
  Form1: TForm1;
einfach Form1 lassen oder?

mfg

PS: Super schnelle Hilfe, das gefällt mir! :)

himitsu 22. Feb 2012 22:17

AW: Problem mit Form1.Close
 
Genau aus dem Grund, warum "map" nicht global sein sollte ( Es würde sich doch bestimmt bei Apfel, Futter und Co. ganz wohl fühlen? ), sondern in dem Scope/Gültigkeitsbereich deklariert sein sollte, damit diese Variable so nah wie möglich an der Verwendung liegt und sich somit schwerer eine andere "gleichnamige" Variable dazwischenschleichen kann, sollte man auch keine globalen Variablen verwenden.

Im Falle von "map" würde man dann das naheliegenste bekommen,
geneuso, wie du hier das naheliegenste Feld "Form1" abbekommen hast und nicht die böse globale Variable "Form1". :angle2:

Zitat:

einfach Form1 lassen oder?
Nein, davon ist abzuraten.
Du bist schon in der Form, also greif auch direkt drauf zu.

Delphi-Quellcode:
procedure TForm1.Beenden1Click(Sender: TObject);
begin
  snake_ende;
  if MessageDlg('Möchtest du das Spiel schließen?', mtCustom, [mbYes, mbNo], 0) = mrYes then
    Close;
end;

// oder

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  Self.snake_ende;
  if MessageDlg('Möchtest du das Spiel schließen?', mtCustom, [mbYes, mbNo], 0) = mrYes then
    Self.Close;
end;
Vergleich: Du kannst von der Stube direkt in die Küche gehn,
oder du kannst aber auch erst in den Keller und von dort mit dem Ersatzschlüssel durch die Hintertür zur Küche.
(Passe aber auf, daß du dort nicht den falschen Schlüssel, zur Nachbarwohnung erwischst ... genau sowas passiert mir globalen Generalschlüsseln ganz schnell mal)

dennis1707 22. Feb 2012 23:29

AW: Problem mit Form1.Close
 
Ok so sieht es jetzt gerade aus.
Werde morgen nochmal wegen einen Pause Button und wegen dem richtigen Deaktivieren und Aktivieren der Menüleiste/ der Buttons schauen.

*Die Schlange geht manchmal aus dem Bildschirm raus wobei sie ja eigentlich auf der anderen seite wiederkommen soll. Jmd eine Idee woran das liegt?
*Und noch etwas, ist es möglich das Raster bei einem helleren Hintergrund zu verstecken ?

mfg :)

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ExtDlgs, JPEG, XPMan, Menus;

const
  raster = 15;
  hoehe = 30;
  breite = 30;

type
  TForm1 = class(TForm)
    Timer1:        TTimer;
    Button_Start:  TButton;
    Panel1:           TPanel;
    Label1:           TLabel;
    Label2:           TLabel;
    Label3:           TLabel;
    Label_Apfelanzahl: TLabel;
    Label_Schlange:   TLabel;
    ColorDialog_HG:       TColorDialog;
    ColorDialog_Futter:   TColorDialog;
    ColorDialog_Schlange: TColorDialog;
    ColorDialog_Hindernis: TColorDialog;
    Spielfeld:    TImage;
    Image1:       TImage;
    MainMenu1:             TMainMenu;
    Schwierigkeit1:        TMenuItem;
    Leicht1:               TMenuItem;
    Mittel1:               TMenuItem;
    Schwer1:               TMenuItem;
    Einstellungen1:        TMenuItem;
    Schlangenform1:        TMenuItem;
    Quadrate1:             TMenuItem;
    Kreise1:               TMenuItem;
    Farben1:               TMenuItem;
    Hintergrundfarbe1:     TMenuItem;
    Futterfarbe1:          TMenuItem;
    Schlangenfarbe1:       TMenuItem;
    Hindernisfarbe1:       TMenuItem;
    N1:                    TMenuItem;
    Beenden1:              TMenuItem;
    Anleitung1:            TMenuItem;
    VonSebastianundDennis1: TMenuItem;

    procedure Button_StartClick (Sender: TObject);
    procedure Timer1Timer      (Sender: TObject);
    procedure FormCreate       (Sender: TObject);
    procedure FormKeyDown      (Sender: TObject; var Key: Word;Shift: TShiftState);
    procedure Leicht1Click     (Sender: TObject);
    procedure Mittel1Click     (Sender: TObject);
    procedure Schwer1Click     (Sender: TObject);
    procedure Quadrate1Click   (Sender: TObject);
    procedure Kreise1Click     (Sender: TObject);
    procedure Anleitung1Click  (Sender: TObject);
    procedure Futterfarbe1Click (Sender: TObject);
    procedure Hintergrundfarbe1Click(Sender: TObject);
    procedure Hindernisfarbe1Click (Sender: TObject);
    procedure Schlangenfarbe1Click (Sender: TObject);
    procedure Beenden1Click        (Sender: TObject);
  private
    map: Array [0..breite] of Array [0..hoehe] of Integer;
    kopf, richtung, futter, Hindernis:TPoint;
    laenge, anzahl, apfel:Integer;
    ende:Boolean;
    procedure snake_ende;
    procedure snake_futter;
    procedure neue_hindernisse(anzahl:Integer);
    procedure paint_map;
    procedure calc_snake;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.snake_ende;
begin
  ende:=True;
  Timer1.Enabled:=False;
  Button_Start.Enabled:=True;
end;

procedure TForm1.snake_futter;
begin
   Inc(apfel);
   Label_Apfelanzahl.Refresh;
   futter:=Point(Random(breite), Random(hoehe));
  while map[futter.X, futter.Y]<>0 do
    futter:=Point(Random(breite), Random(hoehe));
    map[futter.X,futter.Y]:=-1;
end;

procedure TForm1.neue_hindernisse(anzahl:Integer);
var
  I:Integer;
begin
  for I:=0 to anzahl-1 do
  begin
    Hindernis:=Point(Random(breite), Random(hoehe));
    map[Hindernis.X,Hindernis.Y]:=-2;
  end;
end;

procedure TForm1.paint_map;
var
  i, j: Integer;
  farbe: TColor;
begin
    for i:=0 to breite do
     for j:=0 to hoehe do
      begin
       case map[i, j] of
         -2: farbe:=ColorDialog_Hindernis.Color;
         -1: farbe:=ColorDialog_Futter.Color;
          0: farbe:=ColorDialog_HG.Color;
       else
             farbe:=ColorDialog_Schlange.Color;
      end;
       Spielfeld.Canvas.Brush.Color:=farbe;
      if Kreise1.Checked then
       begin
         Spielfeld.Canvas.Brush.Color:=ColorDialog_HG.Color;
         Spielfeld.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
         Spielfeld.Canvas.Brush.Color:=farbe;
         Spielfeld.Canvas.Ellipse(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
       end
      else
         Spielfeld.Canvas.FillRect(Rect(i*raster, j*raster, (i+1)*raster, (j+1)*raster));
    end;
end;

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 Leicht1.Checked then
   begin
     if kopf.X<0 then
       kopf.X:=breite;
     if kopf.X>breite then
       kopf.X:=0;
     if kopf.Y<0 then
       kopf.Y:=hoehe;
     if kopf.Y>hoehe then
       kopf.Y:=0;
   end
  else
   begin
     if (kopf.X<0) or (kopf.X>breite) or (kopf.Y<0) or (kopf.Y>hoehe) then
      begin
       snake_ende;
       ShowMessage('Du bist von der Welt gefallen! '+#13#10+
                   'Ist die Erde nicht eine Kugel?');
      end;
  end;

  if (map[kopf.X, kopf.Y]>0) and (not ende) then
  begin
    snake_ende;
    ShowMessage('Du hast dich selbst gebissen!'+#13#10+
                'Bin ich eigentlich eine Giftschlange?');
  end;
  if (kopf.X=futter.X) and (kopf.Y=futter.Y) then
  begin
    if Schwer1.Checked then
      laenge:=laenge+3;
    if Mittel1.Checked then
      laenge:=laenge+2;
    if Leicht1.Checked then
      Inc(laenge);
    snake_futter;
  end;
  if (map[kopf.X, kopf.Y]=-2) and (not ende) then
  begin
    snake_ende;
    ShowMessage('Du bist gegen ein Hindernis gelaufen! '+#13#10+'Vielleicht '+
                'wärst du besser eine Brillenschlange geworden!');
  end;
  map[kopf.X, kopf.Y]:=laenge;
  Label_Schlange.Caption:=IntToStr(laenge);
  Label_Apfelanzahl.Caption:=IntToStr(apfel);
end;

procedure TForm1.Button_StartClick(Sender: TObject);
var
  i, j: Integer;
begin
  Spielfeld.Refresh;
  Label_Apfelanzahl.Refresh;
  Spielfeld.Width:=breite*raster;
  Spielfeld.Height:=hoehe*raster;
  Button_Start.Enabled:=False;
  for i:=0 to breite do
    for j:=0 to hoehe do
      map[i, j]:=0;
  kopf:=Point(0, 15);
  laenge:=6;
  apfel :=-1;
  richtung:=Point(1, 0);
  map[kopf.X, kopf.Y]:=laenge;
  snake_futter;
  paint_map;
  ende:=False;
  Timer1.Enabled:=true;
  neue_hindernisse(anzahl);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  calc_snake;
  if not ende then
    paint_map;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.HintHidePause:=4000;
  Spielfeld.Height:=1000;
  Spielfeld.Width:=1000;
  Randomize;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_right then
    if richtung.X=0 then
      begin
      richtung:=Point(1, 0)
      end;
  if Key=VK_left then
    if richtung.X=0 then
      richtung:=Point(-1, 0);
  if Key=VK_up then
    if richtung.Y=0 then
      richtung:=Point(0, -1);
  if Key=VK_down then
    if richtung.Y=0 then
      richtung:=Point(0, 1);
  if Key=VK_Escape then
    begin
     snake_ende;
     Showmessage('Die Runde ist beendet')
      end;
  if Key=VK_Space then
    begin
    if Timer1.Enabled then
      begin
      Timer1.Enabled:=false;
      Button_Start.Enabled:=true
      end
    else
        Timer1.Enabled:=true;
    end;
 end;

procedure TForm1.Leicht1Click(Sender: TObject);
begin
    anzahl:=0;
    timer1.Interval:=135;
    Leicht1.Checked:=true;
    ShowMessage('Die Schlange kann durch Wände '+#13#10+
                'gehen und bewegt sich langsam.'+#13#10+
                'Es erscheinen keine Hindernisse.');
end;

procedure TForm1.Mittel1Click(Sender: TObject);
begin
    anzahl:=10;
    timer1.Interval:=100;
    Mittel1.Checked:=true;
    ShowMessage('Die Schlange kann nicht durch Wände '+#13#10+
                'gehen und bewegt sich schneller.'+#13#10+
                'Sie wächst doppelt so schnell.'+#13#10+
                'Es erscheinen 10 Hindernisse.');
end;

procedure TForm1.Schwer1Click(Sender: TObject);
begin
  anzahl:=20;
  timer1.Interval:=50;
  Schwer1.Checked:=true;
  ShowMessage('Die Schlange kann nicht durch Wände '+#13#10+
              'gehen und bewegt sich am schnellsten.'+#13#10+
              'Sie wächst dreimal so schnell wie üblich.'+#13#10+
              'Es erscheinen 20 Hindernisse.');
end;

procedure TForm1.Quadrate1Click(Sender: TObject);
begin
  Quadrate1.Checked:=true;
end;

procedure TForm1.Kreise1Click(Sender: TObject);
begin
  Kreise1.Checked:=true;
end;

procedure TForm1.Anleitung1Click(Sender: TObject);
begin
 ShowMessage('Anleitung'+#13#10+'Pfeiltasten = Steuerung'+#13#10+'Leertaste = Pause'+#13#10+'Esc = Beenden');
end;

procedure TForm1.Futterfarbe1Click(Sender: TObject);
begin
  ColorDialog_Futter.Execute;
end;

procedure TForm1.Hintergrundfarbe1Click(Sender: TObject);
begin
  ColorDialog_HG.Execute;
end;

procedure TForm1.Hindernisfarbe1Click(Sender: TObject);
begin
  ColorDialog_Hindernis.Execute;
end;

procedure TForm1.Schlangenfarbe1Click(Sender: TObject);
begin
  ColorDialog_Schlange.Execute;
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  snake_ende;
  if MessageDlg('Möchtest du das Spiel schließen?', mtCustom, [mbYes, mbNo], 0) = mrYes then
     Close
     else
     Timer1.Enabled:=true;

end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz