Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions MathGame.DzemalKurtic/MathGame.DzemalKurtic.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Solution>
<Project Path="MathGame.DzemalKurtic/MathGame.DzemalKurtic.csproj" />
</Solution>
173 changes: 173 additions & 0 deletions MathGame.DzemalKurtic/MathGame.DzemalKurtic/GameEngine.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
77 changes: 77 additions & 0 deletions MathGame.DzemalKurtic/MathGame.DzemalKurtic/Helpers.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using MathGame.DzemalKurtic.Models;

namespace MathGame.DzemalKurtic
{
internal class Helpers
{
internal static List<Game> games = new List<Game>();
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;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>
60 changes: 60 additions & 0 deletions MathGame.DzemalKurtic/MathGame.DzemalKurtic/Menu.cs
Original file line number Diff line number Diff line change
@@ -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);
}

}
}
19 changes: 19 additions & 0 deletions MathGame.DzemalKurtic/MathGame.DzemalKurtic/Models/Game.cs
Original file line number Diff line number Diff line change
@@ -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
}
}
16 changes: 16 additions & 0 deletions MathGame.DzemalKurtic/MathGame.DzemalKurtic/Program.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
}