Line-by-line-as-literally-as-possible conversion from BASIC to Ruby

Excluding the direction-finding logic.

Ruby lacks a GOTO or even a way to "break" out of two loops instead of
one, necessitating the use of variables and subroutines that the
original program lacked.
This commit is contained in:
Jamie McCarthy
2021-03-01 08:54:05 -06:00
parent 880fac2e3f
commit b4254488bd

View File

@@ -1,51 +1,66 @@
10 PRINT TAB(33);"HURKLE"
20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
30 PRINT:PRINT:PRINT
110 N=5
120 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 IN THE SOUTHWEST CORNER,"
235 PRINT "AND ANY POINT ON THE GRID IS DESIGNATED BY A"
240 PRINT "PAIR OF WHOLE NUMBERS SEPERATED BY A COMMA. THE FIRST"
245 PRINT "NUMBER IS THE HORIZONTAL POSITION AND THE SECOND NUMBER"
246 PRINT "IS THE VERTICAL POSITION. YOU MUST TRY TO"
250 PRINT "GUESS THE HURKLE'S GRIDPOINT. YOU GET";N;"TRIES."
260 PRINT "AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE"
270 PRINT "DIRECTION TO GO TO LOOK FOR THE HURKLE."
280 PRINT
285 A=INT(G*RND(1))
286 B=INT(G*RND(1))
310 FOR K=1 TO N
320 PRINT "GUESS #";K;
330 INPUT X,Y
340 IF ABS(X-A)+ABS(Y-B)=0 THEN 500
350 REM PRINT INFO
360 GOSUB 610
370 PRINT
380 NEXT K
410 PRINT
420 PRINT "SORRY, THAT'S";N;"GUESSES."
430 PRINT "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
610 PRINT "GO ";
620 IF Y=B THEN 670
630 IF Y<B THEN 660
640 PRINT "SOUTH";
650 GOTO 670
660 PRINT "NORTH";
670 IF X=A THEN 720
680 IF X<A THEN 710
690 PRINT "WEST";
700 GOTO 720
710 PRINT "EAST";
720 PRINT
730 RETURN
999 END
puts " " * 33 + "HURKLE"
puts " " * 15 + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
3.times { puts }
$n = 5
$g = 10
puts
puts "A HURKLE IS HIDING ON A " + $g.to_s + " BY " + $g.to_s + " GRID. HOMEBASE"
puts "ON THE GRID IS POINT 0,0 IN THE SOUTHWEST CORNER,"
puts "AND ANY POINT ON THE GRID IS DESIGNATED BY A"
puts "PAIR OF WHOLE NUMBERS SEPERATED BY A COMMA. THE FIRST"
puts "NUMBER IS THE HORIZONTAL POSITION AND THE SECOND NUMBER"
puts "IS THE VERTICAL POSITION. YOU MUST TRY TO"
puts "GUESS THE HURKLE'S GRIDPOINT. YOU GET " + $n.to_s + " TRIES."
puts "AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE"
puts "DIRECTION TO GO TO LOOK FOR THE HURKLE."
puts
def main
loop do
$a = rand($g).floor
$b = rand($g).floor
found = false
(1..$n).each do |k|
print "GUESS # " + k.to_s + " "
print "? "
x, y = gets.chomp.split(",").map(&:to_i)
if (x-$a).abs + (y-$b).abs == 0
you_found_him(k)
found = true
break
end
say_where_to_go(x, y)
puts
end
if not found
puts
puts "SORRY, THAT'S " + $n.to_s + " GUESSES."
puts "THE HURKLE IS AT " + $a.to_s + "," + $b.to_s
end
puts
puts "LET'S PLAY AGAIN, HURKLE IS HIDING."
puts
end
end
def you_found_him(k)
puts
puts "YOU FOUND HIM IN " + k.to_s + " GUESSES!"
end
def say_where_to_go(x, y)
print "GO "
#620 IF Y=B THEN 670
#630 IF Y<B THEN 660
print "SOUTH"
#650 GOTO 670
print "NORTH"
#670 IF X=A THEN 720
#680 IF X<A THEN 710
print "WEST"
#700 GOTO 720
print "EAST"
puts
end
main