diff --git a/Math Game/Math Game.slnx b/Math Game/Math Game.slnx new file mode 100644 index 00000000..6c0c858d --- /dev/null +++ b/Math Game/Math Game.slnx @@ -0,0 +1,3 @@ + + + diff --git a/Math Game/Math Game/Math Game.csproj b/Math Game/Math Game/Math Game.csproj new file mode 100644 index 00000000..50a3b8c4 --- /dev/null +++ b/Math Game/Math Game/Math Game.csproj @@ -0,0 +1,11 @@ + + + + Exe + net10.0 + Math_Game + enable + enable + + + diff --git a/Math Game/Math Game/Program.cs b/Math Game/Math Game/Program.cs new file mode 100644 index 00000000..76b1994b --- /dev/null +++ b/Math Game/Math Game/Program.cs @@ -0,0 +1,278 @@ + + + +using System.Diagnostics; + +namespace Math_Game +{ + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("testing 123!"); + Menu(); + } + + static void Menu() + { + List history = new List(); + var gameParemeters = ("", 0); + int userOption = 0; + bool gameParameterChosen = false; + string menu = "Welcome to the math game! Please select a game mode: \n" + + "1) Select game options \n" + + "2) Play \n" + + "3) View history \n" + + "4) Exit"; + + while (true) + { + Console.WriteLine(menu); + + if (!int.TryParse(Console.ReadLine(), out userOption)) + { + Console.WriteLine("Please enter a valid number (1 - 4): "); + continue; + } + + + if (userOption == 1) + { + gameParemeters = GetGameParameters(); + gameParameterChosen = true; + continue; + } + else if (4 > userOption && userOption > 1 && gameParameterChosen == false) + { + Console.WriteLine("Please select game parameters first"); + continue; + } + else if (userOption == 2) + { + while (true) + { + Console.WriteLine("do you want a random game? (yes/no)"); + + string userInputForRandomGame = (Console.ReadLine() ?? "").ToLower(); + + if (userInputForRandomGame == "yes") + { + history.AddRange(PlayGame(gameParemeters.Item1, gameParemeters.Item2, true, 0)); + break; + } + else if (userInputForRandomGame == "no") + { + Console.WriteLine("please choose an operator \n" + + "1) +\n" + + "2) -\n" + + "3) *\n" + + "4) /\n"); + + if (!int.TryParse(Console.ReadLine(), out int userChosenOperator)) + { + Console.WriteLine("please enter 1 - 4 only"); + continue; + } + else + { + history.AddRange(PlayGame(gameParemeters.Item1, gameParemeters.Item2, false, userChosenOperator - 1)); + } + break; + } + else + { + Console.WriteLine("Please enter yes or no only"); + } + } + + + + } + else if (userOption == 3) + { + if(history.Count == 0) + { + Console.WriteLine("No games played yet!"); + continue; + } + foreach (string item in history) + { + Console.WriteLine(item); + } + } + else if (userOption == 4) + { + Console.WriteLine("Thanks for playing!"); + break; + } + else + { + Console.WriteLine("Please enter a valid number ( 1 - 4 ): "); + continue; + + } + } + } + + static (string difficulty, int numberOfQuestions) GetGameParameters() + { + + string? difficulty = ""; + int numberOfQuestions = 0; + + while (true) + { + Console.WriteLine("please enter a valid difficulty: easy, normal or hard"); + + difficulty = (Console.ReadLine() ?? "").ToLower(); + if (difficulty != "easy" && difficulty != "normal" && difficulty != "hard") + { + continue; + } + else + { + break; + } + } + + while (true) + { + Console.WriteLine("please enter the amount of questions you want: (5 - 99)"); + if (!int.TryParse(Console.ReadLine(), out numberOfQuestions) || numberOfQuestions < 5 || numberOfQuestions > 99) + { + Console.WriteLine("Please enter a valid number between 5 and 99"); + continue; + } + else + { + break; + } + + } + return (difficulty, numberOfQuestions); + + } + + + + static List PlayGame(string difficulty, int numberOfQuestions, bool randomGameBool, int userChosenOperator) + { + List history = new List(); + Random rand = new Random(); + Stopwatch sw = new Stopwatch(); + int correctCtr = 0; + sw.Start(); + for (int i = 0; i < numberOfQuestions; i++) + { + + int firstNumber = 0; + int secondNumber = 0; + if (difficulty == "easy") + { + firstNumber = rand.Next(1, 11); + secondNumber = rand.Next(1, 11); + } + else if (difficulty == "normal") + { + firstNumber = rand.Next(10, 100); + secondNumber = rand.Next(10, 100); + } + else if (difficulty == "hard") + { + firstNumber = rand.Next(100, 1000); + secondNumber = rand.Next(100, 1000); + } + + if (randomGameBool) + { + int randomOperator = rand.Next(0, 4); + history.Add(AskQuestion(firstNumber, secondNumber, randomOperator)); + } + else + { + history.Add(AskQuestion(firstNumber, secondNumber, userChosenOperator)); + } + if (history.Last().Contains("Correct!")) + { + correctCtr++; + } + } + sw.Stop(); + Console.WriteLine("Your score is: " + correctCtr + "/" + numberOfQuestions); + Console.WriteLine("The total time taken(seconds) is: " + sw.Elapsed.TotalSeconds); + Console.WriteLine("press enter to continue"); + Console.ReadLine(); + return history; + } + static string AskQuestion(int firstNumber, int secondNumber, int randomOperator) + { + + String operatorSymbol = ""; + int realAnswer = 0; + if (randomOperator == 0) + { + operatorSymbol = "+"; + realAnswer = firstNumber + secondNumber; + } + else if (randomOperator == 1) + { + operatorSymbol = "-"; + realAnswer = firstNumber - secondNumber; + } + else if (randomOperator == 2) + { + operatorSymbol = "*"; + realAnswer = firstNumber * secondNumber; + } + else if (randomOperator == 3) + { + operatorSymbol = "/"; + while (true) + { + if (firstNumber % secondNumber == 0) + { + realAnswer = firstNumber / secondNumber; + break; + } + else + { + if (firstNumber < secondNumber) + { + int temp = secondNumber; + secondNumber = firstNumber; + firstNumber = temp; + } + firstNumber++; + + } + + } + + } + Console.WriteLine($"What is {firstNumber} {operatorSymbol} {secondNumber} ?"); + int userAnswerInt = 0; + while (true) + { + if (!int.TryParse(Console.ReadLine(), out userAnswerInt)) + { + Console.WriteLine("Please enter a valid number"); + continue; + + + } + else + { + break; + } + + } + + string result = realAnswer == userAnswerInt ? "Correct!" : $"Wrong! The correct answer is {realAnswer}"; + Console.WriteLine(result); + return $"Question: {firstNumber} {operatorSymbol} {secondNumber}\t | Your answer: {userAnswerInt}\t | Result: {result}"; + + } + + + } +}