![]() |
Schleife wohin und wie?
Hallo zusammen,
ich habe mir hier ein Proggi geschrieben was folgendes tut. Einlesen 2 Spielernamen, Würfelbereich (später zufallszahl) und Anzahl der Runden. Wenn das Proggi dann startet und man die Felder füllt und auf start klickt erscheint eine 2. Form wo Spieler 1 und Spieler 2 eine Zahl eingeben dürfen. Jetzt ermittelt das Programm wer näher dran ist und zeigt den Sieger an. Jetzt kommt mein Problem: Ich wollte eine Schleife bauen die so lange durch läuft wie man am Anfang die Anzahl der Runden eingibt. Wenn ich im 2. Fenster auf den Button Würfeln klicke läuft die erste Runde, dann soll man wieder 2 Zahlen eingeben dürfen und die nächste runde wenn wieder auf Würfeln geklickt wird. Habe mir n Tutos durchgelesen wie Schleifen geschrieben werden. Muss ich ich die Schleife über dem: procedure Tspiel.Button1Click(Sender: TObject); einstellen? also so: Zitat:
Bis hier hin läuft das Proggi übrigens super. Könnt ihr mir weiterhelfen bzw. eventuell zeigen wie ich das am besten Lösen kann? Ich nutze auch Variablen die von einer Form in die andere übergeben werden für die Übernahme der Namen und runden und bereich. Stehen unter PUBLIC. Hatte ich so nachgelesen und funktioniert super. Das ist der erste Teil meines Programmes, für die Aufnahme der Spieloptionen:
Delphi-Quellcode:
unit start_programm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tstart = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; spieler1: TEdit; Label2: TLabel; spieler2: TEdit; ueberschrift: TLabel; GroupBox2: TGroupBox; Label3: TLabel; bereich: TEdit; Label4: TLabel; runden: TEdit; start: TButton; beenden: TButton; procedure beendenClick(Sender: TObject); procedure startClick(Sender: TObject); private { Private declarations } public player1, player2: String; range, round : integer; { Public declarations } end; var start: Tstart; implementation uses das_spiel; {$R *.dfm} procedure Tstart.beendenClick(Sender: TObject); begin close; end; procedure Tstart.startClick(Sender: TObject); begin player1 := spieler1.Text; player2 := spieler2.Text; range := StrToInt(bereich.Text); round := StrToInt(runden.Text); spiel.showModal; end; end. Hier ist der 2. Teil das Spiel selbst:
Delphi-Quellcode:
Ich hoffe es ist nicht zu viel. Aber dachte mir ich Poste alles damit ihr besser klar kommt.
unit das_spiel;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type Tspiel = class(TForm) ueberschrift: TLabel; p1: TGroupBox; Label1: TLabel; zahl_p1: TEdit; p2: TGroupBox; Label2: TLabel; zahl_p2: TEdit; Image1: TImage; Button1: TButton; Label3: TLabel; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var spiel: Tspiel; implementation uses start_programm; {$R *.dfm} procedure Tspiel.FormActivate(Sender: TObject); begin p1.Caption := start.player1; p2.Caption := start.player2; end; procedure Tspiel.Button1Click(Sender: TObject); var zahl_sp1, zahl_sp2, Erg1, Erg2, zufallszahl : integer; begin zahl_sp1 := StrToInt(zahl_p1.Text); zahl_sp2 := StrToInt(zahl_p2.Text); zufallszahl := 1 + Random(start.range); Label3.Caption := IntToStr(zufallszahl); Erg1 := Abs(zahl_sp1 - Zufallszahl); Erg2 := Abs(zahl_sp2 - Zufallszahl); if Erg1 = Erg2 then begin ShowMessage('Beide Gleich'); end else if Erg1 > Erg2 then begin ShowMessage('Spieler 2 hat gewonnen'); end else ShowMessage(start.player1+' hat gewonnen'); end; end. Ich bin neu in Delphi, habe vorher nur PHP,SQL, JavaScript und Makro und so programmiert und Versuche mich jetzt in Delphi :-) Vielen Dank schonmal!!! Gruß, Picard |
Re: Schleife wohin und wie?
Hallo,
ich verstehe ein Problem nicht ... Aber auch PHP kennt Funktionen.
Delphi-Quellcode:
Die anderen Variablen würde ich in einee 3. Unit auslagern (interface-Teil)
type
TForm procedure OnButton1Click; procedure DoPlay; end; procedure TForm.OnButton1Click; var xxx iGame : Integer; iMaxGames : Integer; begin // Variablen auslesen for iGasme:= 1 to iMaxGames do begin DoPlay; end; end; procedure TForm.DoPlay; begin // das eigentliche Spielen end; und diese 3. Unit per Uses an die beiden anderen "ankoppeln". Heiko |
Re: Schleife wohin und wie?
Hallo,
ja ich weiß das. Meine unklarheit war ja diese ob die FOR Schleife in die Prozedur soll. Weil ich möchte, z.B. Runden 3, das ich 3 mal auf den Button klicken muss und jedes mal die Werte neu eingeben. Ich hoffe ich kann es gut erklären. Wenn dem so ist das die FOR in der Prozedur steht dann ist ja gut. Weil die Prozedur wird ja nur aktiv wenn ich den Button klicke und dann rennt ja die FOR 3 mal durch zum Beispiel. Deswegen hatte ich gedacht das sie for der Prozedur muss, wisste wie? ;) Danke trotzdem! Gruß, Picard |
Re: Schleife wohin und wie?
Hallo,
zum Verständnis. die OnClick ist keine normale Prozedur, sondern die Reaktion auf das Klicken des Buttons. Wenn nach dem Klicken etwas 3mal gemacht werden soll, schreibe ich ein eigene Methode und rufe Sie dreimal (for) in der OnClick-Methode auf. Ich gehe sogar soweit, dass ich im OnClick nur den Aurfuf einer eigenen Methode (DoStartGame als Bsp.) stehen habe. Dann kann ich das OnClick auch intern "simulieren". Heiko |
Re: Schleife wohin und wie?
Hier ist keine Schleife angebracht, sondern einfach ein Zähler, der anfangs auf die Rundenzahl gesetzt wird un beim erreichen von 0 bspw die Form2 schließt.
|
Re: Schleife wohin und wie?
Hallo Sirius, hallo Hoika,
vielen Dank für die Ideen. Das mit dem Zähler bis der Wert vom aufhören kommt ist ne feine idee. Manchmal denke ich einfach zu kompliziert. Danke @irius! @Hoika: Kannst du mir ein Beispiel zeigen? Einfach zum verständnis damit ich lernen kann. Danke! Eventuell kannst du auch meinen Code benutzen. Vielen Dank, Wenn ich Probleme habe Poste ich :-) DANKE! |
Re: Schleife wohin und wie?
Delphi-Quellcode:
So in der Art hat hoika das wahrscheinlich gemeint.
procedure SayHello(i: integer);
begin ShowMessage(Format('Hello World No. %d',[i])); end; procedure TFormBla.ButtonWuppdiClick(Sender: TObject); var i: integer; begin for i := 1 to 3 do SayHello(i); end; |
Re: Schleife wohin und wie?
Vielen Dank, ich werde beide Versionen mal testen.
Danke, Super Forum! |
Re: Schleife wohin und wie?
Delphi-Quellcode:
Ich schätze mal eher, dass Hoika es so gemeint hat. Irgendwann vor dem Ersten Klicken auf "Würfeln" musst du eine Rundenzahl größer als Null eingeben, dann wird mit jedem Klick auf "Würfeln" einmal gespielt, solange bis der Rundenzähler auf Null steht.
type
TForm1 = class private Rundenzahl: Integer; end; procedure ButtonWürfelnClick(Sender: TObject); begin if Rundenzahl > 0 then begin Rundenzahl := Rundenzahl - 1; DoSpielen; end; end; Was ist der Unterschied zwischen der Zähler- und der Schleifenvariante? Bei der Schleifenvariante muss man den Button "Würfeln" einmal Klicken, dann wird sooft gespielt, wie in Rundenzahl festgelegt. Bei der Zählervariante muss man jedes Spiel mit dem Button "Würfeln" beginnen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 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