2016-10-11 6 views
0

Hallo Arbeiten an einem Pokerspiel. Ich habe meine Karten zufällig aus einer Datei aufgerufen, aber ich möchte, dass es keine Duplikate gibt. zum Beispiel keine 2 5 Schläger oder 2 Pik-Piken in der gleichen Hand. Das ist im Grunde, was ich zu tun versucht, und wenn ich das getan zu erhalten, sollte mein Spiel Hier istZufällige Bilder von Datei ohne Duplizieren

string[] CardDisplay = new string[5]; 

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

    PokerCard[0] = PokerCard1.ImageUrl = Path.Combine("~/GameStyles/VideoPoker/Images/Poker/", CardDisplay[0]); 
    PokerCard[1] = PokerCard2.ImageUrl = Path.Combine("~/GameStyles/VideoPoker/Images/Poker/", CardDisplay[1]); 
    PokerCard[2] = PokerCard3.ImageUrl = Path.Combine("~/GameStyles/VideoPoker/Images/Poker/", CardDisplay[2]); 
    PokerCard[3] = PokerCard4.ImageUrl = Path.Combine("~/GameStyles/VideoPoker/Images/Poker/", CardDisplay[3]); 
    PokerCard[4] = PokerCard5.ImageUrl = Path.Combine("~/GameStyles/VideoPoker/Images/Poker/", CardDisplay[4]); 


public string getRandomImage() 
{ 

    string[] fileNames = Directory.GetFiles(MapPath("~/GameStyles/VideoPoker/Images/Poker/")); 
    int CurrentPick; 

    CurrentPick = rand.Next(fileNames.Length); 

    string CardToShow = fileNames[CurrentPick]; 
    return Path.GetFileName(CardToShow); 
} 

Hier einige der Code fertig ist ein Screenshot von dem, was ich habe

enter image description here

+1

Sie verfolgen Sie haben welche Karten halten konnte bereits gezogen und wählen Sie erneut eine Zufallszahl, wenn einer von denen kommt. – itsme86

+1

"Generieren von Zufallszahlen ohne Duplikate" schon oft gefragt. Könnte Duplikat von http sein: //stackoverflow.com/questions/273313/randomize-a-listt ... –

+1

Warum nicht folgen Sie der * ursprünglichen Prozedur *: Laden Sie alle Bilder in eine Sammlung (sagen, Array) - * pack *; dann * shuffle * die Sammlung; endlich, * Deal * - nimm die ersten 5 Karten? Wenn die 6. Karte benötigt wird, nimm den Gegenstand des 6. Feldes. –

Antwort

1

ich LINQ empfehlen, dies zu erreichen:

string[] fileNames = Directory.GetFiles(MapPath("~/GameStyles/VideoPoker/Images/Poker/")); 

var randomCards = fileNames 
    .OrderBy(i => Guid.NewGuid()) 
    .Take(5) 
    .Select(filePath => Path.Combine("~/GameStyles/VideoPoker/Images/Poker/", Path.GetFileName(filePath))) 
    .ToArray(); 

PokerCard[0] = PokerCard1.ImageUrl = randomCards[0]; 
PokerCard[1] = PokerCard2.ImageUrl = randomCards[1]; 
PokerCard[2] = PokerCard3.ImageUrl = randomCards[2]; 
PokerCard[3] = PokerCard4.ImageUrl = randomCards[3]; 
PokerCard[4] = PokerCard5.ImageUrl = randomCards[4]; 

Dies wird einfach neu ordnen das Array von Dateinamen, sortiert nach einem zufälligen Gu ID (die im Wesentlichen das Array zufällig), und nehmen Sie dann die ersten 5 Elemente.

Hier ist eine .NET-Geige zeigt, wie es funktioniert: https://dotnetfiddle.net/c1996q

+0

Möchten Sie den Downvote erklären? – FrankerZ

+0

Sicher. Dies ist traditionell ein schlechter Ansatz für das Shuffle-Array und Sie haben keine Erklärung dafür gegeben, warum es dem Standard-Shuffle überlegen ist. Auch dieser "C# shuffle" hat viele Male geantwortet und geantwortet und Ihr Beitrag fügt nicht viel zu http://stackoverflow.com/questions/273313/randomize-a-listt hinzu (oder viele ähnliche Beiträge) - aber das ist nicht der Grund für den Downvote ... –

+0

Hey vielen Dank für Ihre Antwort. Wenn ich diese Methode verwende, dann ist keine der Karten sichtbar –

Verwandte Themen