Ejemplo n.º 1
0
        public T LuckyDraw(IRandomGenerator randomGenerator, ILuckier luckier, Func <float, float, float> luckinessAdjustmentFunc)
        {
            if (randomGenerator == null)
            {
                throw new ArgumentNullException("randomGenerator");
            }
            if (luckier == null)
            {
                throw new ArgumentNullException("luckier");
            }
            if (luckier.Luckyness <= 0)
            {
                throw new ArgumentOutOfRangeException("luckier", luckier.Luckyness, "Luckyness must greater than zero.");
            }
            if (undelyingList.Count <= 0)
            {
                return(default(T));
            }
            float randomValue = 0, enumeratedValue = 0;
            var   item = undelyingList[0];

            foreach (var rpitem in undelyingList)
            {
                randomValue += CountWeight(luckier.Luckyness, rpitem.rare);
            }
            randomValue *= randomGenerator.Random();
            foreach (var rpitem in undelyingList)
            {
                enumeratedValue += CountWeight(luckier.Luckyness, rpitem.rare);
                if (enumeratedValue > randomValue)
                {
                    break;
                }
                item = rpitem;
            }
            luckier.Luckyness = luckinessAdjustmentFunc(luckier.Luckyness, item.rare);
            return(item.item);
        }
Ejemplo n.º 2
0
 public T LuckyDraw(IRandomGenerator randomGenerator, ILuckier luckier)
 {
     return(LuckyDraw(randomGenerator, luckier, LuckinessAdjustment));
 }
Ejemplo n.º 3
0
 public T LuckyDraw(ILuckier luckier)
 {
     return(LuckyDraw(RandomGenerator.DefaultInstance, luckier, LuckinessAdjustment));
 }