--- title: "Hunt the Wumpus" type: "article" slug: "hunt-the-wumpus" url: "http://localhost/article/hunt-the-wumpus/" markdown_url: "http://localhost/article/hunt-the-wumpus.md" published_at: "2022-09-14T02:45:07+00:00" modified_at: "2026-08-11T00:38:59+00:00" featured_image: url: "http://localhost/wp-content/uploads/2022/04/20230809-041332.jpg" excerpt: "This is a game I re-wrote from a BASIC listing for the members of the Sinclair chapter of the Motorola MicroColor Computer club back in 1981. The purpose was to show them how smooth a Screen could look on the X81. Also, this program had the HELP in the program were it should be rather…" category: - name: "Nite-Times News" slug: "nite-times-news" taxonomy: "category" url: "http://localhost/category/periodicals/nite-times-news/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" - name: "Type-in program" slug: "type-in-program" taxonomy: "post_tag" url: "http://localhost/tag/type-in-program/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Bob Swoger (K9WVY)" slug: "bob-swoger" taxonomy: "indiv" url: "http://localhost/indiv/bob-swoger/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" publication_r: id: 10206 title: "Nite-Times News" type: "periodical" url: "http://localhost/periodical/nite-times-news/" authors: "Bob Swoger" volume: "5" issue: "4" issues_articles: - id: 39306 title: "Nite-Times News v5 n4" type: "issue" url: "http://localhost/issue/nite-times-news-v5-n4/" pages: "6-11" pubdate: "July - August 1991" archive_link: false --- # Hunt the Wumpus This is a game I re-wrote from a BASIC listing for the members of the Sinclair chapter of the Motorola MicroColor Computer club back in 1981. The purpose was to show them how smooth a Screen could look on the X81. Also, this program had the HELP in the program were it should be rather than in a manual set of instructions lost somewhere in the past! When programming it is important to get as much important information on the screen as possible with good organization as possible, that is why 80 column displays are preferable to 40 column displays. Up until this time I had noted that programmers often gave little or no thought to how a screen display would look or act. This program seems to do partial screen clears and writes, this is not the case! Note how a total screen re-write can be transparent to the user and how eye pleasing it can be. The original program written for an Apple computer was pure Screen boredom, so I added a little visual gratification when the player wins. Also, as the ZХ81 has a membrane keyboard, why wear out the keyboard using the ENTER key all the time? The program uses the screen counter as a means of determining whether the person inputting numbers means to enter a 1, 2 or a teen number or a 20. This game was translated to the TS2068 using FirstLoader from Syntax Magazine. The program is part of the LogiCall Ensemble, So entering ‘Q’ at the ‘SHOOT or MOVE’ prompt will return you to LogiCall. Remember, never use the ENTER key! ## Source Code ``` 5 POKE 23658,8:INK 9:PAPER 1:BORDER 1: 10 RANDOMIZE :LET Z$=" " 20 GO SUB 6000 30 PRINT AT 7,12;"WELCOME"; AT 11,3;"DO YOU NEED INSTRUCTIONS?"; AT 14,14; 40 PAUSE 0 50 LET I$= INKEY$ 60 IF I$="Y" THEN PRINT "YES" 70 IF I$="N" THEN PRINT "NO" 72 IF I$="M" THEN PRINT "MAY BE" 73 IF I$="C" THEN PRINT "COULD BE" 74 IF I$="J" THEN PRINT "JUST COULD BE" 75 IF I$="R" THEN PRINT "REALLY" 76 IF I$="W" THEN PRINT "WHY NOT " 77 IF I$="Q" THEN PRINT "QUITE" 78 IF I$="S" THEN PRINT "SURE" 80 IF I$="L" THEN PRINT "LUV TO SEE THEM" 100 IF I$<"C" OR I$>"Y" THEN PRINT "I GUESS" 110 REM SET UP CAVE(DODECAHEDRON NODE LIST) 112 DIM S(20,3) 114 DIM P(5) 116 RESTORE 120 FOR J=1 TO 20:FOR K=1 TO 3:READ S(J,K):NEXT K:NEXT J 122 DATA 2,5,8,1,3,10,2,4,12,3,5,14,1,4,6 124 DATA 5,7,15,6,8,17,1,7,9,8,10,18,2,9,11 126 DATA 10,12,19,3,11,13,12,14,20,4,13,15,6,14,16 128 DATA 15,17,20,7,16,18,9,17,19,11,18,20,13,16,19 130 DEF FN A(X)= INT (RND*20)+1 140 DEF FN B(X)= INT (RND*3)+1 142 DEF FN C(X)= INT (RND*4)+1 148 REM LOCATE L ARRAY ITEMS 150 REM -1-YOU,2-WUMPUS,3&4-PITS,5&6-BATS 152 DIM L(6) 154 DIM M(6) 160 FOR J=1 TO 6 170 LET L(J)= FN A(0) 180 LET M(J)=L(J) 190 REM PRINT L(J); 200 NEXT J 210 REM CHECK FOR CROSSOVERS(I.E., L(1)=L(2)),ETC 220 FOR J=1 TO 6 300 FOR K=J TO 6 310 IF J=K THEN GO TO 330 320 IF L(J)=L(K) THEN GO TO 160 330 NEXT K 340 NEXT J 345 IF I$ <>"N" THEN GO SUB 1000 350 REM -SET NUMBER ARROWS 360 LET A=5 365 LET L=L(1) 370 REM -RUN THE GAME 380 REM -HAZARD WARNINGS AND LOCATIONS 390 GO SUB 2000 400 REM MOVE OR SHOOT 410 GO SUB 2500 420 IF O=1 THEN GO TO 440 422 IF O=2 THEN GO TO 480 424 IF O=3 THEN GO TO 9998 430 REM -SHOOT 440 GO SUB 3000 445 GO SUB 6006 450 IF F=0 THEN GO TO 410 460 GO TO 500 470 REM -MOVE 480 GO SUB 4000 490 IF F=0 THEN GO TO 390 500 IF F>0 THEN GO TO 550 510 REM -LOSE 520 PRINT AT 14,4;" HA, HA, HA...YOU LOSE!" 530 GO TO 560 540 REM -WIN 550 LET W$="▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞ T H E W U M P U S W I L L G E T C H A N E X T T I M E ! ! ▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞" 552 PRINT AT 9,1;"▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞▞"; AT 16,10;"SAME SET UP?"; 554 FOR I=1 TO 120:PRINT AT 11,8;W$(I TO I+15):PAUSE 6:IF INKEY$ <>"" THEN GO TO 600 556 NEXT I 558 GO TO 554 560 FOR J=1 TO 6 570 LET L(J)=M(J) 580 NEXT J 590 PRINT AT 16,10;"SAME SET UP?"; 600 LET I$= INKEY$ 640 IF I$="N" THEN GO TO 160 650 IF I$="Y" THEN GO TO 360 660 GO TO 590 1000 REM INSTRUCTIONS 1010 CLS :PRINT AT 0,4;"WELCOME TO HUNT THE WUMPUS"; AT 3,0; 1020 PRINT " THE WUMPUS LIVES IN A CAVE OF 20 ROOMS, A DODECAHEDRON. IF YOUDON,T KNOW WHAT A DODECAHEDRON IS, ASK SOMEONE."; AT 8,0 1070 PRINT " HAZARDS:" 1075 PRINT 1080 PRINT " THE BOTTOMLESS PIT -- 2 ROOMS HAVE BOTTOMLESS PITS IN THEM. IFYOU GO THERE YOU FALL AND LOSE." 1090 PRINT 1100 PRINT " SUPERBATS ------------ 2 OTHER ROOMS HAVE SUPERBATS. IF YOU GO THERE, A BAT GRABS YOU AND TAKESYOU TO ANOTHER ROOM AT RANDOM WHICH MIGHT PROVE TROUBLESOME." 1110 GO SUB 4400 1140 PRINT " WUMPUS:" 1150 PRINT '" THE WUMPUS IS NOT BOTHERED BY THE HAZARDS. HE HAS SUCKERS ON HIS FEET AND IS MUCH TOO BIG FORA SUPERBAT TO LIFT. USUALLY, HE IS ASLEEP. 2 THINGS WAKE HIM UP:" 1160 PRINT ''" YOUR ENTERING HIS ROOM"'',"OR"''" YOUR SHOOTING AN ARROW." 1180 PRINT 1190 PRINT '" IF THE WUMPUS WAKES, HE EITHER MOVES ONE ROOM OR STAYS PUT--THEFIRST TIME. AFTER THAT, IF YOU BUG HIM, HE EATS YOU UP AND YOU LOSE." 1200 GO SUB 4400 1230 PRINT "YOU:" 1250 PRINT '" EACH TURN YOU MAY SHOOT A CROOKED ARROW." 1260 PRINT '"ARROWS:"''" YOU HAVE 5 ARROWS. YOU LOSE WHEN YOU RUN OUT. EACH ARROW CAN GO FROM 1 TO 5 ROOMS. YOU AIM BY TELLING THE COMPUTER THE ROOM NUMBER OR NUMBERS YOU"; 1270 PRINT " WANT THE ARROW TO GO. IF THE ARROW CAN NOT GO THAT WAY (I.E., NO TUNNEL), IT MOVES AT RANDOM TO THE NEXT ROOM." 1280 PRINT '" IF THE ARROW HITS THE WUMPUS, YOU WIN!" 1285 PRINT 1290 PRINT "IF THE ARROW HITS YOU, YOU LOSE." 1300 GO SUB 4400 1310 PRINT " WARNINGS:" 1320 PRINT 1330 PRINT " WHEN YOUR 1 ROOM AWAY FROM THE WUMPUS OR HAZARD, THE COMPUTER SAYS:" 1340 PRINT ''"WUMPUS----I SMELL A WUMPUS." 1350 PRINT 1380 PRINT '"SUPERBAT--LOOK OUT, BATS NEARBY." 1385 PRINT 1390 PRINT '"PIT----EEK!!!!! I FEEL A DRAFT." 1400 GO SUB 4400 1410 RETURN 2000 REM LOCATION AND HAZARD WARNINGS 2005 GO SUB 6000 2010 PRINT AT 0,0 2020 FOR J=2 TO 6 2030 FOR K=1 TO 3 2040 IF S(L(1),K) <>L(J) THEN GO TO 2110 2050 IF (J-1)=1 THEN GO TO 2060 2051 IF (J-1)=2 THEN GO TO 2080 2052 IF (J-1)=3 THEN GO TO 2080 2053 IF (J-1)=4 THEN GO TO 2100 2054 IF (J-1)=5 THEN GO TO 2100 2060 PRINT AT 1,7;"I SMELL A WUMPUS" 2070 GO TO 2110 2080 PRINT AT 2,5;"EEK!!!! I FEEL A DRAFT" 2090 GO TO 2110 2100 PRINT AT 3,5;"LOOK OUT.. BATS NEARBY" 2110 NEXT K 2120 NEXT J 2130 PRINT AT 8,8;"YOU ARE IN ROOM ";L(1) 2140 PRINT AT 10,3;"TUNNELS LEAD TO ";S(L,1);", ";S(L,2);", ";S(L,3) 2160 RETURN 2500 REM -CHOOSE OPTIONS 2510 PRINT AT 12,7;"SHOOT OR MOVE ? "; AT 6,12;" "; AT 12,7; 2520 PAUSE 0:LET I$= INKEY$ 2525 IF I$="S" THEN PRINT "SHOOT " 2530 IF I$="M" THEN PRINT " MOVE " 2535 IF I$="Q" THEN PRINT " QUIT " 2540 IF I$ <>"S" THEN GO TO 2560 2550 LET O=1:RETURN 2560 IF I$ <>"M" THEN GO TO 2580 2570 LET O=2:RETURN 2580 IF I$ <>"Q" THEN GO TO 2520 2590 LET O=3:RETURN 3000 REM ARROWS ROUTINE 3010 LET F=0 3020 REM ARROWS PATH 3040 PRINT AT 14,2;"NUMBER OF ROOMS(1 TO 5)?"; AT 14,17; 3041 IF INKEY$ <>"" THEN GO TO 3041 3042 IF INKEY$="" THEN GO TO 3042 3043 LET I$= INKEY$ 3044 IF I$<"1" OR I$>"5" THEN GO TO 3040 3050 LET J9= VAL I$ 3060 PRINT " ";J9;" " 3070 FOR K=1 TO J9 3080 PRINT AT 14+K,6;"ROOM NUMBER ? "; AT 14+K,18; 3085 GO SUB 4500 3090 LET P(K)=L 3095 PRINT P(K); AT 14+K,18; 3096 GO SUB 4570 3097 LET P(K)=L 3098 PRINT P(K) 3099 IF L<1 OR L>20 THEN GO TO 3080 3100 NEXT K 3110 REM SHOOT ARROW 3120 LET A=A-1 3130 LET L=L(1) 3140 FOR K=1 TO J9 3150 FOR Z=1 TO 3 3160 IF S(L,Z)=P(K) THEN GO TO 3295 3170 NEXT Z 3180 REM -NO TUNNEL FOR ARROW 3190 LET L=S(L, FN B(1)) 3200 GO TO 3300 3210 NEXT K 3220 PRINT AT 6,12;"MISSED..":PAUSE 100 3230 REM -MOVE WUMPUS 3240 GO SUB 3370 3250 REM AMMO CHECK 3260 IF A>0 THEN GO TO 3280 3270 LET F=-1 3280 RETURN 3290 REM SEE IF ARROW IS AT L(1) OR L(2) 3295 LET L=P(K) 3300 IF L <>L(2) THEN GO TO 3340 3310 GO SUB 6000:PRINT AT 8,6;"YOU GOT THE WUMPUS!!!!" 3320 LET F=1 3330 RETURN 3340 IF L <>L(1) THEN GO TO 3210 3350 PRINT AT 12,6;"OUCH!!! ARROW GOT YOU":PAUSE 200 3360 GO TO 3270 3370 REM MOVE WUMPUS ROUTINE 3380 LET K= FN C(0) 3390 IF K=4 THEN GO TO 3440 3400 LET L(2)=S(L(2),K) 3410 IF L(2) <>L THEN GO TO 3440 3420 PRINT AT 12,0;"TSK, TSK, ....WUMPUS GOTCHA!!!!!" 3430 LET F=-1 3440 RETURN 4000 REM MOVE ROUTINE 4010 LET F=0 4020 PRINT AT 14,2;" WHERE TO ? "; AT 15,2;" "; AT 14,16; 4025 GO SUB 4500 4030 PRINT L; AT 14,16; 4035 GO SUB 4570 4040 PRINT L 4045 IF L<1 OR L>20 THEN GO TO 4020 4050 FOR K=1 TO 3 4060 REM CHECK IF LEGAL MOVE 4070 IF S(L(1),K)=L THEN GO TO 4130 4080 NEXT K 4090 IF L=L(1) THEN GO TO 4130 4100 PRINT AT 14,19;"TURKEY,"; AT 16,6;"THATS NOT POSSIBLE!!!!!";:PAUSE 200 4108 GO SUB 6006 4109 PRINT AT 16,6;" █▝ "; 4110 GO TO 4020 4120 REM CHECK FOR HAZARDS 4130 LET L(1)=L 4140 REM -WUMPUS 4150 IF L <>L(2) THEN GO TO 4220 4160 PRINT AT 12,1;"....OOPS!! BUMPED THE WUMPUS!!":PAUSE 200 4170 REM MOVE WUMPUS 4180 GO SUB 3380 4190 IF F=0 THEN GO TO 4220 4200 RETURN 4210 REM -PIT 4220 IF L <>L(3) AND L <>L(4) THEN GO TO 4270 4225 GO SUB 6000 4230 PRINT AT 11,0;" YYYIIIIEEEEEEEE ...FELL INTO THE PIT!!!!!!!":PAUSE 200 4240 LET F=-1 4250 RETURN 4260 REM -BATS 4270 IF L <>L(5) AND L <>L(6) THEN GO TO 4310 4275 GO SUB 6000 4280 PRINT AT 11,6;"ZAP--SUPERBAT SNATCH!! ....ELSEWHERE-VILLE FOR YOU.":PAUSE 200 4290 LET L= FN A(1) 4300 GO TO 4130 4310 RETURN 4400 POKE 23659,0 4410 PRINT AT 22,0;"WHEN YOU HAVE READ THIS AND WANT TO READ ON, HIT ANY KEY"; 4415 POKE 23659,2 4420 IF INKEY$="" THEN GO TO 4420 4440 CLS 4450 RETURN 4500 REM INPUT COLLECTOR 4520 IF INKEY$ <>"" THEN GO TO 4520 4530 LET L$= INKEY$:IF L$="" THEN GO TO 4530 4540 IF L$<"0" OR L$>"9" THEN GO TO 4510 4550 LET L= VAL L$ 4560 RETURN 4570 IF INKEY$ <>"" THEN GO TO 4570 4580 IF L>2 THEN RETURN 4590 POKE 23672,0:POKE 23673,0 4600 IF PEEK 23673>0 THEN RETURN 4610 LET M$= INKEY$ 4620 IF M$="" THEN GO TO 4600 4630 IF PEEK 23560=191 THEN RETURN 4640 IF M$<"0" OR M$>"9" THEN GO TO 4570 4650 LET M= VAL M$ 4660 LET L=L*10+M 4670 RETURN 5000 STOP 6000 PRINT AT 0,0;"█ █ █ █ █▗ █ ███ ███ █ █ █████ █ █ █ ██▗█ █ █ █ █ █ █ █ █ █ █▘██ █ █ ████ █ █ █ █ █ █ ▘█ █ █ █ █ █ ████ █ █ █ █ █ █ █████ █ █▖█ ▀ █ █ █ █ █ ██▝ █ █ █ █ █▝ ▀ █ █ █ ▀█▄ █ ▀█"; 6005 PRINT AT 10,0;Z$;Z$;Z$;Z$ 6006 POKE 23659,0 6010 PRINT AT 14,0;"█ ▖███ ▖█▜ ██ █ █▝ ██ █ █ █ █ █ ▗ █ █ █ █ █ █ █ █ █ █ █ █▗ ▖███ █ █ ██████▖█▗█ █ █ █▟ ▖█ █▝ █ █ █ ██▙ ▟█ █ █ █▛▖██ ███▝ █ █ █ ██▝ ▘█ █ █ █▘█▝█ █ █ █ █ ██ █ ████ █ ▝ █ █ ████ █████" 6015 POKE 23659,2 6020 RETURN 9992 SAVE "WUMPUS" LINE 10 ```