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(); }
/// <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); }
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}."); } }
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); } } } }