Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Random-Funktion
Bob - Mi 19.04.06 15:37
Titel: Random-Funktion
Servus;)
Ich versuch grad ne Art WM-Tippspiel mit Delphi zu machen. Dazu gehört natrülich,dass die Ergebnisse zufällig gewählt werden wenn man auf den Button klickt. Mein Problem ist jetzt,dass ich es nicht hinbekomme, dass in den Editfeldern die Zahlen zufällig auftreten. Ich hab zwar eine Random-Funktion ausproiert,aber das ist eine wo dann ein Text überall erscheint oder wo der irgendwo erscheint. Aber cih finde nicht dazu, wie man zufällige Zahlen in Editfelder schafft...kann mir jemand helfen oder en Tipp geben?
Narses - Mi 19.04.06 15:39
Moin und :welcome: im Forum!
Zeig doch mal etwas Code oder sag uns, was du bisher gemacht hast und was nicht klappt, bzw. wie du es gerne machen möchtest; so können wir dir nicht helfen, weil du zu wenig Details geliefert hast... ;)
cu
Narses
der Berliner - Mi 19.04.06 15:46
:welcome:
Also ich versuch ihm mal trozdem zu helfen. :flehan:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FormCreate(Sender: TObject); begin Randomize; Edit1.Text:=IntToStr(Random(10));end;
procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:=IntToStr(Random(10)); end; |
Gruß
Philipp_Reitter - Mi 19.04.06 15:56
probiers mal damit....
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| randomize; zahl:=random(deinezahl); edit1.text:= inttostr(zahl); |
Bob - Mi 19.04.06 16:14
Also danke schon mal für die zahlreichen Antworten :)
DIe Random-Funtkion die ich gemeint hatte war die die unten im Quelltext ist.Hab halt noch nciht viel gemacht. Hab SPiele auf die Oberfläche geschrieben,die Editfelder erstellt und dann soll es eben für richtige Tipps Punkte geben...Bilder sollen ab eienr gewissen Punktzhahl erscheinen...aber erstmal muss ich eben Ergebnisse vorliegen haben damit die anderen Sachen ermöglicht werden können :D
Also danke schonmal für die Hilfe,ich probier das mal aus im Laufe des Tages un gebe dann mal Bescheid wie es aussieht 8)
PS: Wollt Quelltext hinzufügen...weiß net obs klappt bzw man dies macht. Wenn es net geht,das ist der Quelltext der RandomFunktion die ich benutzt habe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var
I: Integer; begin Randomize; for I := 1 to 50 do begin Canvas.TextOut(Random(Width), Random(Height), 'Fang mich!'); end; end; |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Bob - Fr 21.04.06 15:18
der Berliner hat folgendes geschrieben: |
:welcome:
Also ich versuch ihm mal trozdem zu helfen. :flehan:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:=IntToStr(Random(10)); end; |
|
´
Also das ging;) Jetzt krieg ich schöne Zufallsergebnisse...danke schön;) Jetzt mal ne andere Frage...ich möchte jetzt, dass wnn 2 Editfelder übereinstimmen,also wenn das Ergebnis richtig ist, dass dann in einem anderen Editfeld automatisch die punkte angezeigt werden die man dafür bekommt...bzw braucht man dafür überhaupt ein Editfeld und nicht vllt label...?
bs-Hobbit - Fr 21.04.06 15:41
Delphi-Quelltext
1: 2:
| If edit1.text = edit2.text then labe11.caption := IntToStr(punkte); |
wobei Punkte eine variable vom Typ Integer/byte/word/cardinal/u.a. ist
Bob - Di 25.04.06 20:31
Danke für den Tipp..einmal hat es auch geklappt...nur dann irgendwie nicht mehr...
Mein Quelltext waroder ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| If edit1.text = edit9.text then label25.caption := IntToStr(5) else label25.caption := IntToStr(0);
If edit5.text = edit13.text then label30.caption := IntToStr(5) else label30.caption := IntToStr(0);
If edit2.text = edit10.text then label26.caption := IntToStr(5) else label26.caption := IntToStr(0); |
der zeigt mir wenn ich aber die Tipps eingegeben habe und die Zufallsergebnisse erscheinen immer die 0 an. Aber irgendwie ging es schon einmal...?
Bob - Di 02.05.06 20:56
Hat niemand vllt ne Idee woran liegts?:)
DnC - Di 02.05.06 21:21
ich seh erstmal keinen Fehler
ganz sicher, dass du richtig getippt hast?
dann wärs ja logisch
Bob - Di 02.05.06 21:23
Also wie gesagt..er compaliert...nur auch wenn die Ergebnisse übereinstimmen zeigt er null Punkte an...
DnC - Mi 03.05.06 14:47
zeige mal den Rest des Quellcodes
chriss1988 - Mi 03.05.06 14:53
versuchs mal so
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TSingleplayergame.Button1Click(Sender: TObject); begin randomize; Zahl:=random(7); edit2.text:=floattostr(zahl);
spielzahl:=strtofloat(edit1.text); if spielzahl=Zahl then begin Spielerpunkte:=Spielerpunkte+1; label4.caption:=floattostr(Spielerpunkte); end;
if Spielerpunkte=5 then showmessage(panel1.caption+' hat gewonnen'); end; |
Bob - Fr 05.05.06 13:56
@DnC:
Also sehr viel mehr Quelltext hab ich kaum..davor halt was...der vollständige ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm1.Button1Click(Sender: TObject); begin Edit9.Text:=IntToStr(Random(5)); Edit10.Text:=IntToStr(Random(5)); Edit11.Text:=IntToStr(Random(5)); Edit12.Text:=IntToStr(Random(5)); Edit13.Text:=IntToStr(Random(5)); Edit14.Text:=IntToStr(Random(5)); Edit15.Text:=IntToStr(Random(5)); Edit16.Text:=IntToStr(Random(5)); If edit1.text = edit9.text then label25.caption := IntToStr(5) else label25.caption := IntToStr(0);
If edit5.text = edit13.text then label30.caption := IntToStr(5) else label30.caption := IntToStr(0);
If edit2.text = edit10.text then label26.caption := IntToStr(5) else label26.caption := IntToStr(0);
If edit6.text = edit14.text then label31.caption := IntToStr(5) else label31.caption := IntToStr(0);
If edit3.text = edit11.text then label27.caption := IntToStr(5) else label27.caption := IntToStr(0);
If edit7.text = edit15.text then label32.caption := IntToStr(5) else label32.caption := IntToStr(0);
If edit4.text = edit12.text then label28.caption := IntToStr(5) else label28.caption := IntToStr(0);
If edit8.text = edit16.text then label33.caption := IntToStr(5) else label33.caption := IntToStr(0);
end;
end. |
@Chris:
Hab ich mal auf die Schnelle ausprobiert,hat aber noch nicht geklappt weil ich dann ja im Prinzip das Gerüst des Quelltexts umändern muss.Dauert bestimmt nicht so lang aber hab ich noch nicht geschafft.
Aber ich find der sieht gut aus vor allem dass dann diese Nachricht erscheint "hat gewonnen",da ich so was auch machen wollte bei einer bestimmen Punktzahl...
Bob - Mo 08.05.06 20:53
Alsoooo..des mit den Punkten hab ich hinbekommen:)hab nur noch ein Problem...ich will,dass das programm jetzt die Teilpunkte zusammenaddiert...tut es aber nicht richtig...sondern es schreibt nur die Zahlen nebeneinander...weiß jemand wie man das beheben kann...?
DelphiAnfänger - Mo 08.05.06 21:06
was hast du denn probiert was nicht geklappt hat?
Bob - Mo 08.05.06 21:10
Ich habe zum Beispiel geschrieben:
label1.caption + label2.caption + label3.caption usw...
beispiel is dann:
5 + 0 + 5
und statt er addiert und 10 schreibt schreibt er:
505...
DelphiAnfänger - Mo 08.05.06 21:28
du kannst keine strings addieren du musst sie vorher umwandel die einfache Variante ist:
Delphi-Quelltext
1:
| lbAusgabe.caption:=floattostr(strtofloat(label1.caption)+strtofloat(label2.caption)+strtofloat(label3.caption)) |
etwas komplizierter aber übersichtlicher ist folgende variante:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.addiere; VAR iZahl1, iZahl2, iZahl3, iErgebnis:real; begin iZahl1:=strtofloat(label1.caption); iZahl2:=strtofloat(label2.caption); iZahl3:=strtofloat(label3.caption); iErgebnis:=iZahl1+iZahl2+iZahl3; lbAusgabe.caption:=floattostr(iErgebnis); end; |
Bob - Mo 08.05.06 21:46
Ok...danke schön...muss ich dann mal probieren morgen :)
Bob - Do 18.05.06 16:46
Also ich bin jetzt eigentlich so gut wie fertig:) Danke schon mal an alle die mir mal irgendwie geholfen haben. Nur ein Problem hab ich noch.
Ich möchte am ende jetzt eine while Schleife einbauen die wie folgt aussieht:
Delphi-Quelltext
1: 2: 3:
| while StrToFloat(label34.caption) >=15 do
Image1.Picture.LoadFromFile('pokal.bmp'); |
Das heisst ja wenn laben34.caption größer gleich 15 ist, dass dann das Bild erscheinen soll.Nur sobald die Zahl größer gleich 15 ist, hängt sich das programm auf und ich kann nur Programm zurück setzen machen. Wenn ich allerdings diesen Befehl außerhalb der Schleife verwende, dann funkitoniert es...hat jemand eine Idee woran es liegen kann?
Horschdware - Do 18.05.06 16:51
while ist ein schleife.
in worten heisst dein code:
Solange die "Zahl" in Label 1 größer oder gleich 15 ist, solange immer wieder das bild reinladen.
da sich die zahl während dem bild-laden nicht ändert hast du somit eine endlosschleife die auf ewig das bild lädt.
mit einem if sollte das gehen:
Delphi-Quelltext
1: 2:
| if StrToFloat(label34.Caption) >= 15 then Image1.Picture.LoadFromFile('pokal.bmp'); |
wenn das bild einmal geladen wurde musst du es nicht nochmal laden - es sei denn du willst ein anderes bild laden.
Bob - Sa 20.05.06 01:42
Ja das klingt logisch...
Das Dumme ist nur ich muss da ne Schleife einbauen...hat vllt jemand eine Idee was man für eine Schleife, bzw was für einen Zweck sie haben kann,man bei solch einem Projekt venutzen kann?
der Berliner - Sa 20.05.06 12:54
Warum mußt du denn in einer schleife das Bild laufend laden ?
Horschdware hat dir doch schon ne Lösung angeboten.
immer wieder das selbe Bild inner schleife aufend zu laden ist doch blödsinn.
Gruß
Bob - Sa 20.05.06 17:32
Also ne so war das nicht gemeint..ich brauch keine Schleife ür das Bild..sondern einfach so ne Schleife...nur mir fällt nicht ein was eine Schleife in dem projekt bezwecken kann...es kann auch was sein was net unbedingt mit dem Tippspiel zusammenhöngt sondern allgemein mit Fussball..nur mir fällt absolut nichts ein und andere die ich gefragt habe auch nicht...
der Berliner - Sa 20.05.06 18:31
Hmmm, lass doch alle WM-Teilnehmer in einem Label nacheinander anzeigen.
zb.: mit ner for Schleife.
Alle teilnehmer in ein *.txt datei und die dann Zeilenweise in einer schleife auslesen.
HINWEIS: Die EXE lässt sich erst beenden wenn alle Teilnehmer angezeigt wurden.
gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!