AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Form1.Close

Ein Thema von dennis1707 · begonnen am 22. Feb 2012 · letzter Beitrag vom 22. Feb 2012
Antwort Antwort
dennis1707

Registriert seit: 21. Feb 2012
4 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit Form1.Close

  Alt 22. Feb 2012, 19:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.098 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 19:42
Du bist doch schon innerhalb der Form-Klasse, warum willst du dann über die globale Formular-Variable drauf zugreifen? (anstatt über Self)

Tipp:
Form1: TMenuItem;
Tja, das kennt dann wohl kein Close.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Feb 2012 um 19:49 Uhr)
  Mit Zitat antworten Zitat
dennis1707

Registriert seit: 21. Feb 2012
4 Beiträge
 
Delphi 7 Professional
 
#3

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 19:49
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.288 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 20:57
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 Das wirst du wohl nicht mit Absicht gemacht haben. C&P Fehler ?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 20:58
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
Heiko
  Mit Zitat antworten Zitat
dennis1707

Registriert seit: 21. Feb 2012
4 Beiträge
 
Delphi 7 Professional
 
#6

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 22:15
Ok, dass mit dem Menüpunkt hab ich jetzt gefunden und geändert.
Aber ich könnte doch auch anstatt:

  Form1: TForm1; einfach Form1 lassen oder?

mfg

PS: Super schnelle Hilfe, das gefällt mir!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.098 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 22:17
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".

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Feb 2012 um 22:25 Uhr)
  Mit Zitat antworten Zitat
dennis1707

Registriert seit: 21. Feb 2012
4 Beiträge
 
Delphi 7 Professional
 
#8

AW: Problem mit Form1.Close

  Alt 22. Feb 2012, 23:29
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.

Geändert von dennis1707 (23. Feb 2012 um 16:46 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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