Пример #1
0
        private static int GetPayout(RouletteBetMode mode)
        {
            switch (mode)
            {
            case RouletteBetMode.Red:
            case RouletteBetMode.Black:
            case RouletteBetMode.Low:
            case RouletteBetMode.High:
            case RouletteBetMode.Odd:
            case RouletteBetMode.Even:
                return(1);

            case RouletteBetMode.DozenA:
            case RouletteBetMode.DozenB:
            case RouletteBetMode.DozenC:
                return(2);

            case RouletteBetMode.Basket:
                return(6);

            case RouletteBetMode.Green:
                return(35);

            default:
                throw new Exception("Unknown bet mode");
            }
        }
Пример #2
0
 private static bool JudgeBet(RouletteBetMode mode, int index)
 {
     return(mode switch
     {
         RouletteBetMode.Green => IsGreen(index),
         RouletteBetMode.Red => IsRed(index),
         RouletteBetMode.Black => IsBlack(index),
         RouletteBetMode.High => !IsGreen(index) && Pockets[index] >= 19,
         RouletteBetMode.Low => !IsGreen(index) && Pockets[index] < 19,
         RouletteBetMode.Odd => !IsGreen(index) && Pockets[index] % 2 == 1,
         RouletteBetMode.Even => !IsGreen(index) && Pockets[index] % 2 == 0,
         RouletteBetMode.DozenA => Pockets[index] >= 1 && Pockets[index] <= 12,
         RouletteBetMode.DozenB => Pockets[index] >= 13 && Pockets[index] <= 24,
         RouletteBetMode.DozenC => Pockets[index] >= 25 && Pockets[index] <= 36,
         RouletteBetMode.Basket => Pockets[index].EqualsAny(0, 1, 2, 3),
         _ => throw new Exception("Unknown bet mode")
     });
Пример #3
0
        // GREEN
        // 0

        // REDS
        // 32, 19, 21, 25, 34, 27, 36, 30, 23,  5, 16,  1, 14,  9, 18,  7, 12,  3

        // BLACKS
        // 15,  4,  2, 17,  6, 13, 11,  8, 10, 24, 33, 20, 31, 22, 29, 28, 35, 26

        public static RouletteResult Next(ArcadeUser user, RouletteBetMode mode, long wager)
        {
            int index  = RandomProvider.Instance.Next(0, 37);
            int pocket = Pockets[index];
            RoulettePocketColor color = GetColor(index);
            bool isSuccess            = JudgeBet(mode, index);
            RouletteResultFlag flag   = isSuccess ? RouletteResultFlag.Win : RouletteResultFlag.Lose;
            float multiplier          = GetPayout(mode) + 1;
            long  reward = GetReward(wager, mode);

            return(new RouletteResult
            {
                Color = color,
                Index = index,
                Pocket = pocket,
                Mode = mode,
                Wager = wager,
                IsSuccess = isSuccess,
                Flag = flag,
                Multiplier = multiplier,
                Reward = reward
            });
        }
Пример #4
0
        public async Task RouletteAsync(RouletteBetMode mode, long wager)
        {
            if (wager < 0)
            {
                await Context.Channel.SendMessageAsync($"> 👁️ You can't specify a **negative** value.\n> *\"I know what you were trying to do.\"*");

                return;
            }

            if (wager == 0)
            {
                // $"> ⚠️ You need to specify a positive amount of **Chips** to bet."
                await Context.Channel.SendMessageAsync($"> ⚠️ You need to specify a positive amount of **Chips** to bet.");

                return;
            }

            if (wager > Context.Account.ChipBalance)
            {
                await Context.Channel.SendMessageAsync($"> ⚠️ You don't have enough **Chips** to bet with.");

                return;
            }

            if (wager > Roulette.MaxWager)
            {
                await Context.Channel.SendMessageAsync($"> ⚠️ The maximum wager for **Roulette** is {Icons.Chips} **{Roulette.MaxWager:##,0}**.");

                return;
            }

            RouletteResult result  = Roulette.Next(Context.Account, mode, wager);
            Message        message = result.ApplyAndDisplay(Context.Account);

            await Context.Channel.SendMessageAsync(Context.Account, message).ConfigureAwait(false);
        }
Пример #5
0
 private static long GetReward(long bet, RouletteBetMode mode)
 {
     return(bet + (long)Math.Floor(bet * (double)GetPayout(mode)));
 }