// Method printing Results Per Draw public static void PrintResultsPerAllDraws(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to output Draw Results"); } Console.WriteLine("- - - - - - - - - - - - - - - - - - -"); Console.WriteLine("Press ANY KEY to output DRAW Results"); Console.WriteLine("- - - - - - - - - - - - - - - - - - -"); Console.ReadKey(true); Console.WriteLine(); foreach (Draw draw in kenoGame.Draws) { try { Randomizer.DrawKinoNumbers(draw); draw.SetKinoBonus(); } catch (ArgumentNullException ex) { Console.WriteLine(ex.Message); } Console.Write($"|Draw #{draw.ID}| : "); draw.DrawResults.ForEach(n => Console.Write($"{n} ")); Console.WriteLine(); Console.WriteLine($"Kino Bonus is : {draw.KinoBonus}"); Console.WriteLine(); } }
// Method setting number of Tickets per Player public static void NumberOfTickets(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to set Number Of Tickets"); } Console.WriteLine(); kenoGame.SetTickets(); }
// Method printing Check Results for All Players Per Draw public static void PrintCheckResultsForAllDraws(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to output Players' Winning Numbers"); } Console.WriteLine("TICKETS SUCCESS STATUS"); Console.WriteLine("---------------------"); var checker = kenoGame.CheckResults(); Console.WriteLine(); Console.WriteLine("ANALYTICAL RESULTS PER EACH PLAYER"); Console.WriteLine("----------------------------------"); foreach (Player player in kenoGame.Players) { Console.WriteLine(); Console.WriteLine($"Player #{player.ID}:"); Console.WriteLine("----------"); foreach (LotteryTicket ticket in player.Tickets) { Console.Write($"|Draw #{ticket.DrawID}| Ticket #{ticket} won {ticket.WinningNumbers.Count} number(s) out of 6"); Console.WriteLine(); Console.Write($"Winning Number(s) : "); if (ticket.WinningNumbers.Count != 0) { ticket.WinningNumbers.ForEach(n => Console.Write($"{n} ")); } else { Console.Write("----"); } if (ticket.KinoBonusOption == true) { Console.WriteLine(); Console.Write(ticket.KinoBonusWinner ? "--> Kino Bonus number WON!" : "--> Kino Bonus number not won."); Console.WriteLine(); } else { Console.WriteLine(); } Console.WriteLine(); } } }
static void Main(string[] args) { // Creating Lottery Game Instance LotteryGame kenoGame = new LotteryGame("Keno Lottery"); // Initializing Program var sb = new StringBuilder(); sb.AppendLine($"Starting {kenoGame.Name} Program") .AppendLine("- - - - - - - - - - - - - - -") .AppendLine("Each player will participate with 1 Ticket per Draw.") .AppendLine("Each Draw's Prize Money is accumulated from previous Draws.") .AppendLine($"If Prize Money Available exceeds {Draw.MaxMoneyBank:C}, next Draw will reset it to initial amount."); Console.WriteLine(sb); try { // Setting total number of players ScreenOutput.NumberOfPlayers(kenoGame); // Setting total number of draws ScreenOutput.NumberOfDraws(kenoGame); // Setting tickets per Player and per Draw ScreenOutput.NumberOfTickets(kenoGame); // Printing player Tickets per Draw ScreenOutput.PrintPlayersTickets(kenoGame); // Printing Results Per Each Draw ScreenOutput.PrintResultsPerAllDraws(kenoGame); // Printing Check Results for Each Ticket ScreenOutput.PrintCheckResultsForAllDraws(kenoGame); // Printing Prize Money Tier Distrubution For Each Draw ScreenOutput.PrintPrizeTiersDistribution(kenoGame); // Printing Lottery Game Statistics ScreenOutput.PrintKenoStatistics(kenoGame); } catch (ArgumentNullException ex) { Console.WriteLine(ex.Message); } // Exiting Program Console.WriteLine(); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }
// Method setting number of Players public static void NumberOfPlayers(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to set Number Of Players"); } Console.Write("How many players will join the lottery?: "); int numberOfPlayers = 0; while (!int.TryParse(Console.ReadLine(), out numberOfPlayers) || numberOfPlayers < 1) { Console.Write("Not valid input. How many players will join the lottery?: "); } for (int i = 1; i <= numberOfPlayers; i++) { Player player = new Player(); kenoGame.AddPlayer(player); } }
// Method printing All Player Selections Per Draw public static void PrintPlayersTickets(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to output Players Selections"); } foreach (Player player in kenoGame.Players) { Console.WriteLine($"Player #{player.ID} Selections:"); Console.WriteLine("---------------------"); foreach (LotteryTicket ticket in player.Tickets) { try { Randomizer.SelectSixRandomNumbers(ticket); Randomizer.KinoBonusChoice(ticket); } catch (ArgumentNullException ex) { Console.WriteLine(ex.Message); } Console.Write($"|Draw #{ticket.DrawID}| Ticket #{ticket} : "); ticket.SelectedNumbers.ForEach(n => Console.Write($"{n} ")); Console.WriteLine(); Console.WriteLine(ticket.KinoBonusOption ? "--> Kino Bonus Option: YES" : "--> Kino Bonus Option: NO"); Console.WriteLine(); } Console.WriteLine(); } }
// Method setting number of Draws public static void NumberOfDraws(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to set Number Of Draws"); } Console.WriteLine(); Console.Write("How many draws will take place? : "); int numberOfDraws = 0; while (!int.TryParse(Console.ReadLine(), out numberOfDraws) || numberOfDraws < 1) { Console.Write("Not valid input. How many draws will take place? : "); } for (int i = 1; i <= numberOfDraws; i++) { Draw draw = new Draw(); kenoGame.AddDraw(draw); } Console.WriteLine(); }
// Method printing Keno Game Statistics public static void PrintKenoStatistics(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to output Statistics"); } Console.WriteLine(); Console.WriteLine("----------------"); Console.WriteLine("DRAWS STATISTICS"); Console.WriteLine("----------------"); var stats = kenoGame.ComputeStatistics(); Console.WriteLine(); Console.WriteLine("THREE MOST FREQUENT NUMBERS :"); Console.WriteLine("(may include numbers that co-exist in the 3rd place)"); Console.WriteLine(); foreach (int count in stats.ThreeMostNumbers.Values.Distinct()) { Console.Write($"#{count} times : "); foreach (int number in stats.ThreeMostNumbers.Keys) { if (stats.ThreeMostNumbers[number] == count) { Console.Write($"{number} "); } } Console.WriteLine(); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("THREE LESS FREQUENT NUMBERS :"); Console.WriteLine("(may include numbers that co-exist in the 3rd place)"); Console.WriteLine(); foreach (int count in stats.ThreeLessNumbers.Values.Distinct()) { Console.Write($"#{count} times : "); foreach (int number in stats.ThreeLessNumbers.Keys) { if (stats.ThreeLessNumbers[number] == count) { Console.Write($"{number} "); } } Console.WriteLine(); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("MOST FREQUENT KINO NUMBER(S) :"); Console.WriteLine("(may include numbers that co-exist)"); Console.WriteLine(); foreach (int count in stats.MostKinoBonus.Values.Distinct()) { Console.Write($"#{count} times : "); foreach (int number in stats.MostKinoBonus.Keys) { if (stats.MostKinoBonus[number] == count) { Console.Write($"{number} "); } } Console.WriteLine(); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("LESS FREQUENT KINO NUMBER(S) :"); Console.WriteLine("(may include numbers that co-exist)"); Console.WriteLine(); foreach (int count in stats.LessKinoBonus.Values.Distinct()) { Console.Write($"#{count} times : "); foreach (int number in stats.LessKinoBonus.Keys) { if (stats.LessKinoBonus[number] == count) { Console.Write($"{number} "); } } Console.WriteLine(); } }
// Method printing Prize Money Tier Lists of Winners public static void PrintPrizeTiersDistribution(LotteryGame kenoGame) { if (kenoGame == null) { throw new ArgumentNullException("lotteryGame", "LotteryGame cannot be null to output Prize Tiers Distribution"); } Console.WriteLine(); Console.WriteLine("-------------------------------"); Console.WriteLine("PRIZE TIER & MONEY DISTRIBUTION"); Console.WriteLine("-------------------------------"); kenoGame.SetPrizeTierDistribution(); foreach (Draw draw in kenoGame.Draws) { Console.WriteLine(); Console.WriteLine($"DRAW #{draw.ID} DISTRIBUTION"); Console.WriteLine("--------------------"); Console.WriteLine($"---> Moneybank : {draw.MoneyBank:C}"); Console.WriteLine(); foreach (PrizeTier prizeTier in draw.Distribution.PrizeTiers) { switch (prizeTier.Type) { case PrizeTierCategory.SixOutOfSixWithKinoBonus: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 6/6 Plus Kino Bonus"); break; case PrizeTierCategory.SixOutOfSix: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 6/6"); break; case PrizeTierCategory.FiveOutOfSixWithKinoBonus: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 5/6 Plus Kino Bonus"); break; case PrizeTierCategory.FiveOutOfSix: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 5/6"); break; case PrizeTierCategory.FourOutOfSixWithKinoBonus: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 4/6 Plus Kino Bonus"); break; case PrizeTierCategory.FourOutOfSix: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 4/6"); break; case PrizeTierCategory.ThreeOutOfSixWithKinoBonus: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 3/6 Plus Kino Bonus"); break; case PrizeTierCategory.ThreeOutOfSix: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 3/6"); break; case PrizeTierCategory.TwoOutOfSixWithKinoBonus: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 2/6 Plus Kino Bonus"); break; case PrizeTierCategory.TwoOutOfSix: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 2/6"); break; case PrizeTierCategory.OneOutOfSixWithKinoBonus: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 1/6 Plus Kino Bonus"); break; case PrizeTierCategory.OneOutOfSix: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 1/6"); break; default: Console.WriteLine($"[{prizeTier.Tickets.Count}] ticket(s) got 0/6"); break; } if (prizeTier.Type != PrizeTierCategory.ZeroOutOfSix) { Console.WriteLine($"--> Prize Tier MoneyBank : {prizeTier.PrizeMoney:C}"); Console.WriteLine($"--> Prize Money Distributed: {prizeTier.MoneyDistributed:C}"); Console.WriteLine(prizeTier.Tickets.Count != 0 ? $"Each winning ticket got {prizeTier.MoneyDistributed / prizeTier.Tickets.Count:C}" : "Prize money transfered to next draw."); Console.WriteLine(); } else { Console.WriteLine("No Prize Money Distribution for this category."); } } Console.WriteLine(); Console.WriteLine($"Money given to [CHARITIES] from this draw : {draw.Distribution.CharityMoney:C}"); } Console.WriteLine(); Console.WriteLine("TOTAL PLAYER EARNINGS"); Console.WriteLine("---------------------"); Console.WriteLine(); kenoGame.Players.ForEach(p => Console.WriteLine($"Player #{p.ID} Earnings : {p.Earnings:C}")); }