static void Calculate(CoinFlipResults coinFlipResults) { ulong all = (ulong)coinFlipResults.Heads + (ulong)coinFlipResults.Tails; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"All: {all}"); decimal tailsPercentage = Convert.ToDecimal(coinFlipResults.Tails) / Convert.ToDecimal(all); decimal headsPercentage = Convert.ToDecimal(coinFlipResults.Heads) / Convert.ToDecimal(all); Console.WriteLine($"Tails percentage: {tailsPercentage}\n" + $"Heads percentage: {headsPercentage}"); }
static void SaveResultsToFile(CoinFlipResults result) { try { FileStream stream = File.Create(Path.Combine("Results", $"{DateTime.Now}.json")); string json = JsonSerializer.Serialize(result); using (StreamWriter writer = new StreamWriter(stream)) { writer.Write(json); } stream.Close(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\nSaving done!"); Console.ForegroundColor = ConsoleColor.White; } catch (Exception) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error! Result isn't saved!"); Console.ForegroundColor = ConsoleColor.White; } }
static void LoadAndCalculate() { Console.WriteLine("Your results files:"); try{ string[] files = Directory.GetFiles("Results"); for (int i = 0; i < files.Length; i++) { Console.WriteLine($"{i + 1}. {files[i]}"); } int fileNumber = GetFileNumberFromUser(files); string json = String.Empty; using (StreamReader reader = new StreamReader(files[fileNumber - 1])){ json = reader.ReadToEnd(); } CoinFlipResults result = JsonSerializer.Deserialize <CoinFlipResults>(json); Calculate(result); } catch (Exception) { Console.WriteLine("Error!"); LoadAndCalculate(); } }
static void GetDataFromUserAndStartFlipping() { Console.ForegroundColor = ConsoleColor.White; Console.Write("Number of flips: "); string numberOfFlipsString = Console.ReadLine(); ulong numberOfFlips = 0; bool isAsync = false; bool[] results = null; CoinFlipResults coinFlipResults = null; if (UInt64.TryParse(numberOfFlipsString, out numberOfFlips)) { bool result = false; Random random = new Random(); if (numberOfFlips > 1) { GetVariantOfFlippingFromUser(ref isAsync); Console.WriteLine($"Asynchronous: {isAsync}"); if (isAsync) { results = CoinFlipper.FlipRepeatedlyAsync(random, numberOfFlips).Result; } else { results = CoinFlipper.FlipRepeatedly(random, numberOfFlips); } } else { result = CoinFlipper.Flip(random); } if (numberOfFlips > 1) { Console.WriteLine("\nWould you like to save results? y/n"); string usersAnswerToSaver = Console.ReadLine(); switch (usersAnswerToSaver) { case "y": coinFlipResults = PrepareResults(results); SaveResultsToFile(coinFlipResults); break; case "Y": coinFlipResults = PrepareResults(results); SaveResultsToFile(coinFlipResults); break; default: Console.WriteLine("Ok! Without saving"); break; } } else { string headOrTail = String.Empty; if (result) { headOrTail = "head"; } else { headOrTail = "tail"; } Console.WriteLine($"Your result is {headOrTail}"); } } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("The argument is not in the correct format. Check and enter the value again"); GetDataFromUserAndStartFlipping(); } }