none
Visual C# Problem bei wiederholter Verwendung derselben Liste RRS feed

  • 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
        {
            public FrmMain()
            {
                InitializeComponent();
            }

            KartenStapel nks = new KartenStapel();
            public void DisplayItems()
            {
                lbxCheck.Items.Clear();
                foreach (Card c in nks.Stapel)
                {
                    lbxCheck.Items.Add(c.ToString());
                }
            }

            private void btnMischen_Click(object sender, EventArgs e)
            {
                nks.Mischen();
                DisplayItems();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                nks.StapelErzeugen(1);
                DisplayItems();

            }
        }


    Dienstag, 2. Oktober 2012 10:34

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

    Dienstag, 2. Oktober 2012 11:14
    Beantworter

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

    Dienstag, 2. Oktober 2012 11:14
    Beantworter
  • Das war es vielen Dank :D
    Dienstag, 2. Oktober 2012 11:36