![]() |
"mischen"
Hi,
Ich versuche mich grade daran, ein Memory Spiel zu programmieren. Von der Technik her ist dies auch kein Problem. Bisher habe ich das ganze so gemacht, dass die Zahl einzelnen Karten (TImages) nicht gemsischt werden, So ist es also "easy going" anhand des Sender zu ermitteln, ob ich ein gültiges Paar zufassen habe. Mein eigentliches Problem besteht jetzt darin, dass irgenteinen "Misch"-Algorithmus brauche. Nehmen wir also einmal an, ich habe 18 Spielkarten (TImages also). Nun will ich es irgentwie hinbekommen, das aus diesen 18 Karten Zufällig Pärchen gebildet werden. Mir kommt es dabei nicht sonderlich auf Quellcode an, sondern eher auf Pseudo-Code und Gedankengänge. Mein eigenes Gehirn lässt da offenbar zu wünschen übrig :( . Ich hoffe ihr könnt mir irgentwie weiterhelfen, Gruß, Gnorksy |
Re: "mischen"
Ich habs so gemacht:
Ich hab die Karten in ner Liste jetzt tausche ich die Karte 1 mit einer zwischen 2 und 18 Karte 2 mit einer Karte zwischen 3 und 18 etc. Am Ende Tausche ich Karte 18 mit einer beliebigen, also könnte sie auch an derselben Stelle bleiben. Das ganze natürlich in einer Schleife Ich halte das für eine gut funktionierenden Vorgehensweise, ob die wahrscheinlichkeiten da gleichmäßig sind weiß ich nicht, vll. weiß jemand wie das ist? |
Re: "mischen"
garantiert nicht. probiers aus.
ich würde das so machen: ich hab zuerst ein Array (oder eine Liste) mit sortierten Elementen, und dann hänge ich an ein 2. Array nacheinander zufällig die Elemente des 1. Arrays an. gerade hab ich deine Möglichkeit getestet:
Delphi-Quellcode:
tatsächlich ist jede Zahl ungefähr gleich häufig an jeder Stelle im Array enthalten.
var
a:array[1..18] of integer; tmp:integer; i,j,element:integer; elements:array[1..18,1..18] of integer; const count=1000000; begin label1.Caption:=''; for i:=1 to 18 do for j:=1 to 18 do elements[i,j]:=0; for j:=1 to count do begin for i:=1 to 18 do a[i]:=i; randomize; for i:=1 to 18 do begin tmp:=a[i]; if i<>18 then element:=random(18-i)+i else element:=random(18)+1; a[i]:=a[element]; a[element]:=tmp; end; for i:=1 to 18 do elements[i,a[i]]:=elements[i,a[i]]+1; end; for i:=1 to 18 do begin for j:=1 to 18 do label1.Caption:=label1.Caption+inttostr(elements[i,j])+' | '; label1.Caption:=label1.Caption+#13; end; end;
Code:
|52|51|56|47|63|53|56|57|55|58|57|54|53|62|55|57|54|60|
|57|55|52|56|51|60|58|49|54|52|59|55|62|42|66|54|58|60| |66|56|56|52|57|49|62|48|68|51|66|38|70|39|57|55|58|52| |55|65|75|60|46|49|53|60|47|52|55|60|47|61|57|46|50|62| |55|41|54|56|58|52|54|59|60|56|59|54|51|63|52|63|60|53| |51|57|58|67|55|53|62|55|51|61|56|56|52|49|52|45|61|59| |58|59|48|64|54|51|43|58|70|47|54|54|63|60|55|50|58|54| |48|55|56|64|60|62|63|59|70|61|31|57|63|66|54|35|45|51| |66|54|47|49|57|43|83|44|53|63|51|57|56|61|48|60|52|56| |53|60|78|66|51|55|57|65|56|44|50|54|57|52|45|47|57|53| |52|52|48|49|50|66|51|48|59|46|61|59|67|57|61|57|63|54| |58|66|58|48|50|53|52|58|49|58|50|58|44|56|74|62|54|52| |52|63|51|52|61|61|51|52|47|51|61|70|50|54|62|56|51|55| |48|50|49|64|56|48|53|49|51|69|62|63|56|67|49|62|43|61| |57|60|57|50|61|64|55|66|44|53|57|49|43|47|59|74|52|52| |56|45|46|49|62|70|52|62|52|61|62|51|42|59|56|53|69|53| |54|59|53|53|59|55|49|61|64|55|52|62|61|51|43|70|42|57| |62|52|58|54|49|56|46|50|50|62|57|49|63|54|55|54|73|56| |
Re: "mischen"
tausche doch einfach in einer Schleife immer zwei zufällige Karten.
Delphi-Quellcode:
for i := 1 to 1000 do begin
i2 := random(18); i3 := random(18); TauscheKarten(i2, i3); end; |
Re: "mischen"
Stichwort [dp="Permutation"]Permutationen[/dp]:
![]() |
Re: "mischen"
ich finde die kombination aus BenjaminH und himitsu am besten:
hier wird einfach jede karte (1..18) mit einer beliebigen anderen getauscht.
Delphi-Quellcode:
for i := 1 to 18 do begin
i2 := random(18); TauscheKarten(i2, i); end; mfg DerDan |
Re: "mischen"
Super! Vielen Dank, ich habe es jetzt so gemacht, wieDerDan vorgeschlagen hat. Warum bin ich da nur nicht selbst drauf gekommen :oops:
Gruß, Gnorksy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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