From d2e2b920f1fced0d6d3c049e349c3b8017718a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=8C=AF=E8=80=80?= Date: Sun, 9 Jan 2022 23:54:29 +0800 Subject: [PATCH] 93_23_Matches\csharp The program is available in two versions, a "goto" version that mimics the original program and an "object-oriented" version. --- 93_23_Matches/csharp/23matches.csproj | 9 + 93_23_Matches/csharp/23matches.sln | 25 +++ 93_23_Matches/csharp/Goto.Program.cs | 129 ++++++++++++++ .../csharp/ObjectOrientedVersion.Program.cs | 161 ++++++++++++++++++ 93_23_Matches/csharp/README.md | 2 + 5 files changed, 326 insertions(+) create mode 100644 93_23_Matches/csharp/23matches.csproj create mode 100644 93_23_Matches/csharp/23matches.sln create mode 100644 93_23_Matches/csharp/Goto.Program.cs create mode 100644 93_23_Matches/csharp/ObjectOrientedVersion.Program.cs diff --git a/93_23_Matches/csharp/23matches.csproj b/93_23_Matches/csharp/23matches.csproj new file mode 100644 index 00000000..11091f71 --- /dev/null +++ b/93_23_Matches/csharp/23matches.csproj @@ -0,0 +1,9 @@ + + + + Exe + netcoreapp3.1 + _23matches + + + diff --git a/93_23_Matches/csharp/23matches.sln b/93_23_Matches/csharp/23matches.sln new file mode 100644 index 00000000..78fce16e --- /dev/null +++ b/93_23_Matches/csharp/23matches.sln @@ -0,0 +1,25 @@ + +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 new file mode 100644 index 00000000..e23be8a4 --- /dev/null +++ b/93_23_Matches/csharp/Goto.Program.cs @@ -0,0 +1,129 @@ +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 new file mode 100644 index 00000000..7b88d7b7 --- /dev/null +++ b/93_23_Matches/csharp/ObjectOrientedVersion.Program.cs @@ -0,0 +1,161 @@ +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 index 4daabb5c..0f4d812a 100644 --- a/93_23_Matches/csharp/README.md +++ b/93_23_Matches/csharp/README.md @@ -1,3 +1,5 @@ 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. \ No newline at end of file