Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Memory: zufällig Array mit Zahlen belegen
red-7-seven - So 03.11.02 09:54
Titel: Memory: zufällig Array mit Zahlen belegen
Hi ihr alle!
Hab da ein Problem Memory zu programmieren...
in unten genannter Prozedur soll ein 2*2 array zufällig mit 2 Einsen und 2 Zweien gefüllt werden... irgendwie klappt das nich...
Weiß jemand Rat? Bin für jeden Tip dankbar!
*leichtamverzweifeln*
MfG
red-7-seven
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:
| procedure Spielfeld_zufaellig_mit_Zahlen_fuellen (var Spielfeld:Spieloberflaeche); var Felder_Anzahl,Zufallszahl1,Zufallszahl2:byte; k,i:integer; hilfe:boolean;
begin Spielfeld_initialisieren(Spielfeld); Felder_Anzahl:=4; k:=0; Zufallszahl1:=0; Zufallszahl2:=0; hilfe:=Spielfeld[Zufallszahl1,Zufallszahl2].belegt;
while k<>2 do begin for i:=1 to 2 do begin randomize; repeat Zufallszahl1:=random(maxzeile); Zufallszahl2:=random(maxspalte); until not hilfe; Spielfeld[Zufallszahl1,Zufallszahl2].inhalt:=inttostr(i); Spielfeld[Zufallszahl1,Zufallszahl2].belegt:=true; end; inc(k); end;
end; |
(03.11.02 12:37 Tino) Code-Tags hinzugefügt.
MoreThanWords - So 03.11.02 11:36
Grüß Gott
Versuchs doch mal mit dieser Procedure. Sie isch zwar etwas länger aber sollte funktionieren.
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:
| procedure TForm1.BitBtn1Click(Sender: TObject); var Array2x2 : Array[1..2,1..2] of Integer; k,i,s,Anz1,Anz2 : Integer;
begin Anz1:= 0; Anz2:= 0; Randomize; for i:= 1 to 2 do begin for k:= 1 to 2 do begin s := Random(2)+1; if s = 1 then begin if Anz1 = 2 then begin s := 2; inc(Anz2); end else inc(Anz1); end else//s = 2 begin if Anz2 = 2 then begin s := 1; inc(Anz1); end else inc(Anz2); end; Array2x2[i,k]:=s; end; end; end; |
Keldorn - So 03.11.02 11:36
Hallo,
habe deinen Code kurz überflogen und folgendes ist mir auf die Schnelle aufgefallen:
Zitat: |
for i:=1 to 2 do
begin
randomize;
|
Randomize darfst du nur einmal aufrufen, niemals nich in Schleifen, schau Dir die Onlinehilfe dazu an.
Zitat: |
repeat
Zufallszahl1:=random(maxzeile);
Zufallszahl2:=random(maxspalte);
until not hilfe;
|
die Schleife ist unnützt, da du Hilfe nur weiter oben einmal setzt (und das glücklicherweise mit false), du mußt ja auch in dieser Schleife prüfen, ob das Feld schon gesetzt ist.
random(maxzeile) liefert dir aber auch nur Zahlen zwischen 0 und maxzeile-1 zurück das wird auch nicht gehen :wink:
Mfg Frank
red-7-seven - So 03.11.02 11:51
Titel: DANKE!
Tausend Dank für die HILFE!!!
Ich sitz da schon ewig drüber und hab irgendwie gar nix mehr gesehen!
MfG
red-7-seven
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!