Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi will randomzahlen aufaddieren (https://www.delphipraxis.net/14908-will-randomzahlen-aufaddieren.html)

Fedebolix 17. Jan 2004 20:44


will randomzahlen aufaddieren
 
so, nocheinmal mein problem, nachdem ich es schon an der falschen stelle geschildert habe...

also, ich will randomzahlen aufadieren. jetzt habe ich es soweit geshaft:

zufallszahl:=random(5)+1;
edit1.Text:=inttostr(zufallszahl);
if zufallszahl=1 then summe:=summe-summe
else summe:=summe+zufallszahl;

aber es funktioniert nicht...

MrKnogge 17. Jan 2004 20:47

Re: will randomzahlen aufaddieren
 
schreib das doch in deinen alten Thread, sonst verliert man hier den Überblick !

Fedebolix 21. Jan 2004 17:40

Re: will randomzahlen aufaddieren
 
hm, ja, hab ich gemacht, oder wurde gemacht...

aber die frage... die gilt immer noch :arrow:

negaH 21. Jan 2004 17:47

Re: will randomzahlen aufaddieren
 
Delphi-Quellcode:
if zufallszahl=1 then
  summe:=summe-summe  //  ---> X - X == 0 das gilt immer
else
  summe:=summe+zufallszahl;
Warum nun die IF Abfrage ? Erkläre mal warum du das so gecodet hast.

Gruß hagen

PS: am obigen Beispiel erkennt man auch warum ein besserer Programmierstil eventuelle logische Fehler verhindert.

Fedebolix 21. Jan 2004 17:50

Re: will randomzahlen aufaddieren
 
naja, wenn eine eins gewürfelt wird, soll ja der punktestand gelöscht werden, darum...

negaH 21. Jan 2004 18:07

Re: will randomzahlen aufaddieren
 
Gut dann wäre das richtig:

Delphi-Quellcode:
if ZufallsZahl = 1 then Summe := 0
  else Inc(Summe, ZufallsZahl);
Was funktioniert nun nicht richtig ? Denn dein eigene Code macht exakt das du willst.

Gruß Hagen

Michael Leyhe 21. Jan 2004 18:57

Re: will randomzahlen aufaddieren
 
HI

Dein Soude sieht ganz in Ordnung aus! Also wenn etwas nicht funktioniert dann sollte dies an den Zeilen davor oder danach liegen.

Ich weiß nicht ob du das nicht schon weißt, weil dein Source dies nicht beinhaltet, aber der Befehl Random spuckt immer die gleichen Zahlen aus und bei einem Würfelspiel wie du es programmieren willst wäre das ja eher schlecht. Mit dem Befehl

Delphi-Quellcode:
Randomize;
leitet Random die Zufallszahl von der Systemzeit ab und somit kommen nicht immer die gleichen Zahlen.

Fedebolix 21. Jan 2004 19:55

Re: will randomzahlen aufaddieren
 
ja danke, ich werds gleich mal ausprobieren...
aber wenn es das gleiche macht. Das Problem das ich hatte, "summe" muss als variable stehn und wenn ich vor der if-bedingung summe keinem Wert oder sonstigem zugeordnet hatte, kam als ergbnis immer 18920 oder ähnliches rauß...

Fedebolix 21. Jan 2004 20:05

Re: will randomzahlen aufaddieren
 
so siehts bei mri jetzt aus... aber klappen tuts noch nicht

var zufallszahl, summe: integer;
begin
randomize;
zufallszahl:=random(6)+1;
edit1.Text:=inttostr(zufallszahl);
if zufallszahl = 1 then Summe := 0
else Inc(Summe, ZufallsZahl);

Wuzzel 21. Jan 2004 20:13

Re: will randomzahlen aufaddieren
 
wenn du solche werte rausbekommst solltest du vielleicht bevor du anfängst zu würfeln, summe ienene wert zu ordnen, zb 0 oder ähnliches...

gekmihesg 21. Jan 2004 20:25

Re: will randomzahlen aufaddieren
 
ich hab mir deinen ersten thread angeschaut und mir daraufhin ein spiel daraus gebastelt ;) die stelle die du meinst sieht bei mir so aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var zahl,i: integer;
begin
zahl:=strtoint(label1.Caption);
i:=random(5)+1;
if i = 1 then
    zahl:=0
else
  zahl:=zahl+i;
label1.Caption:=inttostr(zahl);
end;

Fedebolix 21. Jan 2004 20:29

Re: will randomzahlen aufaddieren
 
und so?

Delphi-Quellcode:
var zufallszahl, summe: integer;
begin
    summe:=0;
   randomize;
              zufallszahl:=random(6)+1;
              edit1.Text:=inttostr(zufallszahl);
   if zufallszahl = 1 then Summe:=0
  else Summe:=Inc(Summe, zufallszahl)
  edit2.Text:=inttostr(summe);

Fedebolix 21. Jan 2004 20:30

Re: will randomzahlen aufaddieren
 
oh, kannst du mir dasspiel vielleicht mal zukomm lassen?

Fedebolix 21. Jan 2004 20:39

Re: will randomzahlen aufaddieren
 
Zitat:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var zahl,i: integer;
begin
zahl:=strtoint(label1.Caption);
i:=random(5)+1;
if i = 1 then
    zahl:=0
else
  zahl:=zahl+i;
label1.Caption:=inttostr(zahl);
end;

ja, das haut hin, nur will ich, das die zahlen in einem weitern editfenster zusammengerechnet werden und die zahlen die gewürfelt werden, weiterhin so angezeigt erden

Fedebolix 21. Jan 2004 20:59

Re: will randomzahlen aufaddieren
 
so, jetzt habe iches geschaft!!!!!!!!

dank an alle

Delphi-Quellcode:
  var zahl,i: integer;
begin

zahl:=strtoint(edit2.text);

 randomize;
 i:=random(6)+1;
 edit1.Text:=inttostr(i);
  if i = 1 then
    zahl:=0
else
  zahl:=zahl+i;
edit2.text:=inttostr(zahl);
:thuimb:

negaH 21. Jan 2004 23:41

Re: will randomzahlen aufaddieren
 
Jetzt verstehe ich dein Problem :)

Nun deine Methode TForm1.Button1Click(Sender: TObject); ist ja Bestandteil eines Objectes -> TForm. Das was du anscheinend noch nicht weist ist das auch ein Object eigene Variablen deklarieren kann.
Statt also Summe, eg. Zahl, als Lokale Variable in der Methode .Button1Click() zu deklarieren, wird diese Variable als Feld des Objectes definiert. Das sieht dann so aus:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit2: TEdit;
   ...
    procedure Button1Click(Sender: TObject);
   ...
  private
    FSumme: Integer;
  protected
  public
  published
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  I := Random(5) +1;
  if I = 1 then FSumme := 0
    else Inc(FSumme, I);

  Edit2.Text := IntToStr(FSumme);
end;
Wie du siehst wurde FSumme als neues privates Feld der Klasse TForm1 definiert. Jedes Object vom Typ TForm1 enthält nun eine eigene Variable mit dem Namen FSumme. Diese existiert exakt so lange wie auch das Object existert. Alle Felder von solchen Objecten werden per default mit 0, nil, '' usw. initialisiert.
Innerhalb jeder Methode zur Klasse TForm1 kann man direkt auf diese Object-Felder zugreifen.

Gruß Hagen


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