Autor Beitrag
red-7-seven
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 03.11.02 09:54 
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

ausblenden 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
Hält's aus hier
Beiträge: 16



BeitragVerfasst: So 03.11.02 11:36 
Grüß Gott

Versuchs doch mal mit dieser Procedure. Sie isch zwar etwas länger aber sollte funktionieren.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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