From 6fb0b5c01fd909961864a44657bc11dfa1bbbcb5 Mon Sep 17 00:00:00 2001 From: epvanhouten Date: Sat, 27 Feb 2021 17:46:24 -0600 Subject: [PATCH] Literal conversion of original Just taking the original BASIC program and converting it into C# without adding types or modernizing the control flow. --- 51 Hurkle/csharp/src/hurkle/Program.cs | 107 +++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 6 deletions(-) diff --git a/51 Hurkle/csharp/src/hurkle/Program.cs b/51 Hurkle/csharp/src/hurkle/Program.cs index a9cd0f60..9e768b08 100644 --- a/51 Hurkle/csharp/src/hurkle/Program.cs +++ b/51 Hurkle/csharp/src/hurkle/Program.cs @@ -11,8 +11,16 @@ namespace hurkle 10 PRINT TAB(33);"HURKLE" 20 PRINT TAB(15);"CREATIVE COMPUTING NORRISTOWN, NEW JERSEY" 30 PRINT;PRINT;PRINT + */ + Console.WriteLine(new string(' ', 33) + @"HURKLE"); + Console.WriteLine(new string(' ', 15) + @"CREATIVE COMPUTING NORRISTOWN, NEW JERSEY"); + /* 110 N=5 120 G=10 + */ + var N=5; + var G=10; + /* 210 PRINT 220 PRINT "A HURKLE IS HIDING ON A";G;"BY";G;"GRID. HOMEBASE" 230 PRINT "ON THE GRID IS POINT 0,0 AND ANY GRIDPOINT IS A" @@ -21,8 +29,31 @@ namespace hurkle 260 PRINT "AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE" 270 PRINT "DIRECTION TO GO TO LOOK FOR THE HURKLE." 280 PRINT + */ + // Using string formatting via the '$' string + Console.WriteLine(); + Console.WriteLine($"A HURKLE IS HIDING ON A {G} BY {G} GRID. HOMEBASE"); + Console.WriteLine(@"ON THE GRID IS POINT 0,0 AND ANY GRIDPOINT IS A"); + Console.WriteLine(@"PAIR OF WHOLE NUMBERS SEPERATED BY A COMMA. TRY TO"); + Console.WriteLine($"GUESS THE HURKLE'S GRIDPOINT. YOU GET {N} TRIES."); + Console.WriteLine(@"AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE"); + Console.WriteLine(@"DIRECTION TO GO TO LOOK FOR THE HURKLE."); + Console.WriteLine(); + + /* 285 A=INT(G*RND(1)) 286 B=INT(G*RND(1)) + */ + // Get a pseudo number generator + var randomSource = new Random(); + START: + // BASIC program was generating a float between 0 and 1 + // then multiplying by the size of the grid to to a number + // between 1 and 10. C# allows you to do that directly. + var A = randomSource.Next(0,G); + var B = randomSource.Next(0,G); + + /* 310 FOR K=1 TO N 320 PRINT "GUESS #";K; 330 INPUT X,Y @@ -31,31 +62,95 @@ namespace hurkle 360 GOSUB 610 370 PRINT 380 NEXT K + */ + for(var K=1;K<=N;K++) + { + Console.WriteLine($"GUESS #{K}"); + var inputLine = Console.ReadLine(); + var seperateStrings = inputLine.Split(',', 2, StringSplitOptions.TrimEntries); + var X = int.Parse(seperateStrings[0]); + var Y = int.Parse(seperateStrings[1]); + if(Math.Abs(X-A) + Math.Abs(Y-B) == 0) + { + /* + 500 REM + 510 PRINT + 520 PRINT "YOU FOUND HIM IN";K;GUESSES!" + 540 GOTO 440 + */ + Console.WriteLine(); + Console.WriteLine($"YOU FOUND HIM IN {K} GUESSES!"); + goto END; + } + + PrintInfo(X,Y,A,B); + } + + /* 410 PRINT 420 PRINT "SORRY, THAT'S;N;"GUESSES." 430 PRINT "THE HURKLE IS AT ";A;",";B + */ + Console.WriteLine(); + Console.WriteLine($"SORRY, THAT'S {N} GUESSES"); + Console.WriteLine($"THE HURKLE IS AT {A},{B}"); + /* 440 PRINT 450 PRINT "LET'S PLAY AGAIN. HURKLE IS HIDING." 460 PRINT 470 GOTO 285 - 500 REM - 510 PRINT - 520 PRINT "YOU FOUND HIM IN";K;GUESSES!" - 540 GOTO 440 + */ + END: + Console.WriteLine(); + Console.WriteLine("LET'S PLAY AGAIN. HURKLE IS HIDING"); + Console.WriteLine(); + goto START; + + /* + 999 END + */ + } + + private static void PrintInfo(int X, int Y, int A, int B) + { + + /* 610 PRINT "GO "; + */ + Console.Write("GO "); + /* 620 IF Y=B THEN 670 630 IF YB) + { + Console.Write("SOUTH"); + }else if(YA) + { + Console.Write("WEST"); + } + + Console.WriteLine(); + /* 720 PRINT 730 RETURN - 999 END */ } }