Пример #1
0
        private static RouletteResult ProcessBets(RouletteResult rouletteResult, int number, Color color)
        {
            rouletteResult.Bets.ForEach(
                x => x.BetResult = x.Bet.BetValue * (x.Bet.Number == number ? 5m : x.Bet.Color == color ? 1.8m : 0m)
                );

            return(rouletteResult);
        }
 /// <summary>
 /// The Amount that the player receives at the end of a round
 /// </summary>
 /// <param name="result">Called to detail the result of the most recent roll from the wheel.</param>
 public void NotifyTheResult(RouletteResult result)
 {
     _rouletteResultProbabilities[result] -= _enumLength;
     foreach (var idx in Enum.GetValues(typeof(RouletteResult)))
     {
         var rIdx = (RouletteResult)idx;
         _rouletteResultProbabilities[rIdx]++;
     }
 }
        private ConcurrentQueue <RouletteResult> CreateResultsList(List <Candidate> candList, double fittnesSum)
        {
            ConcurrentQueue <RouletteResult> rouletteResults = new ConcurrentQueue <RouletteResult>();
            double probability = 0;
            double p2          = 0;

            Parallel.ForEach(candList, candidate =>
            {
                probability           = (1 / candidate.fitness) / fittnesSum;
                RouletteResult result = new RouletteResult(p2, probability, candidate);
                p2 += probability;
                rouletteResults.Enqueue(result);
            });
            return(rouletteResults);
        }
        private List <RouletteResult> CreateResultsList(List <Candidate> candList, double fittnesSum)
        {
            List <RouletteResult> rouletteResults = new List <RouletteResult>();
            double probability = 0;
            double p2          = 0;

            foreach (var candidate in candList)
            {
                probability = (1 / candidate.fitness) / fittnesSum;
                RouletteResult result = new RouletteResult(p2, probability, candidate);
                p2 += probability;
                rouletteResults.Add(result);
            }
            return(rouletteResults);
        }
Пример #5
0
        public RouletteResult CloseBets(Guid id)
        {
            var roulette = GetRoulette(id);

            var(number, color) = SpinRoulette();
            var rouletteResult = new RouletteResult()
            {
                Id     = roulette.Id,
                Number = number,
                Color  = color,
                Bets   = roulette.Bets
            };

            rouletteResult = ProcessBets(rouletteResult, number, color);
            _cache.JsonSet(id.ToString(), rouletteResult);
            Roulettes       = Roulettes.Where(x => x != id).ToList();
            RouletteResults = RouletteResults.Append(id).ToList();

            return(rouletteResult);
        }
Пример #6
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);
        }
 /// <summary>
 /// The Amount that the player receives at the end of a round
 /// </summary>
 /// <param name="result">Called to detail the result of the most recent roll from the wheel.</param>
 public void NotifyTheResult(RouletteResult result)
 {
     //do nothing... I to dum
 }
Пример #8
0
        public void Setup()
        {
            FakeRouletteId         = Guid.Parse("8cc32b40-578d-47c1-bb9f-63240737243f");
            FakeNotFoundRouletteId = Guid.Parse("00000000-0000-0000-0000-000000000000");
            FakeOpenRouletteId     = Guid.Parse("b5b1a0c6-efc7-43b4-91b1-024a0268a7cf");
            FakeCloseRouletteId    = Guid.Parse("90e031e0-9db9-4aa2-af94-832c6e13eed4");
            FakeBetId          = Guid.Parse("496929ae-c452-41ea-8b45-67e179b75f36");
            FakeRoulette       = GetRouletteFake(FakeRouletteId, false);
            FakeOpenRoulette   = GetRouletteFake(FakeOpenRouletteId, true);
            FakeCloseRoulette  = GetRouletteFake(FakeCloseRouletteId, false);
            FakeBet            = GetBetFake(FakeBetId, 4, 5000m);
            FakeRouletteResult = GetRouletteResultFake(FakeRouletteId, new List <BetUser>()
            {
                FakeBet
            });

            _rouletteRepositoryMock.Setup(x => x.GetById(It.Is <Guid>(x => x == FakeRouletteId)))
            .Returns(FakeRoulette);
            _rouletteRepositoryMock.Setup(x => x.GetById(It.Is <Guid>(x => x == FakeOpenRouletteId)))
            .Returns(FakeOpenRoulette);
            _rouletteRepositoryMock.Setup(x => x.Get())
            .Returns(new List <dynamic>()
            {
                FakeRoulette, FakeRouletteResult
            });
            _rouletteRepositoryMock.Setup(x => x.Create())
            .Returns(FakeRouletteId);
            _rouletteRepositoryMock.Setup(x => x.OpenBets(It.Is <Guid>(x => x == FakeRouletteId)))
            .Returns(true);
            _rouletteRepositoryMock.Setup(x => x.CloseBets(It.Is <Guid>(x => x == FakeOpenRouletteId)))
            .Returns(FakeRouletteResult);
            _rouletteRepositoryMock.Setup(x => x.Exist(It.Is <Guid>(x => x == FakeRouletteId)))
            .Returns(true);
            _rouletteRepositoryMock.Setup(
                x => x.MakeBet(
                    It.Is <Guid>(x => x == FakeOpenRouletteId),
                    It.Is <Guid>(x => x == FakeBetId),
                    FakeBet.Bet
                    )).Returns(true);

            Roulette nullObj = null;

            _rouletteRepositoryMock.Setup(x => x.GetById(It.Is <Guid>(x => x == FakeNotFoundRouletteId)))
            .Returns(nullObj);
            _rouletteRepositoryMock.Setup(x => x.GetById(It.Is <Guid>(x => x == FakeOpenRouletteId)))
            .Returns(FakeOpenRoulette);
            _rouletteRepositoryMock.Setup(x => x.GetById(It.Is <Guid>(x => x == FakeCloseRouletteId)))
            .Returns(FakeCloseRoulette);
            _rouletteRepositoryMock.Setup(x => x.Exist(It.Is <Guid>(x => x == FakeNotFoundRouletteId)))
            .Returns(false);
            _rouletteRepositoryMock.Setup(x => x.Exist(It.Is <Guid>(x => x == FakeOpenRouletteId)))
            .Returns(true);
            _rouletteRepositoryMock.Setup(x => x.Exist(It.Is <Guid>(x => x == FakeCloseRouletteId)))
            .Returns(true);

            var httpContext = new DefaultHttpContext();

            httpContext.Request.Headers["UserId"] = FakeBetId.ToString();
            RouletteController = new RoulettesController(
                _rouletteRepositoryMock.Object,
                _loggerMock.Object
                )
            {
                ControllerContext = new ControllerContext()
                {
                    HttpContext = httpContext,
                }
            };
        }
 /// <summary>
 /// The Amount that the player receives at the end of a round
 /// </summary>
 /// <param name="result">Called to detail the result of the most recent roll from the wheel.</param>
 public void NotifyTheResult(RouletteResult result)
 {
     //do nothing... just keep swimming
 }