Пример #1
0
        public static void Main(string[] args)
        {
            var randomGenerator   = RandomGenerator.Instance;
            var slotGenerator     = new SlotGenerator(randomGenerator);
            var winningCalculator = new WinningsCalculator();
            var slotsPrinter      = new SlotsPrinter();
            var player            = new Player();

            decimal balance;

            UserInputValidation(slotsPrinter.BeginningDepositMessage, player.Deposit, out balance);

            while (player.Balance > 0)
            {
                decimal stake;
                UserInputValidation(slotsPrinter.StakeAmountMessage, player.Stake, out stake);

                var slots = slotGenerator.GenerateSlots(NumberOfSlots);
                Console.WriteLine(slotsPrinter.SlotsAsString(slots));

                var winnigs = winningCalculator.CalcWinnigs(slots, stake);
                player.Win(winnigs);
                Console.WriteLine(slotsPrinter.GetWinningsMessage(winnigs));

                Console.WriteLine(slotsPrinter.GetCurrentBalanceMessage(player.Balance));
                Console.WriteLine();
            }

            Console.WriteLine();
        }
Пример #2
0
        /// <summary>
        /// Helper tworz¹cy s³ownik z wynikami dla podanych symboli.
        /// </summary>
        /// <param name="bet">Stawka dla ka¿dego symbolu</param>
        /// <param name="calculator">Kalkulator licz¹cy wynik</param>
        /// <param name="symbolsAll">Symbole, dla których budujemy wyniki.</param>
        /// <returns>S³ownik z wynikami.</returns>
        private Dictionary <int, double> CalculateWinnings(int bet, WinningsCalculator calculator, IEnumerable <int> symbolsAll)
        {
            Dictionary <int, double> actualResults = new Dictionary <int, double>();

            foreach (int symbol in symbolsAll)
            {
                actualResults.Add(symbol, calculator.Calculate(bet, symbol));
            }

            return(actualResults);
        }
Пример #3
0
        public void WinningsCalculator_Calculate()
        {
            Dictionary <int, double> winnings = new Dictionary <int, double>
            {
                { 0, 1 },
                { 1, 12 },
                { 2, 3 },
                { 3, 0.8 },
                { 4, 0.4 },
                { 5, 10 },
                { 6, 99 },
                { 7, 1 }
            };

            IEnumerable <int> symbolsAll = winnings.Keys;

            WinningsCalculator calculator = new WinningsCalculator(winnings);

            // Weryfikacja dla stawki = 1
            int bet = 1;
            Dictionary <int, double> actualResults = this.CalculateWinnings(bet, calculator, symbolsAll);

            foreach (int symbol in symbolsAll)
            {
                double expectedResult = winnings[symbol];
                Assert.AreEqual(expectedResult, actualResults[symbol], $"Invalid result for {symbol}.");
            }

            // Weryifkacja dla stawki = 9
            bet           = 9;
            actualResults = this.CalculateWinnings(bet, calculator, symbolsAll);

            foreach (int symbol in symbolsAll)
            {
                double expectedResult = winnings[symbol] * bet;
                Assert.AreEqual(expectedResult, actualResults[symbol], $"Invalid result for {symbol}.");
            }
        }
Пример #4
0
        public void SettleDraw(DateTime drawDate, int[] results)
        {
            WinningsCalculator wc = new WinningsCalculator();
            Draw d = _draws[drawDate];

            d.IsOpen = false;
            Dictionary <int, List <Ticket> > ticketCategories = SplitTicketsIntoCategories(results, d);

            for (int i = 0; i <= results.Length; i++)
            {
                decimal prizePool = wc.GetPrizePool(i, d.TotalPoolSize * (1 - OperatorDeductionFactor));
                foreach (Ticket t in ticketCategories[i])
                {
                    t.IsOpen = false;
                    if (prizePool > 0)
                    {
                        decimal totalTicketValue = GetTotalTicketValue(ticketCategories[i]);
                        t.Winnings = t.Value * prizePool / totalTicketValue;
                        _playerManager.AdjustBalance(t.Holder.PlayerId,
                                                     t.Winnings);
                    }
                }
            }
        }