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