52 Karten, Wert + Farbe in Arrays... elegantere Lösung?
Sandmännchen
- programmiertechnik
Hallo,
ich möchte in einem Programm alle Karten eines 52 Blatt Deck einbringen.
Durch Zufall wird dann eine Karte z.B. 8 Dame gezeigt.
Ich habe mir Überlegt, dies in einem Array zu machen.
Ein Array mit 13 Feldern für die Werte 2 - A und ein Array mit 4 Feldern für die Farben PIK,KARO,KREUZ,HERZ.
Dann erzeuge ich 2 Zufallszahlen (RND *13) und (RND *4)....
Zeige dann die Karte + Farbe an:
karteWert(zufall1) + karteFarbe(zufall2)
(Ich lege jetzt keinen Wert auf eine bestimmte Programmiersprache)
Gibt es eine bessere Lösung?
Danke!
Hallo,
Dann erzeuge ich 2 Zufallszahlen (RND *13) und (RND *4)....
Zeige dann die Karte + Farbe an:karteWert(zufall1) + karteFarbe(zufall2)
demnach musst du deinen zufallswert noch überprüfen, denn es kann durchaus vorkommen, das dann 3x die herz 5 entsteht ...
MfG. Christoph Ludwig
@@minicrispie:
demnach musst du deinen zufallswert noch überprüfen, denn es kann durchaus vorkommen, das dann 3x die herz 5 entsteht ...
Dann kann es aber vorkommen, dass die Schleife sehr lange läuft. (Wenn auch die Wahrscheinlichkeit, dass nach dem n-ten Durchlauf immer noch nicht alle 52 Karten ausgewählt wurden, mit wachsendem n gegen 0 geht.)
Besser wäre es, ein Array mit allen 52 Karten zu haben und darauf die shuffle-Methode anzuwenden.
Wenn die gewählte Programmiersprache noch keine solche Methode bereitstellt, muss man sie eben selbst implementieren.
Live long and prosper,
Gunnar
ich möchte in einem Programm alle Karten eines 52 Blatt Deck einbringen.
Durch Zufall wird dann eine Karte z.B. 8 Dame gezeigt.Ich habe mir Überlegt, dies in einem Array zu machen.
Ein Array mit 13 Feldern für die Werte 2 - A und ein Array mit 4 Feldern für die Farben PIK,KARO,KREUZ,HERZ.
Warum unbedingt zwei Arrays?
Eins reicht.
array = alle_karten und dann Zufallszahl * array.length
Struppi.
Gibt es eine bessere Lösung?
Du kannst auch eine einzige Zufallszahl verwenden:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
int x, farbe, zahl;
char *sf[] = {"karo", "herz", "pik", "kreuz"};
char *sz[] = {"zwei", "drei", "vier", "fuenf", "sechs",
"sieben", "acht", "neun", "zehn",
"Bube", "Dame", "Koenig", "Ass"};
if(argc!=2) return 1;
srandom(atof(argv[1]));
x = (int)(52*(double)random()/RAND_MAX);
farbe = x/13;
zahl = x%13;
printf("Die Karte lautet %s %s!\n", sf[farbe], sz[zahl]);
return 0;
}
Aufruf mit Integer-Zahl als Argument
für den Random-Seed...
MfG
Andreas