From d1cd4ba90928d711d7d42751b3f8c0ff0af45262 Mon Sep 17 00:00:00 2001 From: elhan3 Date: Fri, 4 Sep 2026 11:58:21 +0200 Subject: [PATCH] Solution to the Math Game project --- MathGame_v2/MathGame_v2.slnx | 3 + MathGame_v2/MathGame_v2/GameEngine.cs | 86 ++++++++++++++++++++++ MathGame_v2/MathGame_v2/Helper.cs | 66 +++++++++++++++++ MathGame_v2/MathGame_v2/MathGame_v2.csproj | 10 +++ MathGame_v2/MathGame_v2/Menu.cs | 51 +++++++++++++ MathGame_v2/MathGame_v2/Model/Game.cs | 16 ++++ MathGame_v2/MathGame_v2/Program.cs | 5 ++ 7 files changed, 237 insertions(+) create mode 100644 MathGame_v2/MathGame_v2.slnx create mode 100644 MathGame_v2/MathGame_v2/GameEngine.cs create mode 100644 MathGame_v2/MathGame_v2/Helper.cs create mode 100644 MathGame_v2/MathGame_v2/MathGame_v2.csproj create mode 100644 MathGame_v2/MathGame_v2/Menu.cs create mode 100644 MathGame_v2/MathGame_v2/Model/Game.cs create mode 100644 MathGame_v2/MathGame_v2/Program.cs diff --git a/MathGame_v2/MathGame_v2.slnx b/MathGame_v2/MathGame_v2.slnx new file mode 100644 index 00000000..5199d390 --- /dev/null +++ b/MathGame_v2/MathGame_v2.slnx @@ -0,0 +1,3 @@ + + + diff --git a/MathGame_v2/MathGame_v2/GameEngine.cs b/MathGame_v2/MathGame_v2/GameEngine.cs new file mode 100644 index 00000000..8e826d88 --- /dev/null +++ b/MathGame_v2/MathGame_v2/GameEngine.cs @@ -0,0 +1,86 @@ +using MathGame_v2.Model; + +namespace MathGame_v2 +{ + internal class GameEngine + { + internal void ChosenGame(string? chosenGame) + { + Console.Clear(); + Random random = new(); + int number1; + int number2; + int score = 0; + + string? mathOperation = chosenGame.ToLower() switch + { + "a" => "+", + "s" => "-", + "m" => "*", + "d" => "/" + }; + + for (int i = 0; i < 5; i++) + { + number1 = mathOperation != "/" ? random.Next(1, 9) : random.Next(1, 99); + number2 = mathOperation != "/" ? random.Next(1, 9) : random.Next(1, 99); + + if(mathOperation == "/") + { + int[] divisibleNumbers = Helper.GetDivisibleNumbers(); + number1 = divisibleNumbers[0]; + number2 = divisibleNumbers[1]; + } + + Console.WriteLine($"{number1} {mathOperation} {number2}"); + string? answer = Console.ReadLine(); + + answer = Helper.ValidateResult(answer); + + int correctAnswer = 0; + + switch (mathOperation) + { + case "+": + correctAnswer = number1 + number2; + break; + case "-": + correctAnswer = number1 - number2; + break; + case "*": + correctAnswer = number1 * number2; + break; + case "/": + correctAnswer = number1 / number2; + break; + } + + if (Int32.Parse(answer) == correctAnswer) + { + Console.WriteLine("Correct!"); + score++; } + else + { + Console.WriteLine($"Incorrect! Answer is {correctAnswer}"); + } + Console.WriteLine("Press any key for the next question."); + Console.ReadLine(); + if (i == 4) + { + Console.WriteLine($"Your score is {score}/{i + 1}"); + Helper.AddLog(GameType.Addition, score); + Console.WriteLine("Press any key to return to the menu."); + Console.ReadLine(); + } + + } + } + internal void ViewResultsHistory() + { + Console.Clear(); + Helper.ViewGameHistory(); + Console.WriteLine("Press any key to return to menu."); + Console.ReadLine(); + } + } +} diff --git a/MathGame_v2/MathGame_v2/Helper.cs b/MathGame_v2/MathGame_v2/Helper.cs new file mode 100644 index 00000000..e46ab046 --- /dev/null +++ b/MathGame_v2/MathGame_v2/Helper.cs @@ -0,0 +1,66 @@ +using MathGame_v2.Model; + +namespace MathGame_v2 +{ + internal class Helper + { + internal static List gamesList = new(); + + internal static void ViewGameHistory() + { + foreach(Game game in gamesList) + { + Console.WriteLine($"{game.Date} {game.Type} - {game.Score} pts"); + } + } + internal static void AddLog(GameType gameType, int gameScore) + { + gamesList.Add(new Game + { + Date = DateTime.Now, + Type = gameType, + Score = gameScore + }); + } + internal static int[] GetDivisibleNumbers() + { + + Random random = new(); + int number1 = random.Next(1, 99); + int number2 = random.Next(1, 99); + int[] result = new int[2]; + + while (number1 % number2 != 0) + { + number1 = random.Next(1, 99); + number2 = random.Next(1, 99); + } + result[0] = number1; + result[1] = number2; + return result; + } + + internal static string GetName() + { + Console.WriteLine("Please enter your name."); + var name = Console.ReadLine(); + while (string.IsNullOrEmpty(name)) + { + Console.WriteLine("Name can't be empty string."); + name = Console.ReadLine(); + } + return name; + } + + internal static string ValidateResult(string? result) + { + while (string.IsNullOrEmpty(result) || !Int32.TryParse(result, out _)) + { + Console.WriteLine("Result must be an integer."); + result = Console.ReadLine(); + } + return result; + } + + } +} diff --git a/MathGame_v2/MathGame_v2/MathGame_v2.csproj b/MathGame_v2/MathGame_v2/MathGame_v2.csproj new file mode 100644 index 00000000..ed9781c2 --- /dev/null +++ b/MathGame_v2/MathGame_v2/MathGame_v2.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/MathGame_v2/MathGame_v2/Menu.cs b/MathGame_v2/MathGame_v2/Menu.cs new file mode 100644 index 00000000..9b258f4d --- /dev/null +++ b/MathGame_v2/MathGame_v2/Menu.cs @@ -0,0 +1,51 @@ +namespace MathGame_v2 +{ + internal class Menu + { + internal void ShowMenu(string name) + { + Console.WriteLine($"Hello {name}! Welcome to the Math Games."); + + bool isGameOn = true; + do + { + Console.Clear(); + Console.WriteLine(@"Select game that you want to play: + a - Addition + s - Subtraction + m - Multiplication + d - Division + q - Leave the game + v - View results history"); + string? chosenGame = Console.ReadLine(); + GameEngine engine = new(); + + switch (chosenGame.ToLower()) + { + case "a": + engine.ChosenGame("a"); + break; + case "s": + engine.ChosenGame("s"); + break; + case "m": + engine.ChosenGame("m"); + break; + case "d": + engine.ChosenGame("d"); + break; + case "v": + engine.ViewResultsHistory(); + break; + case "q": + isGameOn = false; + break; + default: + Console.WriteLine("Bad input."); + break; + } + } while (isGameOn); + + } + } +} diff --git a/MathGame_v2/MathGame_v2/Model/Game.cs b/MathGame_v2/MathGame_v2/Model/Game.cs new file mode 100644 index 00000000..2d3a36a3 --- /dev/null +++ b/MathGame_v2/MathGame_v2/Model/Game.cs @@ -0,0 +1,16 @@ +namespace MathGame_v2.Model +{ + internal class Game + { + public DateTime Date { get; set; } + public GameType Type { get; set; } + public int Score { get; set; } + } + internal enum GameType + { + Addition, + Subtraction, + Multiplication, + Division + } +} diff --git a/MathGame_v2/MathGame_v2/Program.cs b/MathGame_v2/MathGame_v2/Program.cs new file mode 100644 index 00000000..2107f9c0 --- /dev/null +++ b/MathGame_v2/MathGame_v2/Program.cs @@ -0,0 +1,5 @@ +using MathGame_v2; + +Menu menu = new(); +string name = Helper.GetName(); +menu.ShowMenu(name); \ No newline at end of file