mischen von Karten

  • Themenstarter Themenstarter azur03
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

azur03

Gast
Hallo,
habe mich entschlossen, ganz von vorne anzufangen. Mittlerweile trauen habe ich mir zugetraut ein einfaches Kartenspiel auf Konsolenebene zu schreiben. Ein Problem liegt jedoch im Mischen der Karten. Die Karten liegen auf einem Datenfeld in geoordneter Reihenfolge:

Code:
   public static card[][] spieler = new card[2][40];

Jetzt sollen diese 40 Karten in eine zufällige Reihenfolge gebracht werden, sodass zum Beispiel die Karte spieler[0][37] ganz oben auf dem Stapel liegt. Gibt es dafür eine spezielle Funktion?

cu azur[/code]
 
wenn du das ganze in einer List (z.b. ArrayList) hättest, könntest du per Collections.shuffle() deine karten durchmischen...

:arrow: http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html#shuffle(java.util.List, java.util.Random)

mit einem array denke ich wird das ganze relativ kompliziert... (oder gibts da auch ne "builtin"-methode für?)
 
Wenn man in die Implementierung von Collections#shuffle schaut, findet man:

Code:
public static void shuffle(List list, Random rnd) {
...
    // Shuffle array
    for (int i=size; i>1; i--)
        swap(arr, i-1, rnd.nextInt(i));

Gruß
Mag1c
 
Hallo,
bin mir nicht sicher, ob meine Herangehensweise richtig ist. Ich hab das jetzt versucht selber zu schreiben und habe jeder Karte eine Zufallszahl erzeugt:

Code:
public static void mischen(int k){
     double[] nummer = new double[40];
     double[] nummer2 = new double[40];

     for (int i =0; i<nummer.length;i++){
        nummer[i]=Math.random();
        nummer2[i]=nummer[i];
      }

      Arrays.sort(nummer2);

      for(int i=0;i<nummer.length;i++){
         for(int h=0; h<nummer.length;h++){
           if(nummer2[i]==nummer[h]){
             reihenfolge[i]=h;
           }
         }
         System.out.println(reihenfolge[i]);
      }
   }

Diese Zufallszahlen habe ich dann der Reihe nach sortiert und somit eine Reihenfolge festgelegt. Die erste Karte auf dem Stapel wäre somit beim ersten Spieler:

Code:
spieler[0][reihenfolge[0]]

Kann man das so machen?
 
denk schon das das so geht, wenns funzt, zufällig isses wohl auf jeden
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben