![]() |
Code in Konsole anders als in VCL?
Hi.
Ich habe folgenden Code um ein 52er Kartenspiel zu mischen. Das Kartenspiel ist in einem 2-Dimensionalen Array. Die erste Dimension beschreibt die Farbe (Herz, Karo, Kreuz, Pik), die zweite Dimension den Wert (2-10,J,Q,K,A). Nach dem mischen werden die Karten wieder übereinander gelegt. Der eigentliche Mischvorgang kommt danach, aber ich habe den Fehler auf diesen Abschnitt begrenzen können. Und zwar auf die repeat-until schleife.
Delphi-Quellcode:
In der Konsole funktioniert dieser Code perfekt, in eine VCL-Anwendung eingebunden friert alles ein...
procedure ShuffleCards;
var i,j,akt: Integer; wert,farbe:integer; begin akt := 1; for i := 1 to 13 do //13 Werte for j := 1 to 4 do //4 Farben begin repeat {Mir ist klar das hier nie 13 oder 4 rauskommen wird, die Enumeration mit den Werten/Farben beginnt ja auch wie ein Array bei 0, daher dürfte das so stimmen} wert := random(13); farbe := random(4); until (FKarten[farbe][wert].Chosen = false); //Karte als genommen markieren FKarten[farbe][wert].Chosen := true; //Karte ins Deck legen FDeck[akt].Wert := TWert(wert); FDeck[akt].Farbe := TFarbe(farbe); inc(akt); end; end; Wisst ihr wieso??? Thx, Flips |
Re: Code in Konsole anders als in VCL?
hm... ungünstiger Zufall? Die Repeat-Until wird unter Umständen nie bzw. ewig nicht beendet...
|
Re: Code in Konsole anders als in VCL?
Ja gut, bei der Programmierung in der Konsole hab ich ja schon darüber nachgedacht und einen dauerlauf gemacht, er hat ne Stunde lang erfolgreich gemischt. :gruebel:
Und das es jetzt 6 mal hintereinander mit VCL-Forms nicht geht find ich dann doch großer Zufall :wink: |
Re: Code in Konsole anders als in VCL?
hast du es mal mit einem haltepunkt versucht und geschaut wo er hängt bzw. warum?
|
Re: Code in Konsole anders als in VCL?
jap,
hab ja glaub ich erwähnt das es in der repeat until schleife ist. Allerdings habe ich das Problem jetzt gelöst indem ich einfach einen anderen Algorithmus geschrieben habe und das 2D-Array in ein 1D-Array verwandelt habe. Nicht elegant, aber es geht auch so. Trotzdem weiß ich nicht wieso diese Schleife kein Ende findet...Jedenfalls in Form, in der Konsole läufts immer noch tadellos :gruebel: |
Re: Code in Konsole anders als in VCL?
Mach es wie im richtigen Leben: zuerst ein Kartenspiel besorgen und dann erst mischen!
Sprich: erstelle zuerst Dein Kartenspiel im Array mit aufeinanderfolgenden Farben/Werten, und mische dann das Array ordentlich durch. Auf diese Weise kann es nicht vorkommen, dass wie bei Dir, womöglich nur noch eine Karte fehlt, diese aber, aus einem dummen Zufall, nie via Random erstellt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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-2025 by Thomas Breitkreuz