public static T RandomElement <T>(this IEnumerable <T> source, IRandomGen random) { var count = source.Count(); var idx = random.GetNext(0, count - 1); return(source.Skip(idx).Take(1).FirstOrDefault()); }
private static IEnumerable <T> ShuffleIterator <T>( this IEnumerable <T> source, IRandomGen rng) { var buffer = source.ToList(); for (int i = 0; i < buffer.Count; i++) { int j = rng.GetNext(i, buffer.Count - 1); yield return(buffer[j]); buffer[j] = buffer[i]; } }
private void DistributeCard(IRandomGen randomGen) { if (!this.CardDistributed) { this.CardDistributed = true; if (this.CurrentPlayer.Cards.Count() < this.Options.MaximumNumberOfCards) { var existingCards = new List <BonusCard>(this.CurrentPlayer.Cards); var cardToDistribute = randomGen.GetNext(0, 2); existingCards.Add((BonusCard)cardToDistribute); this.CurrentPlayer.Cards = existingCards.ToArray(); } } }
private void DistributeCard(IRandomGen randomGen) { if (!this.CardDistributed) { this.CardDistributed = true; if (this.CurrentPlayer.Cards.Count() < this.Options.MaximumNumberOfCards) { var existingCards = new List<BonusCard>(this.CurrentPlayer.Cards); var cardToDistribute = randomGen.GetNext(0, 2); existingCards.Add((BonusCard) cardToDistribute); this.CurrentPlayer.Cards = existingCards.ToArray(); } } }