diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic.slnx b/MathGame.DzemalKurtic/MathGame.DzemalKurtic.slnx new file mode 100644 index 00000000..1fdf2b7a --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic.slnx @@ -0,0 +1,3 @@ + + + diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic/GameEngine.cs b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/GameEngine.cs new file mode 100644 index 00000000..0011f204 --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/GameEngine.cs @@ -0,0 +1,173 @@ +using MathGame.DzemalKurtic.Models; + +namespace MathGame.DzemalKurtic +{ + internal class GameEngine + { + internal void DivisionGame(string message) + { + var score = 0; + + for (int i = 0; i < 5; i++) + { + Console.Clear(); + Console.WriteLine(message); + + var divisionNumbers = Helpers.GetDivisionNumbers(); + var firstNumber = divisionNumbers[0]; + var secondNumber = divisionNumbers[1]; + + Console.WriteLine($"{firstNumber} / {secondNumber}"); + var result = Console.ReadLine(); + result = Helpers.ValidateResult(result); + + if (int.Parse(result) == firstNumber / secondNumber) + { + Console.WriteLine("You answer was correct! Type any key for the next question"); + Console.ReadLine(); + score++; + } + else + { + Console.WriteLine("Your anwser was incorrect! Type any key for the next question"); + Console.ReadLine(); + } + + if (i == 4) + { + Console.WriteLine($"Game over. Your final score is {score}. Press any key to go back to the menu."); + Console.ReadLine(); + } + } + Helpers.AddToHistory(score, GameType.Division); + } + + internal void MultiplicationGame(string message) + { + Console.WriteLine(message); + + var random = new Random(); + var score = 0; + int firstNumber; + int secondNumber; + + for (int i = 0; i < 5; i++) + { + Console.Clear(); + Console.WriteLine(message); + + firstNumber = random.Next(1, 9); + secondNumber = random.Next(1, 9); + Console.WriteLine($"{firstNumber} * {secondNumber}"); + + var result = Console.ReadLine(); + result = Helpers.ValidateResult(result); + + if (int.Parse(result) == firstNumber * secondNumber) + { + Console.WriteLine("You answer was correct! Type any key for the next question"); + Console.ReadLine(); + score++; + } + else + { + Console.WriteLine("Your anwser was incorrect! Type any key for the next question"); + Console.ReadLine(); + } + + if (i == 4) + { + Console.WriteLine($"Game over. Your final score is {score}. Press any key to go back to the menu."); + Console.ReadLine(); + } + } + Helpers.AddToHistory(score, GameType.Multiplication); + } + + internal void SubtractionGame(string message) + { + Console.WriteLine(message); + + var random = new Random(); + var score = 0; + int firstNumber; + int secondNumber; + + for (int i = 0; i < 5; i++) + { + Console.Clear(); + Console.WriteLine(message); + + firstNumber = random.Next(1, 9); + secondNumber = random.Next(1, 9); + Console.WriteLine($"{firstNumber} - {secondNumber}"); + + var result = Console.ReadLine(); + result = Helpers.ValidateResult(result); + + if (int.Parse(result) == firstNumber - secondNumber) + { + Console.WriteLine("You answer was correct! Type any key for the next question"); + Console.ReadLine(); + score++; + } + else + { + Console.WriteLine("Your anwser was incorrect! Type any key for the next question"); + Console.ReadLine(); + } + + if (i == 4) + { + Console.WriteLine($"Game over. Your final score is {score}. Press any key to go back to the menu."); + Console.ReadLine(); + } + } + + Helpers.AddToHistory(score, GameType.Subtraction); + } + + internal void AdditionGame(string message) + { + Console.WriteLine(message); + + var random = new Random(); + var score = 0; + int firstNumber; + int secondNumber; + + for (int i = 0; i < 5; i++) + { + Console.Clear(); + Console.WriteLine(message); + + firstNumber = random.Next(1, 9); + secondNumber = random.Next(1, 9); + Console.WriteLine($"{firstNumber} + {secondNumber}"); + + var result = Console.ReadLine(); + result = Helpers.ValidateResult(result); + + if (int.Parse(result) == firstNumber + secondNumber) + { + Console.WriteLine("You answer was correct! Type any key for the next question"); + Console.ReadLine(); + score++; + } + else + { + Console.WriteLine("Your anwser was incorrect! Type any key for the next question"); + Console.ReadLine(); + } + + if (i == 4) + { + Console.WriteLine($"Game over. Your final score is {score}. Press any key to go back to the menu."); + Console.ReadLine(); + } + } + + Helpers.AddToHistory(score, GameType.Addition); + } + } +} diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Helpers.cs b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Helpers.cs new file mode 100644 index 00000000..7052a06d --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Helpers.cs @@ -0,0 +1,77 @@ +using MathGame.DzemalKurtic.Models; + +namespace MathGame.DzemalKurtic +{ + internal class Helpers + { + internal static List games = new List(); + internal static void PrintGames() + { + Console.Clear(); + Console.WriteLine("Game History"); + Console.WriteLine("----------------"); + foreach (var game in games) + { + Console.WriteLine($"{game.Date} - {game.Type}: {game.Score}pts"); + } + Console.WriteLine("----------------"); + Console.WriteLine("Press any key to go back to main menu."); + Console.ReadLine(); + } + + internal static void AddToHistory(int gameScore, GameType gameType) + { + games.Add(new Game + { + Date = DateTime.Now, + Score = gameScore, + Type = gameType + }); + } + + internal static int[] GetDivisionNumbers() + { + var random = new Random(); + var firstNumber = random.Next(0, 99); + var secondNumber = random.Next(0, 99); + + var result = new int[2]; + + while (firstNumber % secondNumber != 0) + { + firstNumber = random.Next(1, 99); + secondNumber = random.Next(1, 99); + } + + result[0] = firstNumber; + result[1] = secondNumber; + + return result; + } + + internal static string GetName() + { + Console.WriteLine("Please type your name"); + var name = Console.ReadLine(); + + while (string.IsNullOrEmpty(name)) + { + Console.WriteLine("Name can't be empty"); + name = Console.ReadLine(); + } + + return name; + } + + internal static string ValidateResult(string? result) + { + while (string.IsNullOrEmpty(result) || !Int32.TryParse(result, out _)) + { + Console.WriteLine("Your answer needs to be an integer. Try again."); + result = Console.ReadLine(); + } + + return result; + } + } +} diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic/MathGame.DzemalKurtic.csproj b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/MathGame.DzemalKurtic.csproj new file mode 100644 index 00000000..ed9781c2 --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/MathGame.DzemalKurtic.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Menu.cs b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Menu.cs new file mode 100644 index 00000000..c2e40ceb --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Menu.cs @@ -0,0 +1,60 @@ +namespace MathGame.DzemalKurtic +{ + internal class Menu + { + GameEngine gameEngine = new(); + internal void ShowMenu(string? name, DateTime date) + { + Console.Clear(); + Console.WriteLine($"Hello {name}. It's {date}. This is your math's game. That's great that you're working on improving yourself"); + Console.WriteLine("Press any key to show menu"); + Console.ReadLine(); + Console.WriteLine("\n"); + + bool isGameOn = true; + + do + { + Console.Clear(); + Console.WriteLine($@"What game would you like to play? Choose from options below: + V - View Previous Games + A - Addition + S - Subtraction + M - Multiplication + D - Division + Q - Quit the program"); + + Console.WriteLine(); + + var gameSelected = Console.ReadLine()?.Trim().ToLower(); + + switch (gameSelected) + { + case "v": + Helpers.PrintGames(); + break; + case "a": + gameEngine.AdditionGame("Addition game"); + break; + case "s": + gameEngine.SubtractionGame("Subtraction game"); + break; + case "m": + gameEngine.MultiplicationGame("Multiplication game"); + break; + case "d": + gameEngine.DivisionGame("Division game"); + break; + case "q": + Console.WriteLine("Goodbye"); + isGameOn = false; + break; + default: + Console.WriteLine("Invalid input"); + break; + } + } while (isGameOn); + } + + } +} diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Models/Game.cs b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Models/Game.cs new file mode 100644 index 00000000..a0811b8b --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Models/Game.cs @@ -0,0 +1,19 @@ +namespace MathGame.DzemalKurtic.Models +{ + internal class Game + { + internal DateTime Date { get; set; } + + internal int Score { get; set; } + + internal GameType Type { get; set; } + } + + internal enum GameType + { + Addition, + Subtraction, + Multiplication, + Division + } +} diff --git a/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Program.cs b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Program.cs new file mode 100644 index 00000000..22e2abd0 --- /dev/null +++ b/MathGame.DzemalKurtic/MathGame.DzemalKurtic/Program.cs @@ -0,0 +1,16 @@ +namespace MathGame.DzemalKurtic +{ + internal class Program + { + static void Main(string[] args) + { + var menu = new Menu(); + + string? name = Helpers.GetName(); + + var date = DateTime.UtcNow; + + menu.ShowMenu(name, date); + } + } +} \ No newline at end of file