AGB  ·  Datenschutz  ·  Impressum  







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

Schleife wohin und wie?

Ein Thema von Jean-Luc_Picard · begonnen am 5. Mär 2009 · letzter Beitrag vom 5. Mär 2009
Antwort Antwort
Benutzerbild von Jean-Luc_Picard
Jean-Luc_Picard

Registriert seit: 25. Feb 2009
6 Beiträge
 
#1

Schleife wohin und wie?

  Alt 5. Mär 2009, 10:54
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:
FOR...
procedure Tspiel.Button1Click(Sender: TObject);
...
FOR ENDE
Weil ich will ja immer das man in jeder Runde der Spieler1 und Spieler2 eine andere Zahl eingeben können und dann wieder auf den Button Würfeln klicken sollen.

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:
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 hoffe es ist nicht zu viel. Aber dachte mir ich Poste alles damit ihr besser klar kommt.
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
David
  Mit Zitat antworten Zitat
hoika

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

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 11:15
Hallo,

ich verstehe ein Problem nicht ...
Aber auch PHP kennt Funktionen.
Delphi-Quellcode:
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;
Die anderen Variablen würde ich in einee 3. Unit auslagern (interface-Teil)
und diese 3. Unit per Uses an die beiden anderen "ankoppeln".


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jean-Luc_Picard
Jean-Luc_Picard

Registriert seit: 25. Feb 2009
6 Beiträge
 
#3

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 11:19
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
David
  Mit Zitat antworten Zitat
hoika

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

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 11:31
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 12:08
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Jean-Luc_Picard
Jean-Luc_Picard

Registriert seit: 25. Feb 2009
6 Beiträge
 
#6

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 12:54
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!
David
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 13:31
Delphi-Quellcode:
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;
So in der Art hat hoika das wahrscheinlich gemeint.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jean-Luc_Picard
Jean-Luc_Picard

Registriert seit: 25. Feb 2009
6 Beiträge
 
#8

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 14:38
Vielen Dank, ich werde beide Versionen mal testen.

Danke, Super Forum!
David
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: Schleife wohin und wie?

  Alt 5. Mär 2009, 14:51
Delphi-Quellcode:
type
  TForm1 = class
     
  private
    Rundenzahl: Integer;
  end;


procedure ButtonWürfelnClick(Sender: TObject);
begin
  if Rundenzahl > 0 then begin
    Rundenzahl := Rundenzahl - 1;
    DoSpielen;
  end;
end;
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.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

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

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

Gehe zu:

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