Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Groupboxen, Comboboxen (https://www.delphipraxis.net/148321-groupboxen-comboboxen.html)

Swagger Jackin 27. Feb 2010 16:53


Groupboxen, Comboboxen
 
Ich hab auf einer Form zwei Groupboxen, bei der einen 3 und bei der anderen 5 Checkboxen drauf. Dazu kommt eine Combobox wo ich zwei Spielmodi aussuchen kann. Die Form startet vor dem eigentlichen Spiel. Der Spieler sucht sich die Musik, den Schwierigkeitsgrad und den Spielmodi aus. Meine Frage: Ich wollte eine if then else abfrage machen. Wenn der Spieler auf den Starten Button drückt, muss er jeweils immer eine Checkbox in beiden Groupboxen angeklickt haben, einen Spielmodi bei der Checkbox gewählt haben, er muss drei Einstellungen gewählt haben, dann startet das Spiel, sonst soll es noch mal Showmessage zeigen. Wie kann ich das schreiben ?
Das Problem steht nach der WICHTIG!!!!!!!!!!!!!!!!!!.

Delphi-Quellcode:
{=============================================================================================================================}
procedure TForm15.Button1.Click;
begin
  begin
    if Checkbox1.Checked then Showmessage ('Sie haben Leicht gewählt');
    if Checkbox2.Checked then Showmessage ('Sie haben Mittel gewählt');
    if Checkbox3.Checked then Showmessage ('Sie haben Schwer gewählt');
    if Checkbox4.Checked then Showmessage ('Sie haben Music1 gewählt');
    if Checkbox5.Checked then Showmessage ('Sie haben Music2 gewählt');
    if Checkbox6.Checked then Showmessage ('Sie haben Music3 gewählt');
    if Checkbox7.Checked then Showmessage ('Sie haben Music4 gewählt');
    if Checkbox8.Checked then Showmessage ('Sie haben Music5 gewählt');
    if ComboBox1.ItemIndex = 0 then Showmessage ('Sie haben Klassik gewählt');
    if ComboBox1.ItemIndex = 1 then Showmessage ('Sie haben Spezial gewählt');
  end;
WICHTIG!!!!!!!!!!!
if // hier brauch ich Hilfe --> wenn eine Checkbox geklickt bei Groupbox 1 und 2 sowie einen Spielmodi bei Combobox gewählt dann
then
  begin
    if MessageDlg('Wirklich Beenden ?', mtInformation,[mbYes,mbNo],0)=6; // Frage gestellt bevor Start
    then Form15.Close
  end;
else // wenn es nicht erfüllt ist
  begin
    Showmessage('Bitte wähle einen Spielmodus, einen Schwierigkeitsgrad und eine Musik');
    // keine drei Einstellungen gewählt deswegen Showmessage
  end;
end;
{=============================================================================================================================}
end.

DeddyH 27. Feb 2010 17:00

Re: Groupboxen, Comboboxen
 
IMHO hast Du für die Auswahl die falschen Komponenten gewählt. Was geschieht denn, wenn der Nutzer Musik1 und Musik2 angehakt hat? Ich würde an Deiner Stelle auf RadioGroups oder weitere ComboBoxen ausweichen, da kannst Du einen Standard definieren und es gibt garantiert auch nur eine einzige Auswahlmöglichkeit.

[edit] *Ääätsch*, schneller :tongue: [/edit]

Jens Hartmann 27. Feb 2010 17:01

Re: Groupboxen, Comboboxen
 
Hallo,

warum nimmst Du keine RadioGroup und prüfst einfach auf...

Delphi-Quellcode:
  case RadioGruop.ItemIndex of
    0:...
    1:...
Hat auch den Vorteil, das immer ein Modus aktiv ist. Es wäre gar nicht möglich keine Auswahl getroffen zu haben.
(Es sei denn es muss umbedingt so sein, dann...
Delphi-Quellcode:
RadioGroup.ItemIndex := -1;
Gruß Jens

Swagger Jackin 27. Feb 2010 19:31

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von Jens Hartmann
Hallo,

warum nimmst Du keine RadioGroup und prüfst einfach auf...

Delphi-Quellcode:
  case RadioGruop.ItemIndex of
    0:...
    1:...
Hat auch den Vorteil, das immer ein Modus aktiv ist. Es wäre gar nicht möglich keine Auswahl getroffen zu haben.
(Es sei denn es muss umbedingt so sein, dann...
Delphi-Quellcode:
RadioGroup.ItemIndex := -1;
Gruß Jens

werd ich gleich mal probieren, Vielen Dank!!!!!

Swagger Jackin 27. Feb 2010 19:54

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von Swagger Jackin
Zitat:

Zitat von Jens Hartmann
Hallo,

warum nimmst Du keine RadioGroup und prüfst einfach auf...

Delphi-Quellcode:
  case RadioGruop.ItemIndex of
    0:...
    1:...
Hat auch den Vorteil, das immer ein Modus aktiv ist. Es wäre gar nicht möglich keine Auswahl getroffen zu haben.
(Es sei denn es muss umbedingt so sein, dann...
Delphi-Quellcode:
RadioGroup.ItemIndex := -1;
Gruß Jens

werd ich gleich mal probieren, Vielen Dank!!!!!

Leider will es nicht auf der richtigen Form starten, wird alles geladen. :wall:

Swagger Jackin 27. Feb 2010 20:55

Re: Groupboxen, Comboboxen
 
Also da ist ein Fehler. Ich find ihn nicht. Die exe geht gerade so, aber nicht der Rest. procedure Leiste zeigt Fehler !

Delphi-Quellcode:
{=====================================================================}
procedure TForm1.LeisteDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Leiste.Cells[ACol,Arow] <> '-1' --> Fehler wird hier angezeigt !!!!!!!!!!!!!!!!!!!!!!
  then
    case Leiste.Cells[ACol,ARow][1] of
      '0' : Leiste.Canvas.Brush.Color := clRed;
      '1' : Leiste.Canvas.Brush.Color := clBlue;
      '2' : Leiste.Canvas.Brush.Color := clYellow;
      '3' : Leiste.Canvas.Brush.Color := clGreen;
      '4' : Leiste.Canvas.Brush.Color := clWhite;
      else Leiste.Canvas.Brush.Color := clBlack; // Farbe für "gelöscht"
      end; // endcase
  Leiste.Canvas.Pen.Color := clBlack;
  Leiste.Canvas.Rectangle(Rect);
end;
{=====================================================================}

Das was ihr mir vorgeschlagen habt:


{=====================================================================}
procedure TForm15.Button1Click(Sender: TObject);
begin
{  case ComboBox1.ItemIndex of                   ---------------> Combobox, wo die Musik gewählt wird      
       0:
         begin
           Form1.mediaPlayer1.FileName := 'Collapse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       1:
         begin
           Form1.mediaplayer1.FileName := 'horse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       2:
         begin
           Form1.mediaplayer1.FileName := 'electro.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       3:
         begin
           Form1.mediaplayer1.FileName := 'Memories.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       4:
         begin
           Form1.mediaplayer1.FileName := 'Jackin.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
  end;

  case Radiogroup1.ItemIndex of                  --> hier wird Schwierigkeitsgrad gewählt wird
  0:
    begin
      Showmessage ('Sie haben Leicht gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 500;  // Zeitintervall beträgt 700 Millisekunden
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Runden := 30;
      Form1.Leicht.Enabled := False; // deaktiviert Leicht, da geladen
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := True;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
      if Runden = 0 then
        begin
          Level :=Level+1;
          Runden :=(Level-1)*5+30;
          Form1.Zeit.Interval := Form1.Zeit.Interval-5;
        end;
        begin
          if anzahlGleichfarbigerbloecke > 1
         then
           begin
             Form1.GleicheFarbenLoeschen;
           end;
        end
    end;
  1:
    begin
      Showmessage ('Sie haben Mittel gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 350;  // Zeitintervall beträgt 300 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 50';
      Runden := 50;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := False; // deaktiviert Mittel, da geladen
      Form1.Schwer.Enabled := True;
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  2:
    begin
      Showmessage ('Sie haben Schwer gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 200;  // Zeitintervall beträgt 100 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 70';
      Runden := 70;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := False; // deaktiviert Schwer, da geladen
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  end;
    begin
      if ComboBox1.ItemIndex = 0 then Showmessage ('Sie haben Collapse Music gewählt');
      if ComboBox1.ItemIndex = 1 then Showmessage ('Sie haben Amazing Horse gewählt');
      if ComboBox1.ItemIndex = 2 then Showmessage ('Sie haben Electro Gypsy gewählt');
      if ComboBox1.ItemIndex = 3 then Showmessage ('Sie haben Memories gewählt');
      if ComboBox1.ItemIndex = 4 then Showmessage ('Sie haben Swagger Jackin gewählt');
    end;
}   
    if ComboBox1.ItemIndex = 0
    then
      begin
        if MessageDlg('Wirklich Beginnen ?',mtInformation,[mbYes,mbNo],0)=6 // Frage gestellt bevor Start
        then Form15.Close;
      end
    else
      begin
        Showmessage('Bitte wähle einen Spielmodus, einen Schwierigkeitsgrad und eine Musik !');// müssen drei Einstellungen gewählt sein
      end;
end;
{=====================================================================}
procedure TForm15.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0
  then
    begin
      Form1.NeuesSpiel;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Punkte := 0;
      Runden := 30;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end
  else
    begin
      Form1.NeuesSpiel;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 50';
      Punkte := 0;
      Runden := 50;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end;
end;
{=====================================================================}
end.
das hab ich geschafft, aber es will nicht irgendwo bei case liegt der Fehler.

DeddyH 28. Feb 2010 09:28

Re: Groupboxen, Comboboxen
 
Hast Du die Radiogroups erstellt und dann aus dem OI Radiobuttons eingefügt? Dann kannst Du den ItemIndex nicht abfragen, Du musst die Radiobuttons über die Items-Eigenschaft der Radiogroup hinzufügen.

Swagger Jackin 28. Feb 2010 09:42

Re: Groupboxen, Comboboxen
 
Ich hab die Radiogroup erst erstellt, dann einzeln von oben die Radiobuttons draufgesetzt.
:pale: :oops:

DeddyH 28. Feb 2010 09:44

Re: Groupboxen, Comboboxen
 
Du musst nicht denken, dass Du der erste bist, der das so gemacht hat und sich dann wundert :zwinker:

Swagger Jackin 28. Feb 2010 10:02

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von DeddyH
Du musst nicht denken, dass Du der erste bist, der das so gemacht hat und sich dann wundert :zwinker:

:zwinker: :zwinker: :zwinker:

Weist wo der Fehler liegt?

Leider die Radiobuttons sind nicht der Fehler. Die Leiste (das Spielfeld) zeigt bei case of einen Fehler.
Kann es sein das sich der case of Teil von der Leiste mit dem case of Teil von der Radiogroup und der Combobox überschneiden.
siehe Delphi Quelltext oben ????? :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel: :gruebel:

DeddyH 28. Feb 2010 10:05

Re: Groupboxen, Comboboxen
 
Ich seh da jetzt auf Anhieb nix, was zum Fehler führen könnte. Evtl. hast Du weiter oben ein end vergessen oder sowas?

[edit] Welcher Fehler wird denn eigentlich gemeldet? [/edit]

Swagger Jackin 28. Feb 2010 10:23

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von DeddyH
Ich seh da jetzt auf Anhieb nix, was zum Fehler führen könnte. Evtl. hast Du weiter oben ein end vergessen oder sowas?

[edit] Welcher Fehler wird denn eigentlich gemeldet? [/edit]

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00473CF0 in module 'Project1.exe'. Read of address 0000000'. Process stopped. Use Step or Run to continue.
--> Fehlermeldung

Dann zeigt er bei der LeisteDrawCell bei case of ... ; einen Fehler. Schau mal oben in meinen Quelltext bei der Leiste (weiter oben). Ich markier es gleich

Delphi-Quellcode:
{=====================================================================}
procedure TForm1.LeisteDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Leiste.Cells[ACol,Arow] <> '-1'      [b]--> Fehler wird hier angezeigt !!!!!!!!!!!!!!!!!!!!!![/b]
  then
    case Leiste.Cells[ACol,ARow][1] of
      '0' : Leiste.Canvas.Brush.Color := clRed;
      '1' : Leiste.Canvas.Brush.Color := clBlue;
      '2' : Leiste.Canvas.Brush.Color := clYellow;
      '3' : Leiste.Canvas.Brush.Color := clGreen;
      '4' : Leiste.Canvas.Brush.Color := clWhite;
      else Leiste.Canvas.Brush.Color := clBlack; // Farbe für "gelöscht"
      end; // endcase
  Leiste.Canvas.Pen.Color := clBlack;
  Leiste.Canvas.Rectangle(Rect);
end;
{=====================================================================}

DeddyH 28. Feb 2010 10:28

Re: Groupboxen, Comboboxen
 
Und wenn Du vor der Zeile mit dem case einmal abprüfst, ob das Feld auch nicht leer ist?
Delphi-Quellcode:
if Leiste.Cells[ACol,ARow] <> '' then
  case Leiste.Cells[ACol,ARow][1] of

Swagger Jackin 28. Feb 2010 10:36

Re: Groupboxen, Comboboxen
 
Es Geht, JJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAA

:hello: :dancer2: :dancer2: :cheers: :cheers: :cheers: :love: :love:

Danke, danke.!!!!!!!!!!!!!!

DeddyH 28. Feb 2010 10:37

Re: Groupboxen, Comboboxen
 
Kleine Ursache, große Wirkung :zwinker:

Swagger Jackin 28. Feb 2010 11:12

Re: Groupboxen, Comboboxen
 
Wenn ich meine Einstellungen (Musik, Schwierigkeitsgrad und Spielmodus), die jetzt dank dir funktionieren, eingestellt habe, hab ich das Problem das wenn ich spiele und irgendwann verliere, kommt Gameover und ich drücke Neues Spiel, werden die Einstellungen nicht übernommen. Weißt du wie man das macht ? Er soll den Schwierigkeitsgrad , und die anderen Einstellungen beibehalten, wenn ich Neues Spiel drücke !

Delphi-Quellcode:
Das ist meine Form mit den einstellungen:

{=====================================================================}
procedure TForm15.Button1Click(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
       0:
         begin
           Form1.mediaPlayer1.FileName := 'Collapse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       1:
         begin
           Form1.mediaplayer1.FileName := 'horse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       2:
         begin
           Form1.mediaplayer1.FileName := 'electro.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       3:
         begin
           Form1.mediaplayer1.FileName := 'Memories.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       4:
         begin
           Form1.mediaplayer1.FileName := 'Jackin.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
  end;

  case Radiogroup1.ItemIndex of
  0:
    begin
      Showmessage ('Sie haben Leicht gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 550;  // Zeitintervall beträgt 700 Millisekunden
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Runden := 30;
      Form1.Leicht.Enabled := False; // deaktiviert Leicht, da geladen
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := True;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
      if Runden = 0 then
        begin
          Level :=Level+1;
          Runden :=(Level-1)*5+30;
          Form1.Zeit.Interval := Form1.Zeit.Interval-5;
        end;
        begin
          if anzahlGleichfarbigerbloecke > 1
         then
           begin
             Form1.GleicheFarbenLoeschen;
           end;
        end
    end;
  1:
    begin
      Showmessage ('Sie haben Mittel gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 450;  // Zeitintervall beträgt 300 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 50';
      Runden := 50;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := False; // deaktiviert Mittel, da geladen
      Form1.Schwer.Enabled := True;
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  2:
    begin
      Showmessage ('Sie haben Schwer gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 300;  // Zeitintervall beträgt 100 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 70';
      Runden := 70;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := False; // deaktiviert Schwer, da geladen
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  end;
    begin
      if ComboBox1.ItemIndex = 0 then Showmessage ('Sie haben Collapse Music gewählt');
      if ComboBox1.ItemIndex = 1 then Showmessage ('Sie haben Amazing Horse gewählt');
      if ComboBox1.ItemIndex = 2 then Showmessage ('Sie haben Electro Gypsy gewählt');
      if ComboBox1.ItemIndex = 3 then Showmessage ('Sie haben Memories gewählt');
      if ComboBox1.ItemIndex = 4 then Showmessage ('Sie haben Swagger Jackin gewählt');
    end;
   
    if ComboBox1.ItemIndex = 0
    then
      begin
        if MessageDlg('Wirklich Beginnen ?',mtInformation,[mbYes,mbNo],0)=6 // Frage gestellt bevor Start
        then Form15.Close;
      end
    else
      begin
        Showmessage('Bitte wähle einen Spielmodus, einen Schwierigkeitsgrad und eine Musik !');// müssen drei Einstellungen gewählt sein
      end;
end;
{=====================================================================}
procedure TForm15.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0
  then
    begin
      Form1.NeuesSpiel;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      if Form1.Zeit.Enabled = false  // wenn Zeit nicht läuft dann
      then
        begin
          Form1.Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
        end;
        if Form1.Spielfeld.Enabled = false
        then
          begin
            Form1.Spielfeld.Enabled := true;
          end;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Punkte := 0;
      Runden := 30;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end
  else
    begin
      Form1.NeuesSpiel;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      if Form1.Zeit.Enabled = false  // wenn Zeit nicht läuft dann
      then
        begin
          Form1.Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
        end;
        if Form1.Spielfeld.Enabled = false
        then
          begin
            Form1.Spielfeld.Enabled := true;
          end;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 50';
      Punkte := 0;
      Runden := 50;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end;
end;
{=====================================================================}
end.
Delphi-Quellcode:

Jetzt die Quelltext des restlichen Spiel:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, Grids, ComCtrls, ExtCtrls, StdCtrls, ImgList, MPlayer;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Spiel1: TMenuItem;
    NeuesSpiel1: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    StatusBar1: TStatusBar;
    Spielfeld: TStringGrid;
    info1: TMenuItem;
    Leiste: TStringGrid;
    Zeit: TTimer;
    Bedienungsanleitung: TMenuItem;
    Entwickler: TMenuItem;
    Optionen1: TMenuItem;
    Steuerung1: TMenuItem;
    Musik: TMenuItem;
    Fortsetzen1: TMenuItem;
    Stopp1: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    Schwierigkeitsgrad: TMenuItem;
    Leicht: TMenuItem;
    N8: TMenuItem;
    Mittel: TMenuItem;
    N9: TMenuItem;
    Schwer: TMenuItem;
    N10: TMenuItem;
    Highscore1: TMenuItem;
    N2: TMenuItem;
    Spielmodus1: TMenuItem;
    Collapse: TMenuItem;
    N11: TMenuItem;
    Horse: TMenuItem;
    N12: TMenuItem;
    Gypsy: TMenuItem;
    N13: TMenuItem;
    Memories1: TMenuItem;
    N14: TMenuItem;
    SwaggerJackin1: TMenuItem;
    MediaPlayer1: TMediaPlayer;
    procedure Beenden1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure NeuesSpiel;
    procedure SpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure NeuesSpiel1Click(Sender: TObject);
    procedure SpielfeldSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure GleicheFarbenFinden(x, y : integer);
    procedure GleicheFarbenLoeschen;
    procedure ZeitTimer(Sender: TObject);
    procedure LeisteDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure EntwicklerClick(Sender: TObject);
    procedure BedienungsanleitungClick(Sender: TObject);
    procedure Highscore1Click(Sender: TObject);
    procedure Steuerung1Click(Sender: TObject);
    procedure Stopp1Click(Sender: TObject);
    procedure Fortsetzen1Click(Sender: TObject);
    procedure LeichtClick(Sender: TObject);
    procedure MittelClick(Sender: TObject);
    procedure SchwerClick(Sender: TObject);
    procedure Spielmodus1Click(Sender: TObject);
    procedure CollapseClick(Sender: TObject);
    procedure HorseClick(Sender: TObject);
    procedure GypsyClick(Sender: TObject);
    procedure Memories1Click(Sender: TObject);
    procedure SwaggerJackin1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1                       : TForm1;
  Zellengroesse              : integer = 30;    // legt die Zellengröße Zg x Zg
  anzahlgleichfarbigerbloecke : integer;
  Punkte                     : integer;
  Runden                     : integer;
  Kaestchen                  : integer;         // für Belegung der Leiste
  LetzteZeile                : boolean;
  Classic                    : boolean;
  start                      : TDatetime;
  Level                      : integer;
  PunkteEnde                 : integer;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit7, Unit6, Unit8, Unit10, Unit11, Unit12,
     Unit13, Unit14, Unit15;

{$R *.DFM}
{=====================================================================}
procedure TForm1.Beenden1Click(Sender: TObject);
begin
  begin
    if Zeit.Enabled = true  // wenn Zeit läuft dann
    then
      begin
        Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
      end;
      if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
      then
        begin
          Spielfeld.Enabled := false; // Oberfläche deaktivieren
        end;
  end;
  if MessageDlg('Wirklich Beenden ?',mtInformation,[mbYes,mbNo],0)=6
  then Application.Terminate;
end;
{=====================================================================}
procedure TForm1.FormActivate(Sender: TObject);
begin
  Form15.ShowModal;
{  if
  then
    begin
      Spielmodus1.Enabled := True;
      Schwierigkeitsgrad.Enabled := True;
      Highscore1.Enabled := True;
      if Zeit.Enabled = true  // wenn Zeit läuft dann
      then
        begin
          Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
        end;
        if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
        then
          begin
            Spielfeld.Enabled := false; // Oberfläche deaktivieren
          end;
    end;
}
  Spielfeld.DefaultColWidth := Zellengroesse;
  Spielfeld.DefaultRowHeight := Zellengroesse;
  Spielfeld.ClientWidth := Spielfeld.ColCount*(Zellengroesse+Spielfeld.GridLineWidth);
  Spielfeld.ClientHeight := Spielfeld.RowCount*(Zellengroesse+Spielfeld.GridLineWidth);
  Leiste.DefaultColWidth := Zellengroesse;
  Leiste.DefaultRowHeight := Zellengroesse;
  Leiste.ClientWidth := Leiste.ColCount*(Zellengroesse+Leiste.GridLineWidth);
  Leiste.ClientHeight := Leiste.RowCount*(Zellengroesse+Leiste.GridLineWidth);
  // Statusbar im Verhältnis 1:3 teilen
  StatusBar1.Panels[0].Width := StatusBar1.Width div 2;
  Form1.Width := Spielfeld.ClientWidth+12;
  Form1.Height := Spielfeld.ClientHeight+80+Leiste.ClientHeight+30;
  randomize;
  NeuesSpiel;
  Spielfeld.Enabled := false;   // bei Start Stillstand
  Zeit.Enabled := false;        // Zeit anhalten sofort nach Start
  Classic:= true;

end;
{=====================================================================}
procedure TForm1.NeuesSpiel;
var x,y,i : integer;
begin
   for x := 0 to Spielfeld.ColCount-1 do
   begin
     i := random(4)+1;  // zufällige Anordnung der Kästchen
     for y := Spielfeld.RowCount-i to Spielfeld.RowCount-1 do
      Spielfeld.Cells[x,y] := IntToStr(random(5)); // belegt alle Felder mit Farbe
     for y := 0 to Spielfeld.RowCount-i-1 do
      Spielfeld.Cells[x,y] := '-1'; // belegt alle leeren Felder mit schwarz
   end;
     for x := 0 to Leiste.ColCount-1 do
      Leiste.Cells[x,0] := IntToStr(random(5)); // zufällige Belegung der Leiste
   Zeit.Enabled := true;  // Uhr anschalten
   Zeit.Interval := 500;
   Kaestchen := Spielfeld.ColCount;
   LetzteZeile := false;
   Spielfeld.Enabled := true;
end;
{=====================================================================}
procedure TForm1.SpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Spielfeld.Cells[ACol,ARow] <> '-1'
  then
    case Spielfeld.Cells[ACol,Arow][1] of
      '0' : Spielfeld.Canvas.Brush.Color := clRed;
      '1' : Spielfeld.Canvas.Brush.Color := clBlue;
      '2' : Spielfeld.Canvas.Brush.Color := clYellow;
      '3' : Spielfeld.Canvas.Brush.Color := clGreen;
      '4' : Spielfeld.Canvas.Brush.Color := clWhite;
      else Spielfeld.Canvas.Brush.Color := clBLack; // Farbe für "gelöscht"
      end; // endcase
  Spielfeld.Canvas.Pen.Color := clBlack;
  Spielfeld.Canvas.Rectangle(Rect);
end;
{=====================================================================}
procedure TForm1.LeisteDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Leiste.Cells[ACol,ARow] <> ''
  then
    case Leiste.Cells[ACol,ARow][1] of
      '0' : Leiste.Canvas.Brush.Color := clRed;
      '1' : Leiste.Canvas.Brush.Color := clBlue;
      '2' : Leiste.Canvas.Brush.Color := clYellow;
      '3' : Leiste.Canvas.Brush.Color := clGreen;
      '4' : Leiste.Canvas.Brush.Color := clWhite;
      else Leiste.Canvas.Brush.Color := clBlack; // Farbe für "gelöscht"
      end; // endcase
  Leiste.Canvas.Pen.Color := clBlack;
  Leiste.Canvas.Rectangle(Rect);
end;
{=====================================================================}
procedure TForm1.NeuesSpiel1Click(Sender: TObject);
begin
  NeuesSpiel;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Statusbar1.Panels[1].Text := 'Runden : 30';
//  Statusbar1.Panels[2].Text := 'Level : 1';
//  Level := 1;
  Punkte := 0;
  Runden := 30;
  anzahlgleichfarbigerbloecke := 0;
  Zeit.Enabled := true;
  Form13.start := now;
  Spielmodus1.Enabled := False;
  Schwierigkeitsgrad.Enabled := False;
  Highscore1.Enabled := False;
end;
{=====================================================================}
procedure TForm1.GleicheFarbenLoeschen;
var x,y ,i ,x1                 : integer;
    Lueckevorhanden,LeereZeile : boolean;
    ZeileBloecke              : integer;
begin
  if anzahlGleichfarbigerbloecke > 1
  then
    begin    // es gibt bloecke zu löschen
      // zu löschende blöcke markieren
      for x := 0 to Spielfeld.ColCount -1 do
        for y := 0 to Spielfeld.RowCount -1 do
          if StrToInt(Spielfeld.Cells[x,y]) > 4
          then Spielfeld.Cells[x,y] := '-1';
      for x := 0 to Spielfeld.ColCount -1 do
        begin
          repeat
            Lueckevorhanden := false;    // Lücke suchen
            ZeileBloecke := -1;     // eine nicht existierende Zeilennummer
            for y := 0 to Spielfeld.RowCount - 2 do
            if (Spielfeld.Cells[x,y] <> '-1') and (Spielfeld.Cells[x,y+1]='-1')
            then
              begin
                ZeileBloecke := y;
                Lueckevorhanden := true;
              end;
            if Lueckevorhanden
            then
              begin
                while (ZeileBloecke < Spielfeld.RowCount -1) and (Spielfeld.Cells[x,ZeileBloecke+1]='-1')do
                  begin
                    for y := ZeileBloecke downto 0 do
                      begin
                        Spielfeld.Cells[x,y+1] :=Spielfeld.Cells[x,y];
                        Spielfeld.Cells[x,y] := '-1';
                      end;
                  end;
              end;
          until not Lueckevorhanden;
        end;
         for x := 1 to Spielfeld.ColCount -2 do // ab den vollen Spalten anfangen zuzählen
          begin
            i := 0;    // Anzahl der leeren Kästchen
            for y := 0 to Spielfeld.RowCount -1 do
            begin
              if Spielfeld.Cells[x,y] = '-1'
              then i := i+1;   // erhöhe die Kästchen um 1
            end;
            if i = Spielfeld.RowCount // wenn die Spalte leer ist
            then
            begin
              if x <= Spielfeld.ColCount/2  // wenn die Hälfte oder weniger mit Kaestchen belegt ist
              then
                begin
                  for x1 := x downto 1 do // schieben alles nach links, welche Spalte frei ist
                    begin
                      for y := 0 to Spielfeld.RowCount-1 do
                      Spielfeld.Cells[x1,y] := Spielfeld.Cells[x1-1,y]; // Verschiebung Bloecke
                    end;
                  for y := 0 to Spielfeld.RowCount-1 do
                  Spielfeld.Cells[0,y] := '-1';   // Übertragung Farben Bloecke
                end
              else
               begin
                 for x1 := x to Spielfeld.ColCount -2 do // schieben alles nach rechts, welche Spalte frei ist
                  begin
                    for y := 0 to Spielfeld.RowCount-1 do
                    Spielfeld.Cells[x1,y] := Spielfeld.Cells[x1+1,y]; // Verschiebung Bloecke
                  end;
                 for y := 0 to Spielfeld.RowCount-1 do
                 Spielfeld.Cells[Spielfeld.ColCount-1,y] := '-1';   // Übertragung Farben der Bloecke
               end;
            end;
          end;
    end
  else   // keine Bloecke zu löschen
    begin
      for x := 0 to Spielfeld.ColCount -1 do
        for y := 0 to Spielfeld.RowCount -1 do
          if  StrToInt(Spielfeld.Cells[x,y]) > 4
          then Spielfeld.Cells[x,y] := IntToStr(StrToInt(Spielfeld.Cells[x,y])-5);   //alter wert wiederherstellen
    end;
    LeereZeile := true;
    for x := 0 to Spielfeld.ColCount-1 do
      begin
        if Spielfeld.Cells[x,Spielfeld.RowCount-1] <> '-1'
        then LeereZeile := false;
      end;
      if LeereZeile = true
      then Punkte := Punkte + 2000;
end;
{=====================================================================}
procedure TForm1.GleicheFarbenFinden(x, y : integer);
var farbwert : string;
begin
  anzahlgleichfarbigerbloecke := anzahlgleichfarbigerbloecke+1;
  // farbcode merken
  farbwert := Spielfeld.Cells[x,y];
   // zelle markieren
  Spielfeld.Cells[x,y] := IntToStr(StrToInt(Spielfeld.Cells[x,y])+5);
  // nördliche zelle testen
  if y > 0
  then
    if Spielfeld.Cells[x,y-1] = farbwert
    then GleicheFarbenFinden(x,y-1);
  // östliche
  if x < Spielfeld.ColCount - 1
  then
    if Spielfeld.Cells[x+1,y] = farbwert
    then GleicheFarbenFinden(x+1,y);
  // südliche
  if y < Spielfeld.RowCount - 1
  then
    if Spielfeld.Cells[x,y+1] = farbwert
    then GleicheFarbenFinden(x,y+1);
  // westliche
  if x > 0
  then
    if Spielfeld.Cells[x-1,y] = farbwert
    then GleicheFarbenFinden(x-1,y);
end;
{=====================================================================}
procedure TForm1.SpielfeldSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
  var b, i    : integer;
begin
  anzahlgleichfarbigerbloecke := 0;
  if Spielfeld.Cells[ACol,Arow] <> '-1'
  then GleicheFarbenFinden(ACol, ARow);
  b := anzahlgleichfarbigerbloecke;
    case b of
    0,1 : Punkte := Anzahlgleichfarbigerbloecke * 0 + Punkte;
    2 : Punkte := Anzahlgleichfarbigerbloecke * 5 + Punkte;
    3 : Punkte := Anzahlgleichfarbigerbloecke * 10 + Punkte;
    4 : Punkte := Anzahlgleichfarbigerbloecke * 15 + Punkte;
    5 : Punkte := Anzahlgleichfarbigerbloecke * 20 + Punkte;
    6 : Punkte := Anzahlgleichfarbigerbloecke * 25 + Punkte;
    7 : Punkte := Anzahlgleichfarbigerbloecke * 30 + Punkte;
    else Punkte := Anzahlgleichfarbigerbloecke * 60 + Punkte;
    end;
  Statusbar1.Panels[0].Text := 'Punkte :' + IntToStr(Punkte);
  GleicheFarbenLoeschen;
{  QuickRep1.Prepare;
  i := QuickRep1.anzahlgleichfarbigerbloecke;
  QuickRep1.Preview;
}
end;
{=====================================================================}
procedure TForm1.ZeitTimer(Sender: TObject);
var x,y      : integer;
    Highscore : TStringList;
begin
if Kaestchen = Leiste.ColCount   // Leiste voll
 then
   begin
     for x := 0 to Spielfeld.ColCount-1 do    // für oberste Zeile
      begin
        if Spielfeld.Cells[x,0] <> '-1'
        then
          begin
            LetzteZeile := true; // wenn Letzte Zeile belegt
            Zeit.Enabled := false;
            Spielfeld.Enabled := false;
            PunkteEnde := Punkte;
            Form8.ShowModal;   // öffnen Fenster mit Game Over
            Highscore := TStringList.Create;
            if FileExists('Highscore.txt22')
            then Highscore.LoadfromFile('Highscore.txt22');
            Highscore.Add(IntToStr(PunkteEnde));
            Highscore.SaveToFile('Highscore.txt22');
            Form5.LeseHighscore;
            Form5.Hide;
            Form5.Show;
          end;
        if LetzteZeile = true
        then break; // beendet for-Schleife
      end;
      if LetzteZeile = false
      then
       begin
        for y := 0 to Spielfeld.RowCount-1 do
         begin
           for x := 0 to Spielfeld.ColCount-1 do
           Spielfeld.Cells[x,y] := Spielfeld.Cells[x,y+1]; // Spiel läuft weiter
         end;
           for x := 0 to Spielfeld.ColCount-1 do
           Spielfeld.Cells[x,Spielfeld.RowCount-1] := Leiste.Cells[x,0]; // Leiste wird weiter übertragen

        for x := 0 to Leiste.ColCount-1 do   // leeren der Leiste
        Leiste.Cells[x,0] := '-1';
        Kaestchen := 0;
        Runden := Runden -1;
        Statusbar1.Panels[1].Text := 'Runden :' + IntToStr(Runden);
        if Runden = 0
        then
         begin
           Zeit.Enabled := false;
           Spielfeld.Enabled := false;
           PunkteEnde := Punkte;
           Form13.ShowModal;
           Level := Level +1;
           Runden := (Level-1)*10+30;
           Zeit.Interval := 500 - (Level - 1) * 10;
           Zeit.Enabled := true;
           Spielfeld.Enabled := true;
           Highscore := TStringList.Create;
           if FileExists('Highscore.txt22')
           then Highscore.LoadfromFile('Highscore.txt22');
           Highscore.Add(IntToStr(PunkteEnde));
           Highscore.SaveToFile('Highscore.txt22');
           Form5.LeseHighscore;
           Form5.Show;
         end;
       end;
   end
 else     // füllen untere Leiste auf
   begin
     Leiste.Cells[Kaestchen,0] := IntToStr(random(5));
     Kaestchen := Kaestchen+1;
   end;
end;
{=====================================================================}
procedure TForm1.EntwicklerClick(Sender: TObject);
begin
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
      Form3.ShowModal;
end;
{=====================================================================}
procedure TForm1.BedienungsanleitungClick(Sender: TObject);
begin
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
      Form4.ShowModal;
end;
{=====================================================================}
procedure TForm1.Highscore1Click(Sender: TObject);
begin
  Form5.ShowModal;
end;
{=====================================================================}
procedure TForm1.Steuerung1Click(Sender: TObject);
begin
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
      Form6.ShowModal;
end;
{=====================================================================}
procedure TForm1.Stopp1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
end;
{=====================================================================}
procedure TForm1.Fortsetzen1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := False;
  Schwierigkeitsgrad.Enabled := False;
  Highscore1.Enabled := False;
  if Zeit.Enabled = false  // wenn Zeit nicht läuft dann
  then
    begin
      Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
    end;
    if Spielfeld.Enabled = false
    then
      begin
        Spielfeld.Enabled := true;
      end;
end;
{=====================================================================}
procedure TForm1.LeichtClick(Sender: TObject);
begin
  NeuesSpiel;
  Zeit.Enabled := true;  // Uhr anschalten
  Zeit.Interval := 550;  // Zeitintervall beträgt 700 Millisekunden
  Statusbar1.Panels[1].Text := 'Runden : 30';
  Runden := 30;
  Leicht.Enabled := False; // deaktiviert Leicht, da geladen
  Mittel.Enabled := True;
  Schwer.Enabled := True;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Punkte := 0;
  if Runden = 0 then
  begin
    Level :=Level+1;
    Runden :=(Level-1)*5+30;
    Zeit.Interval := Zeit.Interval-5;
  end;
  begin
    if anzahlGleichfarbigerbloecke > 1
    then
      begin
        GleicheFarbenLoeschen;
      end;
  end
end;
{=====================================================================}
procedure TForm1.MittelClick(Sender: TObject);
begin
  NeuesSpiel;
  Zeit.Enabled := true;  // Uhr anschalten
  Zeit.Interval := 450;  // Zeitintervall beträgt 300 Millisekunden
  Statusbar1.Panels[1].Text := 'Runden : 50';
  Runden := 50;
  Leicht.Enabled := True;
  Mittel.Enabled := False; // deaktiviert Mittel, da geladen
  Schwer.Enabled := True;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Punkte := 0;
end;
{=====================================================================}
procedure TForm1.SchwerClick(Sender: TObject);
begin
  NeuesSpiel;
  Zeit.Enabled := true;  // Uhr anschalten
  Zeit.Interval := 300;  // Zeitintervall beträgt 100 Millisekunden
  Statusbar1.Panels[1].Text := 'Runden : 70';
  Runden := 70;
  Leicht.Enabled := True;
  Mittel.Enabled := True;
  Schwer.Enabled := False; // deaktiviert Schwer, da geladen
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Punkte := 0;
end;
{=====================================================================}
procedure TForm1.Spielmodus1Click(Sender: TObject);
begin
  Form9.ShowModal;
end;
{=====================================================================}
procedure TForm1.CollapseClick(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form7.ShowModal;
end;
{=====================================================================}
procedure TForm1.HorseClick(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form11.ShowModal;
end;
{=====================================================================}
procedure TForm1.GypsyClick(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form12.ShowModal;
end;
{=====================================================================}
procedure TForm1.Memories1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form2.ShowModal;
end;
{=====================================================================}
procedure TForm1.SwaggerJackin1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form14.ShowModal;
end;
{=====================================================================}
end.

DeddyH 28. Feb 2010 11:16

Re: Groupboxen, Comboboxen
 
:shock: Das ist mir zuviel Code, um da mal eben drüberzuschauen. Setz doch einfach mal einen Haltepunkt beim Aufruf eines neuen Spiels und sieh nach, wo es langgeht.

Swagger Jackin 28. Feb 2010 11:17

Re: Groupboxen, Comboboxen
 
Wenn ich meine Einstellungen (Musik, Schwierigkeitsgrad und Spielmodus), die jetzt dank dir funktionieren, eingestellt habe, hab ich das Problem das wenn ich spiele und irgendwann verliere, kommt Gameover und ich drücke Neues Spiel, werden die Einstellungen nicht übernommen. Weißt du wie man das macht ? Er soll den Schwierigkeitsgrad , und die anderen Einstellungen beibehalten, wenn ich Neues Spiel drücke !

Delphi-Quellcode:
Das ist meine Form mit den einstellungen:

{=====================================================================}
procedure TForm15.Button1Click(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
       0:
         begin
           Form1.mediaPlayer1.FileName := 'Collapse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       1:
         begin
           Form1.mediaplayer1.FileName := 'horse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       2:
         begin
           Form1.mediaplayer1.FileName := 'electro.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       3:
         begin
           Form1.mediaplayer1.FileName := 'Memories.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       4:
         begin
           Form1.mediaplayer1.FileName := 'Jackin.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
  end;

  case Radiogroup1.ItemIndex of
  0:
    begin
      Showmessage ('Sie haben Leicht gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 550;  // Zeitintervall beträgt 700 Millisekunden
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Runden := 30;
      Form1.Leicht.Enabled := False; // deaktiviert Leicht, da geladen
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := True;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
      if Runden = 0 then
        begin
          Level :=Level+1;
          Runden :=(Level-1)*5+30;
          Form1.Zeit.Interval := Form1.Zeit.Interval-5;
        end;
        begin
          if anzahlGleichfarbigerbloecke > 1
         then
           begin
             Form1.GleicheFarbenLoeschen;
           end;
        end
    end;
  1:
    begin
      Showmessage ('Sie haben Mittel gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 450;  // Zeitintervall beträgt 300 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 50';
      Runden := 50;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := False; // deaktiviert Mittel, da geladen
      Form1.Schwer.Enabled := True;
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  2:
    begin
      Showmessage ('Sie haben Schwer gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 300;  // Zeitintervall beträgt 100 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 70';
      Runden := 70;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := False; // deaktiviert Schwer, da geladen
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  end;
    begin
      if ComboBox1.ItemIndex = 0 then Showmessage ('Sie haben Collapse Music gewählt');
      if ComboBox1.ItemIndex = 1 then Showmessage ('Sie haben Amazing Horse gewählt');
      if ComboBox1.ItemIndex = 2 then Showmessage ('Sie haben Electro Gypsy gewählt');
      if ComboBox1.ItemIndex = 3 then Showmessage ('Sie haben Memories gewählt');
      if ComboBox1.ItemIndex = 4 then Showmessage ('Sie haben Swagger Jackin gewählt');
    end;
   
    if ComboBox1.ItemIndex = 0
    then
      begin
        if MessageDlg('Wirklich Beginnen ?',mtInformation,[mbYes,mbNo],0)=6 // Frage gestellt bevor Start
        then Form15.Close;
      end
    else
      begin
        Showmessage('Bitte wähle einen Spielmodus, einen Schwierigkeitsgrad und eine Musik !');// müssen drei Einstellungen gewählt sein
      end;
end;
{=====================================================================}
procedure TForm15.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0
  then
    begin
      Form1.NeuesSpiel;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      if Form1.Zeit.Enabled = false  // wenn Zeit nicht läuft dann
      then
        begin
          Form1.Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
        end;
        if Form1.Spielfeld.Enabled = false
        then
          begin
            Form1.Spielfeld.Enabled := true;
          end;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Punkte := 0;
      Runden := 30;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end
  else
    begin
      Form1.NeuesSpiel;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      if Form1.Zeit.Enabled = false  // wenn Zeit nicht läuft dann
      then
        begin
          Form1.Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
        end;
        if Form1.Spielfeld.Enabled = false
        then
          begin
            Form1.Spielfeld.Enabled := true;
          end;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 50';
      Punkte := 0;
      Runden := 50;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end;
end;
{=====================================================================}
end.
Delphi-Quellcode:

Jetzt die Quelltext des restlichen Spiel:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, Grids, ComCtrls, ExtCtrls, StdCtrls, ImgList, MPlayer;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Spiel1: TMenuItem;
    NeuesSpiel1: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    StatusBar1: TStatusBar;
    Spielfeld: TStringGrid;
    info1: TMenuItem;
    Leiste: TStringGrid;
    Zeit: TTimer;
    Bedienungsanleitung: TMenuItem;
    Entwickler: TMenuItem;
    Optionen1: TMenuItem;
    Steuerung1: TMenuItem;
    Musik: TMenuItem;
    Fortsetzen1: TMenuItem;
    Stopp1: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    Schwierigkeitsgrad: TMenuItem;
    Leicht: TMenuItem;
    N8: TMenuItem;
    Mittel: TMenuItem;
    N9: TMenuItem;
    Schwer: TMenuItem;
    N10: TMenuItem;
    Highscore1: TMenuItem;
    N2: TMenuItem;
    Spielmodus1: TMenuItem;
    Collapse: TMenuItem;
    N11: TMenuItem;
    Horse: TMenuItem;
    N12: TMenuItem;
    Gypsy: TMenuItem;
    N13: TMenuItem;
    Memories1: TMenuItem;
    N14: TMenuItem;
    SwaggerJackin1: TMenuItem;
    MediaPlayer1: TMediaPlayer;
    procedure Beenden1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure NeuesSpiel;
    procedure SpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure NeuesSpiel1Click(Sender: TObject);
    procedure SpielfeldSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure GleicheFarbenFinden(x, y : integer);
    procedure GleicheFarbenLoeschen;
    procedure ZeitTimer(Sender: TObject);
    procedure LeisteDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure EntwicklerClick(Sender: TObject);
    procedure BedienungsanleitungClick(Sender: TObject);
    procedure Highscore1Click(Sender: TObject);
    procedure Steuerung1Click(Sender: TObject);
    procedure Stopp1Click(Sender: TObject);
    procedure Fortsetzen1Click(Sender: TObject);
    procedure LeichtClick(Sender: TObject);
    procedure MittelClick(Sender: TObject);
    procedure SchwerClick(Sender: TObject);
    procedure Spielmodus1Click(Sender: TObject);
    procedure CollapseClick(Sender: TObject);
    procedure HorseClick(Sender: TObject);
    procedure GypsyClick(Sender: TObject);
    procedure Memories1Click(Sender: TObject);
    procedure SwaggerJackin1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1                       : TForm1;
  Zellengroesse              : integer = 30;    // legt die Zellengröße Zg x Zg
  anzahlgleichfarbigerbloecke : integer;
  Punkte                     : integer;
  Runden                     : integer;
  Kaestchen                  : integer;         // für Belegung der Leiste
  LetzteZeile                : boolean;
  Classic                    : boolean;
  start                      : TDatetime;
  Level                      : integer;
  PunkteEnde                 : integer;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit7, Unit6, Unit8, Unit10, Unit11, Unit12,
     Unit13, Unit14, Unit15;

{$R *.DFM}
{=====================================================================}
procedure TForm1.Beenden1Click(Sender: TObject);
begin
  begin
    if Zeit.Enabled = true  // wenn Zeit läuft dann
    then
      begin
        Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
      end;
      if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
      then
        begin
          Spielfeld.Enabled := false; // Oberfläche deaktivieren
        end;
  end;
  if MessageDlg('Wirklich Beenden ?',mtInformation,[mbYes,mbNo],0)=6
  then Application.Terminate;
end;
{=====================================================================}
procedure TForm1.FormActivate(Sender: TObject);
begin
  Form15.ShowModal;
{  if
  then
    begin
      Spielmodus1.Enabled := True;
      Schwierigkeitsgrad.Enabled := True;
      Highscore1.Enabled := True;
      if Zeit.Enabled = true  // wenn Zeit läuft dann
      then
        begin
          Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
        end;
        if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
        then
          begin
            Spielfeld.Enabled := false; // Oberfläche deaktivieren
          end;
    end;
}
  Spielfeld.DefaultColWidth := Zellengroesse;
  Spielfeld.DefaultRowHeight := Zellengroesse;
  Spielfeld.ClientWidth := Spielfeld.ColCount*(Zellengroesse+Spielfeld.GridLineWidth);
  Spielfeld.ClientHeight := Spielfeld.RowCount*(Zellengroesse+Spielfeld.GridLineWidth);
  Leiste.DefaultColWidth := Zellengroesse;
  Leiste.DefaultRowHeight := Zellengroesse;
  Leiste.ClientWidth := Leiste.ColCount*(Zellengroesse+Leiste.GridLineWidth);
  Leiste.ClientHeight := Leiste.RowCount*(Zellengroesse+Leiste.GridLineWidth);
  // Statusbar im Verhältnis 1:3 teilen
  StatusBar1.Panels[0].Width := StatusBar1.Width div 2;
  Form1.Width := Spielfeld.ClientWidth+12;
  Form1.Height := Spielfeld.ClientHeight+80+Leiste.ClientHeight+30;
  randomize;
  NeuesSpiel;
  Spielfeld.Enabled := false;   // bei Start Stillstand
  Zeit.Enabled := false;        // Zeit anhalten sofort nach Start
  Classic:= true;

end;
{=====================================================================}
procedure TForm1.NeuesSpiel;
var x,y,i : integer;
begin
   for x := 0 to Spielfeld.ColCount-1 do
   begin
     i := random(4)+1;  // zufällige Anordnung der Kästchen
     for y := Spielfeld.RowCount-i to Spielfeld.RowCount-1 do
      Spielfeld.Cells[x,y] := IntToStr(random(5)); // belegt alle Felder mit Farbe
     for y := 0 to Spielfeld.RowCount-i-1 do
      Spielfeld.Cells[x,y] := '-1'; // belegt alle leeren Felder mit schwarz
   end;
     for x := 0 to Leiste.ColCount-1 do
      Leiste.Cells[x,0] := IntToStr(random(5)); // zufällige Belegung der Leiste
   Zeit.Enabled := true;  // Uhr anschalten
   Zeit.Interval := 500;
   Kaestchen := Spielfeld.ColCount;
   LetzteZeile := false;
   Spielfeld.Enabled := true;
end;
{=====================================================================}
procedure TForm1.SpielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Spielfeld.Cells[ACol,ARow] <> '-1'
  then
    case Spielfeld.Cells[ACol,Arow][1] of
      '0' : Spielfeld.Canvas.Brush.Color := clRed;
      '1' : Spielfeld.Canvas.Brush.Color := clBlue;
      '2' : Spielfeld.Canvas.Brush.Color := clYellow;
      '3' : Spielfeld.Canvas.Brush.Color := clGreen;
      '4' : Spielfeld.Canvas.Brush.Color := clWhite;
      else Spielfeld.Canvas.Brush.Color := clBLack; // Farbe für "gelöscht"
      end; // endcase
  Spielfeld.Canvas.Pen.Color := clBlack;
  Spielfeld.Canvas.Rectangle(Rect);
end;
{=====================================================================}
procedure TForm1.LeisteDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Leiste.Cells[ACol,ARow] <> ''
  then
    case Leiste.Cells[ACol,ARow][1] of
      '0' : Leiste.Canvas.Brush.Color := clRed;
      '1' : Leiste.Canvas.Brush.Color := clBlue;
      '2' : Leiste.Canvas.Brush.Color := clYellow;
      '3' : Leiste.Canvas.Brush.Color := clGreen;
      '4' : Leiste.Canvas.Brush.Color := clWhite;
      else Leiste.Canvas.Brush.Color := clBlack; // Farbe für "gelöscht"
      end; // endcase
  Leiste.Canvas.Pen.Color := clBlack;
  Leiste.Canvas.Rectangle(Rect);
end;
{=====================================================================}
procedure TForm1.NeuesSpiel1Click(Sender: TObject);
begin
  NeuesSpiel;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Statusbar1.Panels[1].Text := 'Runden : 30';
//  Statusbar1.Panels[2].Text := 'Level : 1';
//  Level := 1;
  Punkte := 0;
  Runden := 30;
  anzahlgleichfarbigerbloecke := 0;
  Zeit.Enabled := true;
  Form13.start := now;
  Spielmodus1.Enabled := False;
  Schwierigkeitsgrad.Enabled := False;
  Highscore1.Enabled := False;
end;
{=====================================================================}
procedure TForm1.GleicheFarbenLoeschen;
var x,y ,i ,x1                 : integer;
    Lueckevorhanden,LeereZeile : boolean;
    ZeileBloecke              : integer;
begin
  if anzahlGleichfarbigerbloecke > 1
  then
    begin    // es gibt bloecke zu löschen
      // zu löschende blöcke markieren
      for x := 0 to Spielfeld.ColCount -1 do
        for y := 0 to Spielfeld.RowCount -1 do
          if StrToInt(Spielfeld.Cells[x,y]) > 4
          then Spielfeld.Cells[x,y] := '-1';
      for x := 0 to Spielfeld.ColCount -1 do
        begin
          repeat
            Lueckevorhanden := false;    // Lücke suchen
            ZeileBloecke := -1;     // eine nicht existierende Zeilennummer
            for y := 0 to Spielfeld.RowCount - 2 do
            if (Spielfeld.Cells[x,y] <> '-1') and (Spielfeld.Cells[x,y+1]='-1')
            then
              begin
                ZeileBloecke := y;
                Lueckevorhanden := true;
              end;
            if Lueckevorhanden
            then
              begin
                while (ZeileBloecke < Spielfeld.RowCount -1) and (Spielfeld.Cells[x,ZeileBloecke+1]='-1')do
                  begin
                    for y := ZeileBloecke downto 0 do
                      begin
                        Spielfeld.Cells[x,y+1] :=Spielfeld.Cells[x,y];
                        Spielfeld.Cells[x,y] := '-1';
                      end;
                  end;
              end;
          until not Lueckevorhanden;
        end;
         for x := 1 to Spielfeld.ColCount -2 do // ab den vollen Spalten anfangen zuzählen
          begin
            i := 0;    // Anzahl der leeren Kästchen
            for y := 0 to Spielfeld.RowCount -1 do
            begin
              if Spielfeld.Cells[x,y] = '-1'
              then i := i+1;   // erhöhe die Kästchen um 1
            end;
            if i = Spielfeld.RowCount // wenn die Spalte leer ist
            then
            begin
              if x <= Spielfeld.ColCount/2  // wenn die Hälfte oder weniger mit Kaestchen belegt ist
              then
                begin
                  for x1 := x downto 1 do // schieben alles nach links, welche Spalte frei ist
                    begin
                      for y := 0 to Spielfeld.RowCount-1 do
                      Spielfeld.Cells[x1,y] := Spielfeld.Cells[x1-1,y]; // Verschiebung Bloecke
                    end;
                  for y := 0 to Spielfeld.RowCount-1 do
                  Spielfeld.Cells[0,y] := '-1';   // Übertragung Farben Bloecke
                end
              else
               begin
                 for x1 := x to Spielfeld.ColCount -2 do // schieben alles nach rechts, welche Spalte frei ist
                  begin
                    for y := 0 to Spielfeld.RowCount-1 do
                    Spielfeld.Cells[x1,y] := Spielfeld.Cells[x1+1,y]; // Verschiebung Bloecke
                  end;
                 for y := 0 to Spielfeld.RowCount-1 do
                 Spielfeld.Cells[Spielfeld.ColCount-1,y] := '-1';   // Übertragung Farben der Bloecke
               end;
            end;
          end;
    end
  else   // keine Bloecke zu löschen
    begin
      for x := 0 to Spielfeld.ColCount -1 do
        for y := 0 to Spielfeld.RowCount -1 do
          if  StrToInt(Spielfeld.Cells[x,y]) > 4
          then Spielfeld.Cells[x,y] := IntToStr(StrToInt(Spielfeld.Cells[x,y])-5);   //alter wert wiederherstellen
    end;
    LeereZeile := true;
    for x := 0 to Spielfeld.ColCount-1 do
      begin
        if Spielfeld.Cells[x,Spielfeld.RowCount-1] <> '-1'
        then LeereZeile := false;
      end;
      if LeereZeile = true
      then Punkte := Punkte + 2000;
end;
{=====================================================================}
procedure TForm1.GleicheFarbenFinden(x, y : integer);
var farbwert : string;
begin
  anzahlgleichfarbigerbloecke := anzahlgleichfarbigerbloecke+1;
  // farbcode merken
  farbwert := Spielfeld.Cells[x,y];
   // zelle markieren
  Spielfeld.Cells[x,y] := IntToStr(StrToInt(Spielfeld.Cells[x,y])+5);
  // nördliche zelle testen
  if y > 0
  then
    if Spielfeld.Cells[x,y-1] = farbwert
    then GleicheFarbenFinden(x,y-1);
  // östliche
  if x < Spielfeld.ColCount - 1
  then
    if Spielfeld.Cells[x+1,y] = farbwert
    then GleicheFarbenFinden(x+1,y);
  // südliche
  if y < Spielfeld.RowCount - 1
  then
    if Spielfeld.Cells[x,y+1] = farbwert
    then GleicheFarbenFinden(x,y+1);
  // westliche
  if x > 0
  then
    if Spielfeld.Cells[x-1,y] = farbwert
    then GleicheFarbenFinden(x-1,y);
end;
{=====================================================================}
procedure TForm1.SpielfeldSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
  var b, i    : integer;
begin
  anzahlgleichfarbigerbloecke := 0;
  if Spielfeld.Cells[ACol,Arow] <> '-1'
  then GleicheFarbenFinden(ACol, ARow);
  b := anzahlgleichfarbigerbloecke;
    case b of
    0,1 : Punkte := Anzahlgleichfarbigerbloecke * 0 + Punkte;
    2 : Punkte := Anzahlgleichfarbigerbloecke * 5 + Punkte;
    3 : Punkte := Anzahlgleichfarbigerbloecke * 10 + Punkte;
    4 : Punkte := Anzahlgleichfarbigerbloecke * 15 + Punkte;
    5 : Punkte := Anzahlgleichfarbigerbloecke * 20 + Punkte;
    6 : Punkte := Anzahlgleichfarbigerbloecke * 25 + Punkte;
    7 : Punkte := Anzahlgleichfarbigerbloecke * 30 + Punkte;
    else Punkte := Anzahlgleichfarbigerbloecke * 60 + Punkte;
    end;
  Statusbar1.Panels[0].Text := 'Punkte :' + IntToStr(Punkte);
  GleicheFarbenLoeschen;
{  QuickRep1.Prepare;
  i := QuickRep1.anzahlgleichfarbigerbloecke;
  QuickRep1.Preview;
}
end;
{=====================================================================}
procedure TForm1.ZeitTimer(Sender: TObject);
var x,y      : integer;
    Highscore : TStringList;
begin
if Kaestchen = Leiste.ColCount   // Leiste voll
 then
   begin
     for x := 0 to Spielfeld.ColCount-1 do    // für oberste Zeile
      begin
        if Spielfeld.Cells[x,0] <> '-1'
        then
          begin
            LetzteZeile := true; // wenn Letzte Zeile belegt
            Zeit.Enabled := false;
            Spielfeld.Enabled := false;
            PunkteEnde := Punkte;
            Form8.ShowModal;   // öffnen Fenster mit Game Over
            Highscore := TStringList.Create;
            if FileExists('Highscore.txt22')
            then Highscore.LoadfromFile('Highscore.txt22');
            Highscore.Add(IntToStr(PunkteEnde));
            Highscore.SaveToFile('Highscore.txt22');
            Form5.LeseHighscore;
            Form5.Hide;
            Form5.Show;
          end;
        if LetzteZeile = true
        then break; // beendet for-Schleife
      end;
      if LetzteZeile = false
      then
       begin
        for y := 0 to Spielfeld.RowCount-1 do
         begin
           for x := 0 to Spielfeld.ColCount-1 do
           Spielfeld.Cells[x,y] := Spielfeld.Cells[x,y+1]; // Spiel läuft weiter
         end;
           for x := 0 to Spielfeld.ColCount-1 do
           Spielfeld.Cells[x,Spielfeld.RowCount-1] := Leiste.Cells[x,0]; // Leiste wird weiter übertragen

        for x := 0 to Leiste.ColCount-1 do   // leeren der Leiste
        Leiste.Cells[x,0] := '-1';
        Kaestchen := 0;
        Runden := Runden -1;
        Statusbar1.Panels[1].Text := 'Runden :' + IntToStr(Runden);
        if Runden = 0
        then
         begin
           Zeit.Enabled := false;
           Spielfeld.Enabled := false;
           PunkteEnde := Punkte;
           Form13.ShowModal;
           Level := Level +1;
           Runden := (Level-1)*10+30;
           Zeit.Interval := 500 - (Level - 1) * 10;
           Zeit.Enabled := true;
           Spielfeld.Enabled := true;
           Highscore := TStringList.Create;
           if FileExists('Highscore.txt22')
           then Highscore.LoadfromFile('Highscore.txt22');
           Highscore.Add(IntToStr(PunkteEnde));
           Highscore.SaveToFile('Highscore.txt22');
           Form5.LeseHighscore;
           Form5.Show;
         end;
       end;
   end
 else     // füllen untere Leiste auf
   begin
     Leiste.Cells[Kaestchen,0] := IntToStr(random(5));
     Kaestchen := Kaestchen+1;
   end;
end;
{=====================================================================}
procedure TForm1.EntwicklerClick(Sender: TObject);
begin
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
      Form3.ShowModal;
end;
{=====================================================================}
procedure TForm1.BedienungsanleitungClick(Sender: TObject);
begin
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
      Form4.ShowModal;
end;
{=====================================================================}
procedure TForm1.Highscore1Click(Sender: TObject);
begin
  Form5.ShowModal;
end;
{=====================================================================}
procedure TForm1.Steuerung1Click(Sender: TObject);
begin
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
      Form6.ShowModal;
end;
{=====================================================================}
procedure TForm1.Stopp1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
end;
{=====================================================================}
procedure TForm1.Fortsetzen1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := False;
  Schwierigkeitsgrad.Enabled := False;
  Highscore1.Enabled := False;
  if Zeit.Enabled = false  // wenn Zeit nicht läuft dann
  then
    begin
      Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
    end;
    if Spielfeld.Enabled = false
    then
      begin
        Spielfeld.Enabled := true;
      end;
end;
{=====================================================================}
procedure TForm1.LeichtClick(Sender: TObject);
begin
  NeuesSpiel;
  Zeit.Enabled := true;  // Uhr anschalten
  Zeit.Interval := 550;  // Zeitintervall beträgt 700 Millisekunden
  Statusbar1.Panels[1].Text := 'Runden : 30';
  Runden := 30;
  Leicht.Enabled := False; // deaktiviert Leicht, da geladen
  Mittel.Enabled := True;
  Schwer.Enabled := True;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Punkte := 0;
  if Runden = 0 then
  begin
    Level :=Level+1;
    Runden :=(Level-1)*5+30;
    Zeit.Interval := Zeit.Interval-5;
  end;
  begin
    if anzahlGleichfarbigerbloecke > 1
    then
      begin
        GleicheFarbenLoeschen;
      end;
  end
end;
{=====================================================================}
procedure TForm1.MittelClick(Sender: TObject);
begin
  NeuesSpiel;
  Zeit.Enabled := true;  // Uhr anschalten
  Zeit.Interval := 450;  // Zeitintervall beträgt 300 Millisekunden
  Statusbar1.Panels[1].Text := 'Runden : 50';
  Runden := 50;
  Leicht.Enabled := True;
  Mittel.Enabled := False; // deaktiviert Mittel, da geladen
  Schwer.Enabled := True;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Punkte := 0;
end;
{=====================================================================}
procedure TForm1.SchwerClick(Sender: TObject);
begin
  NeuesSpiel;
  Zeit.Enabled := true;  // Uhr anschalten
  Zeit.Interval := 300;  // Zeitintervall beträgt 100 Millisekunden
  Statusbar1.Panels[1].Text := 'Runden : 70';
  Runden := 70;
  Leicht.Enabled := True;
  Mittel.Enabled := True;
  Schwer.Enabled := False; // deaktiviert Schwer, da geladen
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Punkte := 0;
end;
{=====================================================================}
procedure TForm1.Spielmodus1Click(Sender: TObject);
begin
  Form9.ShowModal;
end;
{=====================================================================}
procedure TForm1.CollapseClick(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form7.ShowModal;
end;
{=====================================================================}
procedure TForm1.HorseClick(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form11.ShowModal;
end;
{=====================================================================}
procedure TForm1.GypsyClick(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form12.ShowModal;
end;
{=====================================================================}
procedure TForm1.Memories1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form2.ShowModal;
end;
{=====================================================================}
procedure TForm1.SwaggerJackin1Click(Sender: TObject);
begin
  Spielmodus1.Enabled := True;
  Schwierigkeitsgrad.Enabled := True;
  Highscore1.Enabled := True;
  if Zeit.Enabled = true  // wenn Zeit läuft dann
  then
    begin
      Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
    end;
    if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
    then
      begin
        Spielfeld.Enabled := false; // Oberfläche deaktivieren
      end;
  Form14.ShowModal;
end;
{=====================================================================}
end.

DeddyH 28. Feb 2010 11:29

Re: Groupboxen, Comboboxen
 
Vom erneuten Posten wird es aber auch nicht besser :roll:. Generell fallen mir 2 Möglichkeiten ein: die "Auf die Schnelle"-Lösung wären globale Variablen, in denen Du die Einstellungen speicherst und entsprechend wieder ausliest. Die saubere Variante wäre eine eigene Klasse in einer eigenen Unit, die die Einstellungen verwaltet.

Swagger Jackin 28. Feb 2010 15:16

Re: Groupboxen, Comboboxen
 
Die Einstellungen sollen gespeichert werden. Wie soll die saubere Methode aussehen ? Welche Komponenten müssen verwendet werden, ich verstehe es nicht ganz, Hilfe !??


Delphi-Quellcode:
Das ist meine Form mit den einstellungen:

{=====================================================================}
procedure TForm15.Button1Click(Sender: TObject);
begin
  case ComboBox1.ItemIndex of
       0:
         begin
           Form1.mediaPlayer1.FileName := 'Collapse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       1:
         begin
           Form1.mediaplayer1.FileName := 'horse.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       2:
         begin
           Form1.mediaplayer1.FileName := 'electro.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       3:
         begin
           Form1.mediaplayer1.FileName := 'Memories.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
       4:
         begin
           Form1.mediaplayer1.FileName := 'Jackin.wav';
           Form1.mediaplayer1.Open;
           Form1.mediaplayer1.Play;
           if Form1.mediaPlayer1.Position = Form1.mediaPlayer1.Length
           then
             begin
               Form1.mediaPlayer1.Rewind;
               Form1.mediaPlayer1.Play;
             end;
         end;
  end;

  case Radiogroup1.ItemIndex of
  0:
    begin
      Showmessage ('Sie haben Leicht gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 550;  // Zeitintervall beträgt 700 Millisekunden
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Runden := 30;
      Form1.Leicht.Enabled := False; // deaktiviert Leicht, da geladen
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := True;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
      if Runden = 0 then
        begin
          Level :=Level+1;
          Runden :=(Level-1)*5+30;
          Form1.Zeit.Interval := Form1.Zeit.Interval-5;
        end;
        begin
          if anzahlGleichfarbigerbloecke > 1
         then
           begin
             Form1.GleicheFarbenLoeschen;
           end;
        end
    end;
  1:
    begin
      Showmessage ('Sie haben Mittel gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 450;  // Zeitintervall beträgt 300 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 50';
      Runden := 50;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := False; // deaktiviert Mittel, da geladen
      Form1.Schwer.Enabled := True;
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  2:
    begin
      Showmessage ('Sie haben Schwer gewählt');
      Form1.NeuesSpiel;
      Form1.Zeit.Enabled := true;  // Uhr anschalten
      Form1.Zeit.Interval := 300;  // Zeitintervall beträgt 100 Millisekunden
      Form1.Statusbar1.Panels[1].Text := 'Runden : 70';
      Runden := 70;
      Form1.Leicht.Enabled := True;
      Form1.Mittel.Enabled := True;
      Form1.Schwer.Enabled := False; // deaktiviert Schwer, da geladen
      Form1.Statusbar1.Panels[0].Text := 'Punkte : 0';
      Punkte := 0;
    end;
  end;
    begin
      if ComboBox1.ItemIndex = 0 then Showmessage ('Sie haben Collapse Music gewählt');
      if ComboBox1.ItemIndex = 1 then Showmessage ('Sie haben Amazing Horse gewählt');
      if ComboBox1.ItemIndex = 2 then Showmessage ('Sie haben Electro Gypsy gewählt');
      if ComboBox1.ItemIndex = 3 then Showmessage ('Sie haben Memories gewählt');
      if ComboBox1.ItemIndex = 4 then Showmessage ('Sie haben Swagger Jackin gewählt');
    end;
   
    if ComboBox1.ItemIndex = 0
    then
      begin
        if MessageDlg('Wirklich Beginnen ?',mtInformation,[mbYes,mbNo],0)=6 // Frage gestellt bevor Start
        then Form15.Close;
      end
    else
      begin
        Showmessage('Bitte wähle einen Spielmodus, einen Schwierigkeitsgrad und eine Musik !');// müssen drei Einstellungen gewählt sein
      end;
end;
{=====================================================================}
procedure TForm15.ComboBox1Change(Sender: TObject);
begin
  if ComboBox1.ItemIndex = 0
  then
    begin
      Form1.NeuesSpiel;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      if Form1.Zeit.Enabled = false  // wenn Zeit nicht läuft dann
      then
        begin
          Form1.Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
        end;
        if Form1.Spielfeld.Enabled = false
        then
          begin
            Form1.Spielfeld.Enabled := true;
          end;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 30';
      Punkte := 0;
      Runden := 30;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end
  else
    begin
      Form1.NeuesSpiel;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      if Form1.Zeit.Enabled = false  // wenn Zeit nicht läuft dann
      then
        begin
          Form1.Zeit.Enabled := true; // Programm starten/Zeit laufen lassen
        end;
        if Form1.Spielfeld.Enabled = false
        then
          begin
            Form1.Spielfeld.Enabled := true;
          end;
      Form1.StatusBar1.Panels[0].Text := 'Punkte : 0';
      Form1.StatusBar1.Panels[1].Text := 'Runden : 50';
      Punkte := 0;
      Runden := 50;
      anzahlgleichfarbigerbloecke := 0;
      Form1.Zeit.Enabled := true;
      Form13.start := now;
      Form1.Spielmodus1.Enabled := False;
      Form1.Schwierigkeitsgrad.Enabled := False;
      Form1.Highscore1.Enabled := False;
      Form9.Close;
    end;
end;
{=====================================================================}
end.
das sind die Einstellungen --> funktionieren.





Vielleicht muss man beim Neues Spiel die Einstellungen speichern:


Delphi-Quellcode:
{=====================================================================}
procedure TForm1.FormActivate(Sender: TObject);
begin
  if Form15.ShowModal
  then ----> hier ist ein Fehler (then muss vom Typ boolean sein) steht als Fehler da
     begin
      Spielmodus1.Enabled := True;
      Schwierigkeitsgrad.Enabled := True;
      Highscore1.Enabled := True;
      if Zeit.Enabled = true  // wenn Zeit läuft dann
      then
        begin
          Zeit.Enabled := false; // Programm stoppen/ Zeit anhalten
        end;
        if Spielfeld.Enabled = true   // wenn Oberfläche bedienbar
        then
          begin
            Spielfeld.Enabled := false; // Oberfläche deaktivieren
          end;
    end;

  Spielfeld.DefaultColWidth := Zellengroesse;
  Spielfeld.DefaultRowHeight := Zellengroesse;
  Spielfeld.ClientWidth := Spielfeld.ColCount*(Zellengroesse+Spielfeld.GridLineWidth);
  Spielfeld.ClientHeight := Spielfeld.RowCount*(Zellengroesse+Spielfeld.GridLineWidth);
  Leiste.DefaultColWidth := Zellengroesse;
  Leiste.DefaultRowHeight := Zellengroesse;
  Leiste.ClientWidth := Leiste.ColCount*(Zellengroesse+Leiste.GridLineWidth);
  Leiste.ClientHeight := Leiste.RowCount*(Zellengroesse+Leiste.GridLineWidth);
  // Statusbar im Verhältnis 1:3 teilen
  StatusBar1.Panels[0].Width := StatusBar1.Width div 2;
  Form1.Width := Spielfeld.ClientWidth+12;
  Form1.Height := Spielfeld.ClientHeight+80+Leiste.ClientHeight+30;
  randomize;
  NeuesSpiel;
  Spielfeld.Enabled := false;   // bei Start Stillstand
  Zeit.Enabled := false;        // Zeit anhalten sofort nach Start
  Classic:= true;
end;
{=====================================================================} 

{=====================================================================}
procedure TForm1.NeuesSpiel1Click(Sender: TObject);
begin
  NeuesSpiel;
  Statusbar1.Panels[0].Text := 'Punkte : 0';
  Statusbar1.Panels[1].Text := 'Runden : 30';
//  Statusbar1.Panels[2].Text := 'Level : 1';
//  Level := 1;
  Punkte := 0;
  Runden := 30;
  anzahlgleichfarbigerbloecke := 0;
  Zeit.Enabled := true;
  Form13.start := now;
  Spielmodus1.Enabled := False;
  Schwierigkeitsgrad.Enabled := False;
  Highscore1.Enabled := False;
end;
{=====================================================================} 

{=====================================================================}
procedure TForm1.NeuesSpiel;
var x,y,i : integer;
begin
   for x := 0 to Spielfeld.ColCount-1 do
   begin
     i := random(4)+1;  // zufällige Anordnung der Kästchen
     for y := Spielfeld.RowCount-i to Spielfeld.RowCount-1 do
      Spielfeld.Cells[x,y] := IntToStr(random(5)); // belegt alle Felder mit Farbe
     for y := 0 to Spielfeld.RowCount-i-1 do
      Spielfeld.Cells[x,y] := '-1'; // belegt alle leeren Felder mit schwarz
   end;
     for x := 0 to Leiste.ColCount-1 do
      Leiste.Cells[x,0] := IntToStr(random(5)); // zufällige Belegung der Leiste
   Zeit.Enabled := true;  // Uhr anschalten
   Zeit.Interval := 500;
   Kaestchen := Spielfeld.ColCount;
   LetzteZeile := false;
   Spielfeld.Enabled := true;
end;
{=====================================================================}

DeddyH 28. Feb 2010 15:20

Re: Groupboxen, Comboboxen
 
Ist Dir schon aufgefallen, dass Du in Form15 fast ausschließlich auf andere Formulare zugreifst? Wieso merkst Du Dir die Einstellungen nicht einfach, sonst müsstest Du dieses Formular ja bei jedem neuen Spiel öffnen, damit es weitergeht. Außerdem solltest Du Deine Formulare, Variablen und Komponenten mal vernünftig benennen, damit auch Außenstehende zumindest erahnen können, was sie darstellen sollen.

[edit] Und hör bitte auf, in jedem Post ellenlange Quelltexte mitzuliefern. Zur Not kannst Du die Units auch an Deinen Beitrag anhängen. [/edit]

Swagger Jackin 28. Feb 2010 15:30

Re: Groupboxen, Comboboxen
 
Wie merkt man sich Einstellungen ? noch nie gesehen oder gehört wie das geht.

DeddyH 28. Feb 2010 15:31

Re: Groupboxen, Comboboxen
 
Nimm doch einfach globale Variablen, man muss ja nicht gleich mit Kanonen auf Spatzen schießen.

Swagger Jackin 28. Feb 2010 15:32

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von Swagger Jackin
Wie merkt man sich Einstellungen ? noch nie gesehen oder gehört wie das geht.

Form1 entspricht der Hauptform wo alles vom Spiel ist.
Form15 = Einstellungsform für Spiel.

DeddyH 28. Feb 2010 15:35

Re: Groupboxen, Comboboxen
 
Und wieso heißen die dann nicht auch so? Außerdem sehe ich den Zusammenhang zwischen dem Zitat und dem Text in Deinem letzten Post nicht :gruebel:.

Swagger Jackin 28. Feb 2010 15:36

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von Swagger Jackin
Zitat:

Zitat von Swagger Jackin
Wie merkt man sich Einstellungen ? noch nie gesehen oder gehört wie das geht.

Form1 entspricht der Hauptform wo alles vom Spiel ist.
Form15 = Einstellungsform für Spiel.

Könntest du mir am Bsp. von meinen Quelltext globale Variablen zeigen ?
:oops: :cry: :gruebel:

DeddyH 28. Feb 2010 15:43

Re: Groupboxen, Comboboxen
 
Das sind ja nun wirklich Grundlagen. Aber ausnahmsweise:
Delphi-Quellcode:
unit Bla;

interface

...

var GlobalString: string; //programmglobale Variable

implementation

var GlobalInt: integer; //unitglobale Variable

procedure Wuppdi;
var blubb: integer; //lokale Variable
begin
  //Code
end;

Swagger Jackin 28. Feb 2010 15:48

Re: Groupboxen, Comboboxen
 
Zitat:

Zitat von DeddyH
Das sind ja nun wirklich Grundlagen. Aber ausnahmsweise:
Delphi-Quellcode:
unit Bla;

interface

...

var GlobalString: string; //programmglobale Variable

implementation

var GlobalInt: integer; //unitglobale Variable

procedure Wuppdi;
var blubb: integer; //lokale Variable
begin
  //Code
end;

danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 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