![]() |
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. |
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] |
Re: Groupboxen, Comboboxen
Hallo,
warum nimmst Du keine RadioGroup und prüfst einfach auf...
Delphi-Quellcode:
Hat auch den Vorteil, das immer ein Modus aktiv ist. Es wäre gar nicht möglich keine Auswahl getroffen zu haben.
case RadioGruop.ItemIndex of
0:... 1:... (Es sei denn es muss umbedingt so sein, dann...
Delphi-Quellcode:
Gruß Jens
RadioGroup.ItemIndex := -1;
|
Re: Groupboxen, Comboboxen
Zitat:
|
Re: Groupboxen, Comboboxen
Zitat:
|
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:
das hab ich geschafft, aber es will nicht irgendwo bei case liegt der Fehler.
{=====================================================================}
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. |
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.
|
Re: Groupboxen, Comboboxen
Ich hab die Radiogroup erst erstellt, dann einzeln von oben die Radiobuttons draufgesetzt.
:pale: :oops: |
Re: Groupboxen, Comboboxen
Du musst nicht denken, dass Du der erste bist, der das so gemacht hat und sich dann wundert :zwinker:
|
Re: Groupboxen, Comboboxen
Zitat:
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: |
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] |
Re: Groupboxen, Comboboxen
Zitat:
--> 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; {=====================================================================} |
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 |
Re: Groupboxen, Comboboxen
Es Geht, JJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAA
:hello: :dancer2: :dancer2: :cheers: :cheers: :cheers: :love: :love: Danke, danke.!!!!!!!!!!!!!! |
Re: Groupboxen, Comboboxen
Kleine Ursache, große Wirkung :zwinker:
|
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. |
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.
|
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. |
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.
|
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 sind die Einstellungen --> funktionieren.
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. 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; {=====================================================================} |
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] |
Re: Groupboxen, Comboboxen
Wie merkt man sich Einstellungen ? noch nie gesehen oder gehört wie das geht.
|
Re: Groupboxen, Comboboxen
Nimm doch einfach globale Variablen, man muss ja nicht gleich mit Kanonen auf Spatzen schießen.
|
Re: Groupboxen, Comboboxen
Zitat:
Form15 = Einstellungsform für Spiel. |
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:.
|
Re: Groupboxen, Comboboxen
Zitat:
:oops: :cry: :gruebel: |
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; |
Re: Groupboxen, Comboboxen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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