Pascal -> Arrays 'shuffeln'

mewX

Erfahrenes Mitglied
Hi! Gibt es irgendeine fertige Funktion oder einen Alogarythmus um Arrays durcheinander zu bringen? Und zwar mächte ich ein Kartenspiel mischen, d.h. der Array hat 32 Elemente...

Gruß und schönes neues Jahr
 
Hi da ich ein ähnliches Projekt vorhabe, habe ich mal gegoogelt und es sieht nicht so aus, als wenn es eine fertige Funktion gibt. Das ist aber eine interessante Alternative Mischen

mfg
 
OK, hab's jetzt geschafft.
Meine Lösung:
Gibt halt zwei Stapel, immer eine Karte wird zufällig vom ersten genommen und auf den zweiten gelegt und dann im ersten als "weggelegt" gekennzeichnet.

Code:
  TYPE
     Karte = RECORD
            Farbe : STRING [10];
            Bild  : STRING [10];
          END;
  PROCEDURE shuffle_kartenspiel ;
  { Mischt das Kartenspiel, das im Array 'kartenspiel' steht }
  VAR karten_in_vorher, karten_in_nachher,rand,counter : INTEGER;
  VAR cur_karte : Karte;
  BEGIN
  karten_in_nachher := 0;
  counter := 0;

  REPEAT  { Solange bis Stapel 2 voll ist }	
    { Eine Karte nehmen }
    rand := random(33);
    IF rand > 0 THEN
    BEGIN
   		cur_karte := stapel[rand];
    	IF cur_karte.Bild <> "WEG" THEN { Wenn sie noch nicht in Stapel 2 vorhandne ist }
    	BEGIN
    		counter := counter + 1;
    		{ Sie auf neuen Stapel packen }
    		stapel_nachher[counter] := cur_karte;
    
    		{ Karte aus Vorher-Stapel entfernen }
    		stapel[rand].Bild := "WEG";
    	END;
    END;
    { Usw. }
  UNTIL counter = 32;
  END;
geht so nur für ein skatspiel; ne herz-zehn ist z.B:
kartenspiel[1].Farbe := "Herz";
kartenspiel[1].Bild := "10";

gruß
 

Neue Beiträge

Zurück