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);
        }
Пример #3
0
        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;
        }
Пример #4
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);
        }
Пример #5
0
 private int GetRandomRankIndex()
 {
     return(randomizer.IntLessThan(Card.HighestRankIndex));
 }