public static OperationQuestionScore RunTest(int numberOfQuestionsLeft, UserDifficulty userDifficulty, int numberOfSeconds) { Random random = new Random(); var(operationMin, operationMax) = GetPossibleOperationsByDifficulty(userDifficulty); var score = new OperationQuestionScore(); RunWithTimer RunWithTimer = new RunWithTimer(numberOfSeconds); while (numberOfQuestionsLeft > 0 && RunWithTimer.IsTimeLeft) { int mathRandomOperation = random.Next(operationMin, operationMax); MathOperation mathOperation = (MathOperation)mathRandomOperation; var(message, correctAnswer) = GetMathsEquation(mathOperation, userDifficulty); if (mathRandomOperation == 4 || mathRandomOperation == 6) { CanUseManyTimes.WriteToScreen($"To the nearest integer, What is {message} =", false); } else { CanUseManyTimes.WriteToScreen($"What is {message} =", false); } double userAnswer = Convert.ToDouble(CanUseManyTimes.ReadInput()); if (Math.Round(correctAnswer) == userAnswer) { Console.ForegroundColor = ConsoleColor.Green; CanUseManyTimes.WriteToScreen("Well Done!", false); Console.ResetColor(); score.Increment(mathOperation, true); } else { Console.ForegroundColor = ConsoleColor.Red; CanUseManyTimes.WriteToScreen("Your answer is incorrect!", false); Console.ResetColor(); score.Increment(mathOperation, false); } numberOfQuestionsLeft--; RunWithTimer.StopTimer(numberOfQuestionsLeft); } return(score); }
public static void Main(string[] args) { Console.WriteLine("To Login Type 1, To Create a new account Type 2"); int LogInOrSignUp; do { int.TryParse(Console.ReadLine(), out LogInOrSignUp); } while (LogInOrSignUp != 1 && LogInOrSignUp != 2); var filePath = Path.Combine(AppContext.BaseDirectory, "AccountDetails.txt"); var userName = ""; var password = ""; var successfull = false; var userDetails = Users.DeserializeAccountDetails(filePath); if (userDetails is null) { userDetails = new Users(); } while (!successfull) { if (LogInOrSignUp == 1) { Console.WriteLine("Write your username:"******"Enter your password:"******"You have logged in successfully!"); successfull = true; break; } else { Console.WriteLine("Your username or password is incorect, try again!"); } } else { Console.WriteLine("Enter a username:"******"The username is taken. Try another one."); } else { Console.WriteLine("Enter a password:"******"A new account for {userName} has been created!"); } } } ToFile objnew = SaveToFile.DeserializeLastTest(userName); double totalEasyQuestion = objnew.TotalEasyQuestion; double totalEasyScore = objnew.TotalEasyScore; double totalNormalQuestion = objnew.TotalNormalQuestion; double totalNormalScore = objnew.TotalNormalScore; double totalHardQuestion = objnew.TotalHardQuestion; double totalHardScore = objnew.TotalHardScore; double easyTests = objnew.EasyTests; double normalTests = objnew.NormalTests; double hardTests = objnew.HardTests; UserDifficulty userSuggestingDifficulty = UserDifficulty.Easy; if (File.Exists($"{userName}.txt")) { userSuggestingDifficulty = CanUseManyTimes.SuggestingDifficulty(userName); } var(userDifficulty, numberOfQuestions, autoDifficultyInput, numberOfSeconds) = UserInputs(); if (LogInOrSignUp == 1) { if (autoDifficultyInput == "Y") { userDifficulty = userSuggestingDifficulty; } } var score = RunTest(numberOfQuestions, userDifficulty, numberOfSeconds); Console.WriteLine($"Total score: {score.TotalScore} of {numberOfQuestions}"); if (userDifficulty == UserDifficulty.Easy) { Console.WriteLine($"Addition score: {score.AdditionScore} of {score.AdditionQuestion}"); Console.WriteLine($"Subtraction score: {score.SubtractionScore} of {score.SubtractionQuestion}"); Console.WriteLine($"Multiplication score: {score.MultiplicationScore} of {score.MultiplicationQuestion}"); easyTests++; totalEasyQuestion = totalEasyQuestion + numberOfQuestions; totalEasyScore = Math.Round((totalEasyScore + ((double)score.TotalScore / (double)numberOfQuestions) * 100) / easyTests, 2); } else if (userDifficulty == UserDifficulty.Normal) { Console.WriteLine($"Addition score: {score.AdditionScore} of {score.AdditionQuestion}"); Console.WriteLine($"Subtraction score: {score.SubtractionScore} of {score.SubtractionQuestion}"); Console.WriteLine($"Multiplication score: {score.MultiplicationScore} of {score.MultiplicationQuestion}"); Console.WriteLine($"Division score: {score.DivisionScore} of {score.DivisionQuestion}"); normalTests++; totalNormalQuestion = totalNormalQuestion + numberOfQuestions; totalNormalScore = Math.Round((totalNormalScore + ((double)score.TotalScore / (double)numberOfQuestions) * 100) / normalTests, 2); } else if (userDifficulty == UserDifficulty.Hard) { Console.WriteLine($"Multipication score: {score.MultiplicationScore} of {score.MultiplicationQuestion}"); Console.WriteLine($"Division score: {score.DivisionScore} of {score.DivisionQuestion}"); Console.WriteLine($"Power score: {score.PowerScore} of {score.PowerQuestion}"); Console.WriteLine($"Squareroot score: {score.SquareRootScore} of {score.SquareRootQuestion}"); hardTests++; totalHardQuestion = totalHardQuestion + numberOfQuestions; totalHardScore = Math.Round((totalHardScore + ((double)score.TotalScore / (double)numberOfQuestions) * 100) / hardTests, 2); } string statisticsDisplay; do { Console.WriteLine("Would you like to see your all time statistics? Please type 'Y' or 'N'"); statisticsDisplay = Console.ReadLine(); } while (statisticsDisplay != "Y" && statisticsDisplay != "N"); if (statisticsDisplay == "Y") { Console.WriteLine($"You have answered {totalEasyQuestion} easy questions so far with an average score of {totalEasyScore}%"); Console.WriteLine($"You have answered {totalNormalQuestion} normal questions so far with an average score of {totalNormalScore}%"); Console.WriteLine($"You have answered {totalHardQuestion} hard questions so far with an average score of {totalHardScore}%"); } SaveToFile.SerializeLastTest(numberOfQuestions, score.TotalScore, userDifficulty, userName, totalEasyQuestion, totalEasyScore, totalNormalQuestion, totalNormalScore, totalHardQuestion, totalHardScore, easyTests, normalTests, hardTests); }