Hunt the Hurkle: Another Tiny BASIC game
Sunday, 11th August 2019
It looks like I jumped in at the deep end with Hunt the Wumpus. Simple as it is, when I chose it as a sub-project I hadn't realised that it's very much more complex than Hunt the Hurkle. It's taken me barely half an hour to develop a Hunt the Hurkle game, producing versions for both a modern compiler and the original interpreter. The entire program, stripped of comments, weighs in at 34 lines instead of the 182 of Wumpus. First I'll give the readable version of the code:
REM REM Hunt the Hurkle REM A Demonstration Program for Tiny BASIC REM REM --- Variables REM G: hurkle column REM H: hurkle row REM M: moves taken REM S: random number seed REM X: player guess column REM Y: player guess row REM --- Initialise the random number generator PRINT "Think of a number." INPUT S REM --- Initialise the game GOSUB 200 LET G=R-(R/10*10) GOSUB 200 LET H=R-(R/10*10) LET M=0 REM --- Input player guess 10 PRINT "Where is the hurkle? Enter column then row." INPUT X,Y IF X>=0 THEN IF X<=9 THEN IF Y>=0 THEN IF Y<=9 THEN GOTO 20 PRINT "That location is off the grid!" GOTO 10 REM --- Process player guess 20 LET M=M+1 PRINT "The Hurkle is..." IF G<X THEN IF H<Y THEN PRINT "...to the northwest." IF G=X THEN IF H<Y THEN PRINT "...to the north." IF G>X THEN IF H<Y THEN PRINT "...to the northeast." IF G>X THEN IF H=Y THEN PRINT "...to the east." IF G>X THEN IF H>Y THEN PRINT "...to the southeast." IF G=X THEN IF H>Y THEN PRINT "...to the south." IF G<X THEN IF H>Y THEN PRINT "...to the southwest." IF G<X THEN IF H=Y THEN PRINT "...to the west." IF G=X THEN IF H=Y THEN GOTO 40 IF M>6 THEN GOTO 50 PRINT "You have taken ",M," turns so far." GOTO 10 REM --- Player has won 40 PRINT "...RIGHT HERE!" PRINT "You took ",M," turns to find it." END REM --- Player has lost 50 PRINT "You have taken too long over this. You lose!" END REM --- Random number generator 200 LET S=(42*S+127)-((42*S+127)/126*126) LET R=S RETURN
I paid more attention to the choice of line numbers in this game than I did in Wumpus, to ensure that the line numbers would fall within the limits of the original interpreter without tedious renumbering. Here's the version as it would run on the original interpreter.
1 PRINT "Think of a number." 2 INPUT S 3 GOSUB 200 4 LET G=R-(R/10*10) 5 GOSUB 200 6 LET H=R-(R/10*10) 7 LET M=0 10 PRINT "Where is the hurkle? Enter column then row." 11 INPUT X,Y 12 IF X>=0 THEN IF X<=9 THEN IF Y>=0 THEN IF Y<=9 THEN GOTO 20 13 PRINT "That location is off the grid!" 14 GOTO 10 20 LET M=M+1 21 PRINT "The Hurkle is..." 22 IF G<X THEN IF H<Y THEN PRINT "...to the northwest." 23 IF G=X THEN IF H<Y THEN PRINT "...to the north." 24 IF G>X THEN IF H<Y THEN PRINT "...to the northeast." 25 IF G>X THEN IF H=Y THEN PRINT "...to the east." 26 IF G>X THEN IF H>Y THEN PRINT "...to the southeast." 27 IF G=X THEN IF H>Y THEN PRINT "...to the south." 28 IF G<X THEN IF H>Y THEN PRINT "...to the southwest." 29 IF G<X THEN IF H=Y THEN PRINT "...to the west." 30 IF G=X THEN IF H=Y THEN GOTO 40 31 IF M>6 THEN GOTO 50 32 PRINT "You have taken ",M," turns so far." 33 GOTO 10 40 PRINT "...RIGHT HERE!" 41 PRINT "You took ",M," turns to find it." 42 END 50 PRINT "You have taken too long over this. You lose!" 51 END 200 LET S=(42*S+127)-((42*S+127)/126*126) 201 LET R=S 202 RETURN
It would take only a trivial modification to adapt this to play the game of Mugwump, so you can expect to see that listing pretty soon.