Skip to content
Closed
Show file tree
Hide file tree
Changes from 4 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/MathGame.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<Solution>
<Project Path="MathGame/MathGame.csproj" />
</Solution>
10 changes: 10 additions & 0 deletions MathGame/MathGame/MathGame.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>
159 changes: 159 additions & 0 deletions MathGame/MathGame/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
bool exitGame = false;
string? input;
List<int> scores = new List<int>();
const int NumberOfQuestionsPerGame = 5;
const int ScorePerQuestion = 10;
const int MaximumScore = ScorePerQuestion * NumberOfQuestionsPerGame;

do
{
Console.WriteLine("Main menu");
Console.WriteLine("Please select a game mode or type \"exit\" to close the app:");
Console.WriteLine("1. Addition game");
Console.WriteLine("2. Substraction game");
Console.WriteLine("3. Multiplication game");
Console.WriteLine("4. Division game");

bool validSelection;
do
{
input = Console.ReadLine();
bool inputNotEmpty = input != null && input.Length > 0;
validSelection = true;

if (inputNotEmpty)
{
string userSelection = input.ToLower();
int score;
switch (userSelection)
{
case "exit":
exitGame = true;
break;
case "1":
Console.Clear();
score = game(Operations.ADDITION);
scores.Add(score);
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
Console.Clear();
break;
case "2":
Console.Clear();
score = game(Operations.SUBSTRACTION);
scores.Add(score);
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
Console.Clear();
break;
case "3":
Console.Clear();
score = game(Operations.MULTIPLICATION);
scores.Add(score);
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
Console.Clear();
break;
case "4":
Console.Clear();
score = game(Operations.DIVISION);
scores.Add(score);
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
Console.Clear();
break;
default:
Console.WriteLine("Invalid selection please try again.");
validSelection = false;
break;
}
}
} while (!validSelection);
} while (!exitGame);

static List<int> getFactors(int num)
{
List<int> factors = new List<int>();

for (int i = 1; i <= num; i++)
{
if (num % i == 0)
{
factors.Add(i);
}
}

return factors;
}

static int game(Operations operation)
{
int score = 0;
char operationSymbol = ((char)operation);
int minNumber = 1;
int maxNumber = 9;

Random random = new Random();

for (int i = 0; i < NumberOfQuestionsPerGame; i++)
{
int number1 = random.Next(minNumber, maxNumber + 1);
int number2;
int expectedResult;
switch (operation)
{
case Operations.ADDITION:
number2 = random.Next(minNumber, maxNumber + 1);
expectedResult = number1 + number2;
break;
case Operations.SUBSTRACTION:
number2 = random.Next(minNumber, maxNumber + 1);
expectedResult = number1 - number2;
break;
case Operations.MULTIPLICATION:
number2 = random.Next(minNumber, maxNumber + 1);
expectedResult = number1 * number2;
break;
case Operations.DIVISION:
List<int> number1Factors = getFactors(number1);
int number2PositionInFactors = random.Next(0, number1Factors.Count);
number2 = number1Factors[number2PositionInFactors];

expectedResult = number1 / number2;
break;
default:
number1 = 1;
number2 = 1;
expectedResult = 0;
break;
}

Console.WriteLine($"Question {i + 1}/{NumberOfQuestionsPerGame}\nWhat is {number1} {operationSymbol} {number2} ?");

string? input = Console.ReadLine();
int userAnswer;

while (input == null || input.Length == 0 || !int.TryParse(input, out userAnswer))
{
Console.WriteLine("Your answer must be an integer number.");
input = Console.ReadLine();
}

if (userAnswer == expectedResult)
{
score += ScorePerQuestion;
}
Console.Clear();
}

Console.WriteLine($"Your score was {score}/{MaximumScore}");

return score;
}
enum Operations
{
ADDITION = '+',
SUBSTRACTION = '-',
MULTIPLICATION = '*',
DIVISION = '/'
}