AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"mischen"

Ein Thema von Gnorksy · begonnen am 22. Nov 2005 · letzter Beitrag vom 26. Nov 2005
Antwort Antwort
Gnorksy

Registriert seit: 11. Nov 2005
Ort: Sylt-Ost
3 Beiträge
 
Delphi 7 Professional
 
#1

"mischen"

  Alt 22. Nov 2005, 17:12
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
Ich habe einen wahrhaft wunderbaren Beweis für die obige Aussage, doch leider ist diese Signatur zu schmal um ihn zu fassen
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: "mischen"

  Alt 22. Nov 2005, 17:15
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?
Benjamin
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: "mischen"

  Alt 22. Nov 2005, 17:17
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:
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;
tatsächlich ist jede Zahl ungefähr gleich häufig an jeder Stelle im Array enthalten.

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|
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: "mischen"

  Alt 22. Nov 2005, 17:20
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: "mischen"

  Alt 22. Nov 2005, 17:34
Stichwort [dp="Permutation"]Permutationen[/dp]: http://www.delphipraxis.net/internal...=385553#385553
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#6

Re: "mischen"

  Alt 22. Nov 2005, 18:03
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
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Gnorksy

Registriert seit: 11. Nov 2005
Ort: Sylt-Ost
3 Beiträge
 
Delphi 7 Professional
 
#7

Re: "mischen"

  Alt 26. Nov 2005, 09:50
Super! Vielen Dank, ich habe es jetzt so gemacht, wieDerDan vorgeschlagen hat. Warum bin ich da nur nicht selbst drauf gekommen

Gruß,

Gnorksy
Ich habe einen wahrhaft wunderbaren Beweis für die obige Aussage, doch leider ist diese Signatur zu schmal um ihn zu fassen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz