mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-03 16:48:04 -08:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user