![]() |
for-Schleife - Aktion IMMER 5 mal ausführen
Hallo,
ich habe ein Spielfeld von einer Größe von 10x10. Man nehme nun mal an, das Spielfeld würde nur aus 1en und 2en bestehen. Ich möchte per Knopfdruck nun 5 Felder des Spielfeldes verändern, aber NUR wenn es keine 1 hat. Mein Problem ist nun folgendes: Wenn ich eine einfache for Schleife benutze um das Verändern von nur 5 Feldern zu verwirklichen (for i := 1 to 5 do) kann ich ja mit einer einfachen if-Abfrage prüfen, ob das Feld eine 1 oder 2 hat. Wenn das Feld aber eine 1 hat, wird die if-Abfrage ignoriert und das "i" in der for-Schleife läuft weiter. Nun werden nur noch 4 Felder getauscht, obwohl ja 5 getauscht werden sollen. Ich habe versucht das mit einer repeat Schleife zu lösen, aber das habe ich nicht hinbekommen. Vielleicht kann mir ja einer einen entscheidenden Tipp geben. Danke. |
Re: for-Schleife - Aktion IMMER 5 mal ausführen
du musst in die for-schleife eine while schleife hineinbauen, die erst aufhört, wenn tatsächlich ein feld gewechselt wurde.
aber was machst du, wenn es gar keien 5 felder mehr mit einer 2 gibt? |
Re: for-Schleife - Aktion IMMER 5 mal ausführen
Okay, was spricht gegen eine repeat...while Schleife?
Das kommt mit 100%iger Sicherheit nicht vor ;) |
Re: for-Schleife - Aktion IMMER 5 mal ausführen
Hi,
meinst du so etwas?
Delphi-Quellcode:
Alle Variablen außer den Spielfeld sind vom Typ integer.
GeaenderteFelder:=0;
for c:=0 to 10 do for c2:=0 to 10 do if (Spielfeld[c,c2] = 2) and (GeaenderteFelder < 5) then begin Spielfeld[c,c2]:=1; Inc(GeanderteFelder); end; cu |
Re: for-Schleife - Aktion IMMER 5 mal ausführen
Nein, in deinem Fall wären es ja immer die Felder 0,0 + 1,0 + 2,0 + 3,0 + 4,0 wenn sie keine 1 haben. Es sollen ja zufällige Felder ausgewählt werden. Mit einer while...do Anweisung funktionierts nun, aber mich würde interessieren, warum repeat...until nicht funktioniert. Wahrscheinlich hab ich es nur falsch angewendet aber ich wundere mich trotzdem...Danke jedenfalls für den Tipp mit while...do
|
Re: for-Schleife - Aktion IMMER 5 mal ausführen
dann würde ich einfach fünf einzigartige zufallskoordinaten erstellen....
|
Re: for-Schleife - Aktion IMMER 5 mal ausführen
Was heisst einzigartige? So habe ich es ja gemacht, aber wenn an einer Stelle X,Y eine 1 war, wurde die Bedingung ja nicht erfüllt.
|
Re: for-Schleife - Aktion IMMER 5 mal ausführen
Hallo Yheeky!
Ist es für Dich egal an welcher Stelle im Spielfeld die Suche beginnt? Wenn die Suche immer oben links beginnen darf, dann würde ich es so machen:
Delphi-Quellcode:
var Field: array[1..10,1..10] of byte;
Changed: byte; (...) Changed := 5; for x := 1 to 10 do begin for y := 1 to 10 do begin if Field[x,y] <> 1 then begin Field[x,y] := 2; dec(Changed); if Changed = 0 then Break; end; end; end; Andernfalls zufällige Werte für x und y wählen: Changed := 5; x := random(9); y := random(9); Repeat if Field[x+1,y+1] <> 1 then begin Field[x,y] := 2; dec(Changed); end; until Changed = 0; Oder Startpunkt zufällig wählen, und von dort nach rechts oder nach links suchen. Oder vielleicht doch ganz anders ... :wink: Bye, Arno [edit=alcaeus]delphi-Tags gesetzt. In Zukunft bitte selbst machen. Danke Mfg, alcaeus[/edit] |
Re: for-Schleife - Aktion IMMER 5 mal ausführen
Zitat:
Bye, Arno |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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 by Thomas Breitkreuz