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