Beispiel #1
0
        public static int NextWhileSkipping(this Random randomGen, int[] crescentNumbers, float bonusChance = 0)
        {
            int sum = crescentNumbers.Sum();

            float[] chances = crescentNumbers.Select(number => (float)number / sum).ToArray();

            for (int i = 0; i < crescentNumbers.Length; i++)
            {
                if (!randomGen.CheckSuccess(chances[i] + bonusChance))
                {
                    return(i);
                }
            }

            return(0);
        }
Beispiel #2
0
        public static int NextPureDistributed(
            this Random randomGen, int[] numbers, float skipChancePerIndex,
            bool decrementalSkip = false, float decrementRate = 0.5f
            )
        {
            for (int i = 0; i < numbers.Length; i++)
            {
                if (!randomGen.CheckSuccess(skipChancePerIndex))
                {
                    return(i);
                }

                if (decrementalSkip)
                {
                    skipChancePerIndex *= decrementRate;
                }
            }

            return(0);
        }