static public List <Card> GetRandomCards(int numCards) { // optimized way of getting a full deck if (numCards == 52) { return(GetRandomDeck()); } string suits = "HSCD"; string ranks = "23456789TJQKA"; List <Card> cards = new List <Card>(numCards); string suit, rank; while (cards.Count < numCards) { // Generate a card and make sure we don't already have it do { suit = suits[Randomizer.IntLessThan(4)].ToString(); rank = ranks[Randomizer.IntLessThan(13)].ToString(); } while (cards.Any(c => c.Rank == rank && c.Suit == suit)); cards.Add(new Card(rank, suit)); } return(cards); }
static public List <Card> GetRandomDeck() { // initially populate List <Card> deck = new List <Card>(52); foreach (Card.Ranks rank in Enum.GetValues(typeof(Card.Ranks))) { foreach (Card.Suits suit in Enum.GetValues(typeof(Card.Suits))) { var card = new Card(rank, suit); deck.Add(card); } } // then shuffle using Fisher-Yates: one pass through, swapping the current card with a random one below it for (int i = 51; i > 1; i--) { int swapWith = Randomizer.IntLessThan(i); Card hold = deck[i]; deck[i] = deck[swapWith]; deck[swapWith] = hold; } return(deck); }
public void Shuffle() { // then shuffle using Fisher-Yates: one pass through, swapping the current card with a random one below it int start = Cards.Count - 1; var randomizer = new Randomizer(); for (int i = start; i > 1; i--) { int swapWith = randomizer.IntLessThan(i); Card hold = Cards[i]; Cards[i] = Cards[swapWith]; Cards[swapWith] = hold; } currentCard = 0; }
// Selection Routines ----------------------------------------------- private Strategy TournamentSelectParent() { var randomizer = new Randomizer(); // thread-specific version Strategy result = null; float bestFitness = float.MinValue; for (int i = 0; i < currentEngineParams.TourneySize; i++) { int index = randomizer.IntLessThan(currentEngineParams.PopulationSize); var randomCandidate = currentGeneration[index]; var fitness = randomCandidate.Fitness; bool isFitnessBetter = fitness > bestFitness; if (isFitnessBetter) { result = randomCandidate; bestFitness = fitness; } } return(result); }
private int GetRandomRankIndex() { return(randomizer.IntLessThan(Card.HighestRankIndex)); }