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 + + +