Skip to content
Open
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_v2/MathGame_v2.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Solution>
<Project Path="MathGame_v2/MathGame_v2.csproj" />
</Solution>
86 changes: 86 additions & 0 deletions MathGame_v2/MathGame_v2/GameEngine.cs
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
66 changes: 66 additions & 0 deletions MathGame_v2/MathGame_v2/Helper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
using MathGame_v2.Model;

namespace MathGame_v2
{
internal class Helper
{
internal static List<Game> 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;
}

}
}
10 changes: 10 additions & 0 deletions MathGame_v2/MathGame_v2/MathGame_v2.csproj
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>
51 changes: 51 additions & 0 deletions MathGame_v2/MathGame_v2/Menu.cs
Original file line number Diff line number Diff line change
@@ -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);

}
}
}
16 changes: 16 additions & 0 deletions MathGame_v2/MathGame_v2/Model/Game.cs
Original file line number Diff line number Diff line change
@@ -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
}
}
5 changes: 5 additions & 0 deletions MathGame_v2/MathGame_v2/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using MathGame_v2;

Menu menu = new();
string name = Helper.GetName();
menu.ShowMenu(name);
Loading