AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Form1.Close

Ein Thema von dennis1707 · begonnen am 22. Feb 2012 · letzter Beitrag vom 22. Feb 2012
 
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
 


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 06:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz