diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..1ff0c423 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 154e1272..0f463d12 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore # User-specific files *.rsuser @@ -29,6 +28,7 @@ x86/ bld/ [Bb]in/ [Oo]bj/ +[Oo]ut/ [Ll]og/ [Ll]ogs/ @@ -57,7 +57,6 @@ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ -# .NET project.lock.json project.fragment.lock.json artifacts/ diff --git a/MathGame.csproj b/MathGame.csproj new file mode 100644 index 00000000..ed9781c2 --- /dev/null +++ b/MathGame.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/MathGame.slnx b/MathGame.slnx new file mode 100644 index 00000000..b337a196 --- /dev/null +++ b/MathGame.slnx @@ -0,0 +1,3 @@ + + + diff --git a/Program.cs b/Program.cs new file mode 100644 index 00000000..7cf885e3 --- /dev/null +++ b/Program.cs @@ -0,0 +1,125 @@ +namespace MathGame +{ + internal class Program + { + static void Main(string[] args) + { + Qestion[] qestions = + [ + new Qestion("2 + 2", 4), + new Qestion("3 * 3", 9), + new Qestion("10 / 2", 5), + new Qestion("5 - 3", 2), + ]; + + List history = []; + + bool exit = false; + while (!exit) + { + Console.WriteLine("1 - Play"); + Console.WriteLine("2 - View History"); + Console.WriteLine("3 - Exit"); + Console.Write("Choose an option: "); + + string? choice = Console.ReadLine(); + + switch (choice) + { + case "1": + PlayGame(qestions, history); + break; + + case "2": + ShowHistory(history); + break; + + case "3": + exit = true; + break; + + default: + Console.WriteLine("Invalid option."); + break; + } + + Console.WriteLine(); + } + + Console.WriteLine("Thanks for playing!"); + } + + static void PlayGame(Qestion[] qestions, List history) + { + DisplayQestions(qestions); + var inputIndex = ChooseQestion(qestions); + + Console.WriteLine($"Answer this question {qestions[inputIndex].Text}: "); + string? answerInput = Console.ReadLine(); + + if (int.TryParse(answerInput, out int answer)) + { + bool correct = qestions[inputIndex].IsCorrect(answer); + Console.WriteLine(correct ? "Correct" : "Incorrect"); + + history.Add($"{DateTime.Now:G} | {qestions[inputIndex].Text} | Your answer: {answer} | {(correct ? "Correct" : "Incorrect")}"); + } + else + { + Console.WriteLine("Invalid integer."); + history.Add($"{DateTime.Now:G} | {qestions[inputIndex].Text} | Invalid answer"); + } + } + + static void ShowHistory(List history) + { + Console.WriteLine("History"); + Console.WriteLine("======="); + + if (history.Count == 0) + { + Console.WriteLine("No history yet."); + return; + } + + foreach (var item in history) + { + Console.WriteLine(item); + } + } + + static void DisplayQestions(Qestion[] qestions) + { + Console.WriteLine("Choose Question To Answer"); + Console.WriteLine("========================"); + for (int i = 0; i < qestions.Length; i++) + { + Console.WriteLine($"{i + 1}- What is {qestions[i].Text} ?"); + } + } + + static int ChooseQestion(Qestion[] qestions) + { + string? input = Console.ReadLine(); + + if (int.TryParse(input, out int result)) + { + if (result <= 0 || result > qestions.Length) + { + Console.WriteLine("Error: choose from range."); + return ChooseQestion(qestions); + } + + return result - 1; + } + + Console.WriteLine("Error: That is not a valid integer."); + return ChooseQestion(qestions); + } + } + + internal record Qestion(string Text, int Answer) + { + public bool IsCorrect(int answer) => Answer == answer; + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..310c96df --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# MathGame \ No newline at end of file