2016-04-03 19 views
0

Ich arbeite an einem Pokerprojekt. Ich versuche zufällige Karten aus einer Datei zu generieren, ohne dass es Duplikate gibt. Es ist wie ein 5-Karten-Ziehungsspiel, ich möchte einfach nicht, dass es möglich ist, eine 5 von einer Art zu bekommen, oder ein Paar von zwei Karten, die in derselben Suite sind.Zufälliger Bildgenerator ohne Duplikate C#

Hier ist ein Blick auf mein Code

for (int i = 0; i < 5; i++) 
{ 
     CardDisplay[i] = getRandomImage(); 
} 

if (!IsPostBack) 
{ 
     Discard.Enabled = false; 

     PokerCard1.Enabled = false; 
     PokerCard2.Enabled = false; 
     PokerCard3.Enabled = false; 
     PokerCard4.Enabled = false; 
     PokerCard5.Enabled = false; 

     Hold1.Visible = false; 
     Hold2.Visible = false; 
     Hold3.Visible = false; 
     Hold4.Visible = false; 
     Hold5.Visible = false; 

     PokerCard1.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[0]); 
     PokerCard2.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[1]); 
     PokerCard3.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[2]); 
     PokerCard4.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[3]); 
     PokerCard5.ImageUrl = Path.Combine("/My_Portfolio/App_Themes/Portfolio/Images/Poker/", CardDisplay[4]); 
} 

public string getRandomImage() 
{ 
    string[] fileNames = Directory.GetFiles(MapPath("/My_Portfolio/App_Themes/Portfolio/Images/Poker/")); 
    string CardToShow = fileNames[rand.Next(fileNames.Length)]; 
    return Path.GetFileName(CardToShow); 
} 

Das bekommen zufälliges Bild Methode offensichtlich ist, wo ich die Bilder aus der Datei aufrufen. Hier

ist ein Screenshot von dem, was es sieht aus wie

enter image description here
Danke, und jede Hilfe sehr dankbar

+2

Der einfachste Weg besteht darin, zu überprüfen, ob Sie den zurückgegebenen Wert in den zuvor erhaltenen Karten bereits haben. Ein robuster Algorithmus würde alle Karten in ein Array legen, mischen und fünf erste Karten nehmen. –

+4

In der realen Welt hast du ein Kartenspiel, das du mischt und dann von oben kommst. Sie sollten wahrscheinlich bei diesem Modell bleiben. –

+0

Ich denke, Sie sollten Preston hören und den realen Prozess nachahmen, anstatt den Prozess neu zu überdenken. Es kann Ihnen später helfen. Z.B. wenn jede Karte ein Gegenstand ist, könnte sie "Standort" -Eigenschaft oder Ähnliches haben (welcher Spieler hält sie, oder in Ablagestapel oder in Deck, usw.). Wenn Karten neu gemischt werden (ich weiß nicht, ob das beim Pokern passiert), würdet ihr alle Gegenstände auf dem Ablagestapel neu zufallieren und ihr wisst, dass es keine Karten mehr im Deck gibt usw. – Jonathan

Antwort

0

Eine einfache Möglichkeit wäre, dies zu erreichen, wäre eine Variable zu erstellen, die Ihre aktuell alle halten „Picks“, und prüfen Sie gegen das, bevor Sie eine Karte aus Ihrem getRandomImage Methode, so etwas wie diese Rückkehr:

private List<int> _elections = new List<int>(); 

private string[] _fileNames = Directory.GetFiles(MapPath("/My_Portfolio/App_Themes/Portfolio/Images/Poker/")); 

public string getRandomImage() 
{ 
    int currentPick; 
    while (true){ 
     currentPick = rand.Next(_fileNames.Length); 
     if (!_elections.Contains(currentPick)){ 
      _elections.Add(currentPick); 
      break; 
     } 
    } 
    string CardToShow = _fileNames[currentPick]; 
    return Path.GetFileName(CardToShow); 
} 

Beachten Sie, dass ich Ihre FILENAM extrahiert Es ist eine Variable, so dass Sie Ihre Dateien nicht jedes Mal neu berechnen, wenn Sie die Methode getRandomImage verwenden.

+0

Hallo vielen Dank für Ihre Hilfe, wie ich es schätze. Ich habe den Code geändert, um mehr von dem, was Sie haben, aber es habe immer noch einige Duplikate, vielleicht nicht sofort, aber danach mit ein bisschen. Vielleicht gibt es eine andere Möglichkeit, danke für jede Hilfe –