diff --git a/MathGame.purdyz/MathGame.purdyz.slnx b/MathGame.purdyz/MathGame.purdyz.slnx new file mode 100644 index 00000000..ea51e18a --- /dev/null +++ b/MathGame.purdyz/MathGame.purdyz.slnx @@ -0,0 +1,3 @@ + + + diff --git a/MathGame.purdyz/MathGame.purdyz/GameResult.cs b/MathGame.purdyz/MathGame.purdyz/GameResult.cs new file mode 100644 index 00000000..35882e10 --- /dev/null +++ b/MathGame.purdyz/MathGame.purdyz/GameResult.cs @@ -0,0 +1,9 @@ +namespace MathGame.purdyz; + +internal class GameResult +{ + public string? GameType { get; set; } + public int Score { get; set; } + public string? Difficulty { get; set; } + public string? Time { get; set; } +} \ No newline at end of file diff --git a/MathGame.purdyz/MathGame.purdyz/MathGame.purdyz.csproj b/MathGame.purdyz/MathGame.purdyz/MathGame.purdyz.csproj new file mode 100644 index 00000000..ed9781c2 --- /dev/null +++ b/MathGame.purdyz/MathGame.purdyz/MathGame.purdyz.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/MathGame.purdyz/MathGame.purdyz/Program.cs b/MathGame.purdyz/MathGame.purdyz/Program.cs new file mode 100644 index 00000000..e522e855 --- /dev/null +++ b/MathGame.purdyz/MathGame.purdyz/Program.cs @@ -0,0 +1,226 @@ +using System.Diagnostics; +using MathGame.purdyz; + +WelcomePlayer(); +bool gameRunning = true; +List history = new List(); +Random random = new Random(); + +MainGame(); + +void WelcomePlayer() +{ + Console.WriteLine("Welcome to the Math Game!"); + Console.Write("What's your name? "); + string? playerName = Console.ReadLine(); + Console.WriteLine($"Nice to meet you, {playerName}!"); + Console.WriteLine(); +} + +void MainGame() +{ + while (gameRunning) + { + Console.WriteLine("Main Menu"); + Console.WriteLine("1. Play a game"); + Console.WriteLine("2. View History"); + Console.WriteLine("3. Exit"); + string? menuChoice = Console.ReadLine(); + + switch (menuChoice) + { + case "1": + GameSelection(); + break; + case "2": + ViewHistory(); + break; + case "3": + Console.WriteLine("Thanks for playing!"); + gameRunning = false; + break; + default: + Console.WriteLine("The choice you selected was invalid. Please enter 1 through 3 only."); + break; + } + + Console.WriteLine("Press any key to return to main menu."); + Console.ReadLine(); + Console.Clear(); + } +} + +void GameSelection() +{ + Console.WriteLine("Enter the number of a game to play:"); + Console.WriteLine("1. Addition"); + Console.WriteLine("2. Subtraction"); + Console.WriteLine("3. Multiplication"); + Console.WriteLine("4. Division"); + Console.WriteLine("5. Random"); + + if (int.TryParse(Console.ReadLine(), out int gameChoice)) + { + switch (gameChoice) + { + case 1: + Console.WriteLine("Addition selected!"); + PlayRound("Addition", '+'); + break; + case 2: + Console.WriteLine("Subtraction selected!"); + PlayRound("Subtraction", '-'); + break; + case 3: + Console.WriteLine("Multiplication selected!"); + PlayRound("Multiplication", '*'); + break; + case 4: + Console.WriteLine("Division selected!"); + PlayRound("Division", '/'); + break; + case 5: + Console.WriteLine("Random selected!"); + PlayRound("Random", ' '); + break; + default: + Console.WriteLine("Invalid choice."); + break; + } + } + else + { + Console.WriteLine("The choice you selected was invalid. Defaulting to random mode."); + PlayRound("Random", ' '); + } +} + +void PlayRound(string operation, char operand) +{ + string difficulty = ChooseDifficulty(); + int roundNumber = 1; + int maxRounds = 5; + int score = 0; + int randomNum; + int randomNum2; + int result; + bool randomGame = operation == "Random" ? true : false; + Stopwatch timer = new Stopwatch(); + + while (roundNumber <= maxRounds) + { + randomNum = GenerateRandomNumber(difficulty); + randomNum2 = GenerateRandomNumber(difficulty); + + if (randomGame) + { + string[] operationArray = new string[] { "Addition", "Subtraction", "Multiplication", "Division" }; + char[] operandArray = new char[] { '+', '-', '*', '/' }; + int randomOperation = random.Next(0, 4); + operation = operationArray[randomOperation]; + operand = operandArray[randomOperation]; + } + + if (operation == "Division") + randomNum = Calculate("Multiplication", randomNum, randomNum2); + + result = Calculate(operation, randomNum, randomNum2); + + Console.WriteLine($"Question {roundNumber}! What is {randomNum} {operand} {randomNum2}?"); + timer.Start(); + string? answer = Console.ReadLine(); + Console.WriteLine($"Your answer is {answer}"); + + if (int.TryParse(answer, out int validAnswer)) + { + if (validAnswer == result) + { + score++; + Console.WriteLine("Correct!"); + } + else + Console.WriteLine("That's the wrong answer."); + } + else + Console.WriteLine("The answer you entered was invalid. Please enter a whole number only. Marking as incorrect!"); + + roundNumber++; + } + + timer.Stop(); + RecordResults(randomGame, operation, score, difficulty, timer); + Console.WriteLine($"Your final score is {score}! It took you {timer.Elapsed.ToString(@"mm\:ss")}!"); +} + +static string ChooseDifficulty() +{ + Console.WriteLine("Choose a difficulty level"); + Console.WriteLine("1. Easy"); + Console.WriteLine("2. Medium"); + Console.WriteLine("3. Hard"); + + if (int.TryParse(Console.ReadLine(), out int difficultyChoice)) + { + switch (difficultyChoice) + { + case 1: + return "Easy"; + case 2: + return "Medium"; + case 3: + return "Hard"; + default: + Console.WriteLine("Invalid choice. Defaulting to easy mode."); + return "Easy"; + } + } + else + { + Console.WriteLine("The choice you selected was invalid. Defaulting to easy mode."); + return "Easy"; + } +} + +int GenerateRandomNumber(string difficulty) +{ + if (difficulty.Equals("Hard")) + return random.Next(1, 1001); + if (difficulty.Equals("Medium")) + return random.Next(1, 101); + + return random.Next(1, 11); +} + +void RecordResults(bool randomGame, string operation, int score, string difficulty, Stopwatch timer) +{ + GameResult currentResult = new GameResult(); + currentResult.GameType = randomGame ? "Random" : operation; + currentResult.Score = score; + currentResult.Difficulty = difficulty; + currentResult.Time = timer.Elapsed.ToString(@"mm\:ss"); + history.Add(currentResult); +} + +static int Calculate(string operation, int randomNum, int randomNum2) +{ + if (operation == "Addition") + return randomNum + randomNum2; + else if (operation == "Subtraction") + return randomNum - randomNum2; + else if (operation == "Multiplication") + return randomNum * randomNum2; + else + return randomNum / randomNum2; +} + +void ViewHistory() +{ + if (history.Count > 0) + { + Console.WriteLine($"{"Game Type", -15} {"Score", -6} {"Difficulty", -12} {"Time Elapsed", -12}"); + foreach (GameResult result in history) + Console.WriteLine($"{result.GameType, -15} {result.Score, -6} {result.Difficulty, -12} {result.Time, -12}"); + } + else + Console.WriteLine("No scores to display"); +} \ No newline at end of file