diff --git a/93_23_Matches/csharp/23Matches.cs b/93_23_Matches/csharp/23Matches.cs
new file mode 100644
index 00000000..f2aeeaf8
--- /dev/null
+++ b/93_23_Matches/csharp/23Matches.cs
@@ -0,0 +1,167 @@
+using System;
+
+namespace Program
+{
+ class Program
+ {
+
+ // Initialize 3 public variables so that they can be ascessed anywhere in the code
+ public static int numberOfMatches;
+ public static int numberOfMatchesRemovedByPlayer;
+ public static bool playerGoesFirst = false; // a flag to show if the player won the coin toss
+ static void Main(string[] args)
+ {
+ // Print introduction text
+
+ // Prints the title with 31 spaces placed in front of the text using the PadLeft() string function
+ Console.WriteLine("23 MATCHES".PadLeft(31));
+ Console.WriteLine("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY".PadLeft(15));
+
+ // Print 3 blank lines with \n escape sequence
+ Console.Write("\n\n\n");
+ Console.WriteLine(" THIS IS A GAME CALLED '23 MATCHES'.");
+ Console.Write("\n");
+
+ Console.WriteLine("WHEN IT IS YOUR TURN, YOU MAY TAKE ONE, TWO, OR THREE");
+ Console.WriteLine("MATCHES. THE OBJECT OF THE GAME IS NOT TO HAVE TO TAKE");
+ Console.WriteLine("THE LAST MATCH.");
+ Console.Write("\n");
+ Console.WriteLine("LET'S FLIP A COIN TO SEE WHO GOES FIRST.");
+ Console.WriteLine("IF IT COMES UP HEADS, I WILL WIN THE TOSS.");
+ Console.Write("\n");
+
+ // Set the number of matches to 23
+ numberOfMatches = 23;
+
+ // Create a random class object to generate the coin toss
+ Random random = new Random();
+ // Generates a random number between 0.0 and 1.0
+ // Multiplies that number by 2 and then
+ // Converts it into an integer giving either a 0 or a 1
+ int coinTossResult = (int)(2 * random.NextDouble());
+
+ if (coinTossResult == 1)
+ {
+ Console.WriteLine("TAILS! YOU GO FIRST. ");
+ // Sets the player coin toss flag to true
+ playerGoesFirst = true;
+ PlayerTurn();
+ }
+ else
+ {
+ Console.WriteLine("HEADS! I WIN! HA! HA!");
+ Console.WriteLine("PREPARE TO LOSE, MEATBALL-NOSE!!");
+ Console.Write("\n");
+ Console.WriteLine("I TAKE 2 MATCHES");
+ numberOfMatches = numberOfMatches - 2;
+ }
+
+ // loops the code until there is 1 or fewer matches
+ do
+ {
+ // Checks if the player has already gone
+ // because they won the coin toss
+ // if they have not then the player can go
+ if (playerGoesFirst == false)
+ {
+ Console.Write("THE NUMBER OF MATCHES IS NOW " + numberOfMatches);
+ PlayerTurn();
+ }
+ // sets the coint toss flag to false since
+ // this is only needed on the first loop of the code
+ playerGoesFirst = false;
+ ComputerTurn();
+ } while (numberOfMatches > 1);
+
+ }
+
+ static void PlayerTurn()
+ {
+ Console.WriteLine("\n");
+ Console.WriteLine("YOUR TURN -- YOU MAY TAKE 1, 2, OR 3 MATCHES.");
+ Console.Write("HOW MANY DO YOU WISH TO REMOVE ?? ");
+ // Get player input
+ numberOfMatchesRemovedByPlayer = ReadPlayerInput();
+ // If the input is invalid (not 1, 2, or 3)
+ // then ask the player to input again
+ while (numberOfMatchesRemovedByPlayer > 3 || numberOfMatchesRemovedByPlayer <= 0)
+ {
+ Console.WriteLine("VERY FUNNY! DUMMY!");
+ Console.WriteLine("DO YOU WANT TO PLAY OR GOOF AROUND?");
+ Console.Write("NOW, HOW MANY MATCHES DO YOU WANT ?? ");
+ numberOfMatchesRemovedByPlayer = ReadPlayerInput();
+ }
+
+ // Remove the player specified number of matches
+ numberOfMatches = numberOfMatches - numberOfMatchesRemovedByPlayer;
+
+ Console.WriteLine("THE ARE NOW " + numberOfMatches + " MATCHES REMAINING");
+ }
+ static void ComputerTurn()
+ {
+ // Initialize the numberOfMatchesRemovedByComputer
+ int numberOfMatchesRemovedByComputer = 0;
+ switch (numberOfMatches)
+ {
+ case 4:
+ numberOfMatchesRemovedByComputer = 3;
+ break;
+ case 3:
+ numberOfMatchesRemovedByComputer = 2;
+ break;
+ case 2:
+ numberOfMatchesRemovedByComputer = 1;
+ break;
+ case 1: case 0: // If the computer losses call this case
+ Console.WriteLine("YOU WON, FLOPPY EARS !");
+ Console.WriteLine("THING YOU'RE PRETTY SMART !");
+ Console.WriteLine("LETS PLAY AGAIN AND I'LL BLOW YOUR SHOES OFF !!");
+ break;
+ default: // If there are > than 4 matches call this case
+ numberOfMatchesRemovedByComputer = 4 - numberOfMatchesRemovedByPlayer;
+ break;
+ }
+ // If the numberOfMatchesRemovedByComputer has been updated run this code,
+ // if not them the computer has lost
+ if (numberOfMatchesRemovedByComputer != 0)
+ {
+ Console.WriteLine("MY TURN ! I REMOVE " + numberOfMatchesRemovedByComputer + " MATCHES");
+ numberOfMatches = numberOfMatches - numberOfMatchesRemovedByComputer;
+ // If there are less than or equal to 1 matches
+ // then the player has lost
+ if (numberOfMatches <= 1)
+ {
+ Console.Write("\n");
+ Console.WriteLine("YOU POOR BOOB! YOU TOOK THE LAST MATCH! I GOTCHA!!");
+ Console.WriteLine("HA ! HA ! I BEAT YOU !!!");
+ Console.Write("\n");
+ Console.WriteLine("GOOD BYE LOSER!");
+ }
+ }
+ }
+
+
+ // This method handles the player input
+ // and will handle inncorrect input
+ static int ReadPlayerInput()
+ {
+ // Read user input and convert to integer
+ int playerInput = 0;
+ // Try to read player input
+ try
+ {
+ playerInput = Convert.ToInt32(Console.ReadLine());
+ }
+ // If there is an error in the player input
+ catch (System.Exception)
+ {
+ Console.WriteLine("?REENTER");
+ Console.Write("?? ");
+ // Ask the player to reenter their input
+ playerInput = ReadPlayerInput();
+ }
+ return playerInput;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/93_23_Matches/csharp/23matches.csproj b/93_23_Matches/csharp/23matches.csproj
deleted file mode 100644
index 11091f71..00000000
--- a/93_23_Matches/csharp/23matches.csproj
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- Exe
- netcoreapp3.1
- _23matches
-
-
-
diff --git a/93_23_Matches/csharp/23matches.sln b/93_23_Matches/csharp/23matches.sln
deleted file mode 100644
index 78fce16e..00000000
--- a/93_23_Matches/csharp/23matches.sln
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.32002.261
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "23matches", "23matches.csproj", "{9DBE7354-0749-4750-9224-5F9F95C64905}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9DBE7354-0749-4750-9224-5F9F95C64905}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9DBE7354-0749-4750-9224-5F9F95C64905}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9DBE7354-0749-4750-9224-5F9F95C64905}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9DBE7354-0749-4750-9224-5F9F95C64905}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {0A87AE2F-68AC-4354-9C8D-578209D41174}
- EndGlobalSection
-EndGlobal
diff --git a/93_23_Matches/csharp/Goto.Program.cs b/93_23_Matches/csharp/Goto.Program.cs
deleted file mode 100644
index e23be8a4..00000000
--- a/93_23_Matches/csharp/Goto.Program.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System;
-using System.Threading;
-
-namespace _23matches
-{
- class Program
- {
- ///
- /// Mimics the "goto" version of the original program
- ///
- ///
- static void Main(string[] args)
- {
- Random random = new Random();
- StartNewGame:
- Console.WriteLine("23 MATCHES".PadLeft(31));
- Console.WriteLine("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY".PadLeft(15));
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine("THIS IS A GAME CALLED '23 MATCHES'.");
- Console.WriteLine();
- Console.WriteLine("WHEN IT IS YOUR TURN, YOU MAY TAKE ONE, TWO, OR THREE");
- Console.WriteLine("MATCHES. THE OBJECT OF THE GAME IS NOT TO HAVE TO TAKE");
- Console.WriteLine("THE LAST MATCH.");
- Console.WriteLine();
- Console.WriteLine("Input exit to close the program.");
- Console.WriteLine("Input cls Screen Clear.");
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine("LET'S FLIP A COIN TO SEE WHO GOES FIRST.");
- Console.WriteLine("IF IT COMES UP HEADS, I WILL WIN THE TOSS.");
- Console.WriteLine();
- StartTheGame:
- string command;
- int N = 23;
- int K = 0;
- int Q = random.Next(2);
- if (Q == 1)
- goto ComputerFirst;
- else
- goto PlayerFirst;
-
- ComputerFirst:
- Console.WriteLine("HEADS! I WIN! HA! HA!");
- Console.WriteLine("PREPARE TO LOSE, MEATBALL-NOSE!!");
- Console.WriteLine();
- int ain = random.Next(1, 3);
- Console.WriteLine($"I TAKE {ain} MATCHES");
- N = N - ain;
- goto PlayersProceed;
-
- PlayerFirst:
- Console.WriteLine("TAILS! YOU GO FIRST. ");
- Console.WriteLine();
- goto PlayersSpeak;
-
- PlayersProceed:
- Console.WriteLine($"THE NUMBER OF MATCHES IS NOW {N}");
- Console.WriteLine();
- Console.WriteLine("YOUR TURN -- YOU MAY TAKE 1, 2 OR 3 MATCHES.");
- Console.WriteLine("HOW MANY DO YOU WISH TO REMOVE ");
- goto PlayersSpeak;
-
- PlayersSpeak:
- command = Console.ReadLine().ToLower();
- if (command.Equals("exit"))
- {
- System.Diagnostics.Process tt = System.Diagnostics.Process.GetProcessById(System.Diagnostics.Process.GetCurrentProcess().Id);
- tt.Kill();
- }
- if (command.Equals("cls"))
- {
- Console.Clear();
- goto PlayersProceed;
- }
- try
- {
- K = Convert.ToInt32(command);
- }
- catch (System.Exception)
- {
- goto PlayerInputError;
- }
- if (K > 3 || K <= 0)
- goto PlayerInputError;
- N = N - K;
- Console.WriteLine($"THERE ARE NOW {N} MATCHES REMAINING.");
- if (N == 4 || N == 3 || N == 2)
- goto TheComputerSpeaks;
- else if (N <= 1)
- goto ThePlayerWins;
- else
- goto TheComputerSpeaks;
-
- TheComputerSpeaks:
- int Z = 4 - K;
- Console.WriteLine($"MY TURN ! I REMOVE {Z} MATCHES");
- N = N - Z;
- if (N <= 1)
- goto TheComputerWins;
- else
- goto PlayersProceed;
-
- PlayerInputError:
- Console.WriteLine("VERY FUNNY! DUMMY!");
- Console.WriteLine("DO YOU WANT TO PLAY OR GOOF AROUND?");
- Console.WriteLine("NOW, HOW MANY MATCHES DO YOU WANT ");
- goto PlayersSpeak;
- ThePlayerWins:
- Console.WriteLine("YOU WON, FLOPPY EARS !");
- Console.WriteLine("THINK YOU'RE PRETTY SMART !");
- Console.WriteLine("LETS PLAY AGAIN AND I'LL BLOW YOUR SHOES OFF !!");
- Console.WriteLine();
- Console.WriteLine();
- goto StartTheGame;
- TheComputerWins:
- Console.WriteLine();
- Console.WriteLine("YOU POOR BOOB! YOU TOOK THE LAST MATCH! I GOTCHA!!");
- Console.WriteLine("HA ! HA ! I BEAT YOU !!!");
- Console.WriteLine();
- Console.WriteLine("GOOD BYE LOSER!");
- Console.WriteLine();
- Console.WriteLine();
- goto StartNewGame;
-
- }
- }
-}
diff --git a/93_23_Matches/csharp/ObjectOrientedVersion.Program.cs b/93_23_Matches/csharp/ObjectOrientedVersion.Program.cs
deleted file mode 100644
index 7b88d7b7..00000000
--- a/93_23_Matches/csharp/ObjectOrientedVersion.Program.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using System;
-using System.Threading;
-
-namespace _23matches
-{
- class ObjectOrientedVersion_Program
- {
- ///
- /// Object-oriented version
- ///
- ///
- static void Main_Two(string[] args)
- {
- Game game = new Game();
- game.GameRun();
- }
- }
- public class Game
- {
- string command;
- int N;
- int K;
- Random random = new Random();
- public void GameRun()
- {
- StartNewGame();
- StartTheGame();
- }
- void StartNewGame()
- {
- Console.WriteLine("23 MATCHES".PadLeft(31));
- Console.WriteLine("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY".PadLeft(15));
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine("THIS IS A GAME CALLED '23 MATCHES'.");
- Console.WriteLine();
- Console.WriteLine("WHEN IT IS YOUR TURN, YOU MAY TAKE ONE, TWO, OR THREE");
- Console.WriteLine("MATCHES. THE OBJECT OF THE GAME IS NOT TO HAVE TO TAKE");
- Console.WriteLine("THE LAST MATCH.");
- Console.WriteLine();
- Console.WriteLine("Input exit to close the program.");
- Console.WriteLine("Input cls Screen Clear.");
- Console.WriteLine();
- Console.WriteLine();
- Console.WriteLine("LET'S FLIP A COIN TO SEE WHO GOES FIRST.");
- Console.WriteLine("IF IT COMES UP HEADS, I WILL WIN THE TOSS.");
- Console.WriteLine();
- }
- void StartTheGame()
- {
- N = 23;
- K = 0;
- int Q = random.Next(2);
- if (Q == 1)
- ComputerFirst();
- else
- {
- PlayerFirst();
- }
- }
- void ComputerFirst()
- {//210
- Console.WriteLine("HEADS! I WIN! HA! HA!");
- Console.WriteLine("PREPARE TO LOSE, MEATBALL-NOSE!!");
- Console.WriteLine();
- int ain = random.Next(1, 3);
- Console.WriteLine($"I TAKE {ain} MATCHES");
- N = N - ain;
- PlayersProceed();
- }
- void PlayerFirst()
- {
- Console.WriteLine("TAILS! YOU GO FIRST. ");
- Console.WriteLine();
- PlayersSpeak();
- }
- void PlayersProceed()
- {
- Console.WriteLine($"THE NUMBER OF MATCHES IS NOW {N}");
- Console.WriteLine();
- PlayersSpeak();
- }
- void RemindsPlayersToEnter()
- {
- Console.WriteLine("YOUR TURN -- YOU MAY TAKE 1, 2 OR 3 MATCHES.");
- Console.WriteLine("HOW MANY DO YOU WISH TO REMOVE ");
- }
- void PlayersSpeak()
- {
- RemindsPlayersToEnter();
- command = Console.ReadLine().ToLower();
- if (command.Equals("exit"))
- {
- System.Diagnostics.Process tt = System.Diagnostics.Process.GetProcessById(System.Diagnostics.Process.GetCurrentProcess().Id);
- tt.Kill();
- }
- if (command.Equals("cls"))
- {
- Console.Clear();
- PlayersSpeak();
- }
- try
- {
- K = Convert.ToInt32(command);
- }
- catch (System.Exception)
- {
- PlayerInputError();
- }
- if (K > 3 || K <= 0)
- PlayerInputError();
- N = N - K;
- Console.WriteLine($"THERE ARE NOW {N} MATCHES REMAINING.");
- if (N == 4 || N == 3 || N == 2)
- TheComputerSpeaks(N);
- else if (N <= 1)
- ThePlayerWins();
- else
- TheComputerSpeaks(4 - K);
-
- }
- void PlayerInputError()
- {
- Console.WriteLine("VERY FUNNY! DUMMY!");
- Console.WriteLine("DO YOU WANT TO PLAY OR GOOF AROUND?");
- Console.WriteLine("NOW, HOW MANY MATCHES DO YOU WANT ");
- PlayersSpeak();
- }
- void TheComputerSpeaks(int ain)
- {
- int Z = ain;
- Console.WriteLine($"MY TURN ! I REMOVE {Z} MATCHES");//390
- N = N - Z;
- if (N <= 1)
- TheComputerWins();
- else
- PlayersProceed();
- }
- void ThePlayerWins()
- {
- Console.WriteLine("YOU WON, FLOPPY EARS !");
- Console.WriteLine("THINK YOU'RE PRETTY SMART !");
- Console.WriteLine("LETS PLAY AGAIN AND I'LL BLOW YOUR SHOES OFF !!");
- Console.WriteLine();
- Console.WriteLine();
- StartTheGame();
- }
- void TheComputerWins()
- {
- Console.WriteLine();
- Console.WriteLine("YOU POOR BOOB! YOU TOOK THE LAST MATCH! I GOTCHA!!");
- Console.WriteLine("HA ! HA ! I BEAT YOU !!!");
- Console.WriteLine();
- Console.WriteLine("GOOD BYE LOSER!");
- Console.WriteLine();
- Console.WriteLine();
- GameRun();
- }
- }
-}
diff --git a/93_23_Matches/csharp/README.md b/93_23_Matches/csharp/README.md
deleted file mode 100644
index fd759c06..00000000
--- a/93_23_Matches/csharp/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Original source downloaded [from Vintage Basic](http://www.vintage-basic.net/games.html)
-
-Conversion to [Microsoft C#](https://docs.microsoft.com/en-us/dotnet/csharp/)
-
-The program is available in two versions, a "goto" version that mimics the original program and an "object-oriented" version.
diff --git a/93_23_Matches/csharp/csharp.csproj b/93_23_Matches/csharp/csharp.csproj
new file mode 100644
index 00000000..74abf5c9
--- /dev/null
+++ b/93_23_Matches/csharp/csharp.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+