Benutzer mit den meisten Antworten
Visual C# Problem bei wiederholter Verwendung derselben Liste

Frage
-
Ich arbeite gerade an einem BlackJack Spiel und habe ein Problem mit der Liste, in welcher sich die Namen der Karten befinden. Um mein Programm zu testen möchte ich die Namen dieser Liste in einer Listbox ausgeben. Den Kartenstapel zu erzeugen ist kein Problem, jedoch wenn ich die Karten mischen will Streikt mein Programm und in der Listbox wird wieder nur der Sortierte Kartenstapel angezeigt. Ich bin mir ziemlich sicher, dass der Fehler nicht in den Methoden liegt, da wenn ich das Programm Debugge die gemischten Kartennamen in der Liste angezeigt werden.
private List<Card> _Stapel = new List<Card>();
Card Helpcard;
public KartenStapel()
{
}
public void StapelErzeugen(int Anzahl)
{
for (int iAnzahl = 0; iAnzahl < Anzahl; iAnzahl++)
{
for (int iFarbe = 0; iFarbe < 4; iFarbe++)
{
for (int iWert = 1; iWert <= 13; iWert++)
{
_Stapel.Add(new Card((Enums.Colors)iFarbe, (Enums.Values)iWert));
}
}
}
}
public void Mischen()
{
for (int i = 0; i < 50; i++)
{
Random rnd = new Random();
int stelle2 = rnd.Next(0, 51);
Helpcard = _Stapel[0];
_Stapel[0] = _Stapel[stelle2];
_Stapel[stelle2] = Helpcard;
}
}public List<Card> Stapel
{
get
{
return _Stapel;
}
set
{
_Stapel = value;
}
}public partial class FrmMain : Form
private void btnMischen_Click(object sender, EventArgs e)
{
public FrmMain()
{
InitializeComponent();
}
KartenStapel nks = new KartenStapel();
public void DisplayItems()
{
lbxCheck.Items.Clear();
foreach (Card c in nks.Stapel)
{
lbxCheck.Items.Add(c.ToString());
}
}
{
nks.Mischen();
DisplayItems();
}
private void button1_Click(object sender, EventArgs e)
{
nks.StapelErzeugen(1);
DisplayItems();
}
}
Antworten
-
Hallo,
auf den ersten Blick:
Verlege das Erzeugen des Random außerhalb der Schleife. Denn wenn man sehr schnell hintereinander die Klasse instantiiert, erhält man die gleichen Zufallswerte, siehe Dokumentation.
public void Mischen() { Random rnd = new Random(); for (int i = 0; i < 50; i++) { // ... } }
Gruß Elmar
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Dienstag, 2. Oktober 2012 11:43
- Als Antwort markiert Thorsten DörflerEditor Dienstag, 2. Oktober 2012 13:32
Alle Antworten
-
Hallo,
auf den ersten Blick:
Verlege das Erzeugen des Random außerhalb der Schleife. Denn wenn man sehr schnell hintereinander die Klasse instantiiert, erhält man die gleichen Zufallswerte, siehe Dokumentation.
public void Mischen() { Random rnd = new Random(); for (int i = 0; i < 50; i++) { // ... } }
Gruß Elmar
- Als Antwort vorgeschlagen Tom Lambert (Koopakiller)Moderator Dienstag, 2. Oktober 2012 11:43
- Als Antwort markiert Thorsten DörflerEditor Dienstag, 2. Oktober 2012 13:32