2017-10-10 3 views
1

Ich habe einen Knopf auf meiner Fensterform, die fünf zufällige Karten meiner Liste hinzufügt. Die zufälligen Karten werden in einer Listbox angezeigt. Wenn ich zum ersten Mal auf die Schaltfläche klicke, zeigt das Listenfeld 5 zufällige Karten an. Wenn ich den Knopf erneut drücke, zeigt die Listbox jetzt 3 gleiche 5 zufällige Karten an. Anstelle von 10 zufälligen Karten. Gibt es trotzdem dieses Problem loswerden?Fügen Sie 5 zufällige Karten zur Listbox hinzu, Listbox zeigt gleiche Karten

private void RandomButton_Click(object sender, EventArgs e) 
    { 
     Random random = new Random(); 
     for (int i = 0; i < 5; i = i + 1) 
      fiveRandomCards.Add(new Card((Symbool)random.Next(1, 4), (Waarde)random.Next(1, 14))); 
     foreach (Card card in fiveRandomCards) 
      CardsLB.Items.Add(card.name);     
    } 
+2

Erstellen Sie nicht jedes Mal ein neues 'Random'-Objekt, wenn Sie auf die Schaltfläche klicken. Erstellen Sie ein Klassenfeld für es und instanziieren Sie es, wenn das Formular erstellt wird. – itsme86

+1

Off Topic: Bitte versuchen Sie Englisch statt Ihrer Muttersprache zu verwenden, wenn Sie Variablen, Methoden usw. benennen. Sie und andere Entwickler werden es sehr nützlich finden, glauben Sie mir – Alex

+0

Beginnen Sie mit einem vollen Kartenspiel, entfernen Sie 5 und platzieren Sie sie in der Liste - Jetzt können Sie sie nicht erneut auswählen – BugFinder

Antwort

0

Eigentlich mag ich diesen Ansatz für kleine Sammlungen

linq: order by random

Pseudocode

ICollection<int> coll = new List<int>() {1,2,3,4,5,6,7,8,9,10,11,12,13,14}; 
ICollection<int> randomFiveItems = coll.OrderBy(x => Guid.NewGuid()).Take(5); 

Dann randomFiveItems binden, die Ihre Steuer tun

012.351.
KaartenLB.DataSource = randomFiveItems; 

Klar für mich

0

fand ich eine Lösung für mein Problem, es ist ganz einfach. Ich habe 2 Listen in meinem Programm: Die erste Liste ist "Deck", die bereits 52 Karten enthält, die in meiner Form1_load-Methode generiert werden. Die zweite Liste ist "fiveRandomCards". Auf meiner Windows Form habe ich einen Knopf. Wenn ich auf diese Schaltfläche klicke, werden 5 Radom-Karten aus meiner Deck-Liste zur fiveRandomCards-Liste hinzugefügt. Ich habe meiner Listbox eine clear() -Methode hinzugefügt, damit die Elemente in der Listbox nicht gestapelt werden.

Denken Sie daran, in meiner Klasse Card verwende ich 2 enums: Symbol -> Diamanten, Clubs, Herzen und Spaten. Wert -> von 1 bis 13.

public partial class Form1 : Form 
{ 
    List<Card> deck = new List<Card>(); //allready has 52 cards in it. 
    List<Card> fiveRandomCards = new List<Card>(); 
    Random random = new Random(); 

    private void Form1_Load(object sender, EventArgs e) 
     { 
      for (int symbol = 1; symbol < 5; symbol = symbol + 1) 
      { 
       for (int value = 1; value < 14; value = value + 1) 
        deck.Add(new Card((Symbol)symbol, (Value)value)); 
      } 
     } 
    private void RandomButton_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < 5; i = i + 1) 
      fiveRandomCards.Add(deck[random.Next(0, deck.Count)]); 
     CardsLB.Items.Clear(); 
     foreach (Card card in fiveRandomCards) 
      CardsLB.Items.Add(card.name);     
    } 
} 
Verwandte Themen