5 rem *** HUNT THE WUMPUS ***
10 dim p(5)
15 print 'INSTRUCTIONS (Y-N)';
20 input i$
25 if (i$ = 'N') or (i$ = 'n') then 35
30 gosub 375
35 goto 80
80 rem *** SET UP CAVE (DODECAHEDRAL NODE LIST) ***
85 dim s(20,3)
90 for j = 1 to 20
95 for k = 1 to 3
100 read s(j,k)
105 next k
110 next j
115 data 2,5,8,1,3,10,2,4,12,3,5,14,1,4,6
120 data 5,7,15,6,8,17,1,7,9,8,10,18,2,9,11
125 data 10,12,19,3,11,13,12,14,20,4,13,15,6,14,16
130 data 15,17,20,7,16,18,9,17,19,11,18,20,13,16,19
135 def fnA(X)=INT(20*RND(1))+1
140 def fnB(X)=INT(3*RND(1))+1
145 def fnC(X)=INT(4*RND(1))+1
150 rem *** LOCATE L ARRAY ITEMS ***
155 rem *** 1-YOU, 2-WUMPUS, 3&4-PITS, 5&6-BATS ***
160 dim l(6)
165 dim m(6)
170 for j = 1 to 6
175 l(j) = fna(0)
180 m(j) = l(j)
185 next j
190 rem *** CHECK FOR CROSSOVERS (IE l(1)=l(2), ETC) ***
195 for j = 1 to 6
200 for k = 1 to 6
205 if j = k then 215
210 if l(j) = l(k) then 170
215 next k
220 next j
225 rem *** SET NO. OF ARROWS ***
230 a = 5
235 l = l(1)
240 rem *** RUN THE GAME ***
245 print 'HUNT THE WUMPUS'
250 rem *** HAZARD WARNING AND LOCATION ***
255 gosub 585
260 rem *** MOVE OR SHOOT ***
265 gosub 670
270 on o goto 280,300
275 rem *** SHOOT ***
280 gosub 715
285 if f = 0 then 255
290 goto 310
295 rem *** MOVE ***
300 gosub 975
305 if f = 0 then 255
310 if f > 0 then 335
315 rem *** LOSE ***
320 print 'HA HA HA - YOU LOSE!'
325 goto 340
330 rem *** WIN ***
335 print 'HEE HEE HEE - THE WUMPUS'LL GET YOU NEXT TIME!!'
340 for j = 1 to 6
345 l(j) = m(j)
350 next j
355 print 'SAME SETUP (Y-N)';
360 input i$
365 if (i$ <> 'Y') and (i$ <> 'y') then 170
370 goto 230
375 rem *** INSTRUCTIONS ***
380 print 'WELCOME TO 'HUNT THE WUMPUS''
385 print ' THE WUMPUS LIVES IN A CAVE OF 20 ROOMS. EACH ROOM'
390 print 'HAS 3 TUNNELS LEADING TO OTHER ROOMS. (LOOK AT A'
395 print 'DODECAHEDRON TO SEE HOW THIS WORKS-IF YOU DON'T KNOW'
400 print 'WHAT A DODECAHEDRON IS, ASK SOMEONE)'
405 print
410 print ' HAZARDS:'
415 print ' BOTTOMLESS PITS - TWO ROOMS HAVE BOTTOMLESS PITS IN THEM'
420 print ' IF YOU GO THERE, YOU FALL INTO THE PIT (& LOSE!)'
425 print ' SUPER BATS - TWO OTHER ROOMS HAVE SUPER BATS. IF YOU'
430 print ' GO THERE, A BAT GRABS YOU AND TAKES YOU TO SOME OTHER'
435 print ' ROOM AT RANDOM. (WHICH MAY BE TROUBLESOME)'
440 input 'HIT RETURN TO CONTINUE';a$
445 print ' WUMPUS:'
450 print ' THE WUMPUS IS NOT BOTHERED BY HAZARDS (HE HAS SUCKER'
455 print ' FEET AND IS TOO BIG FOR A BAT TO LIFT). USUALLY'
460 print ' HE IS ASLEEP. TWO THINGS WAKE HIM UP: YOU SHOOTING AN'
465 print 'ARROW OR YOU ENTERING HIS ROOM.'
470 print ' IF THE WUMPUS WAKES HE MOVES (P=.75) ONE ROOM'
475 print ' OR STAYS STILL (P=.25). AFTER THAT, IF HE IS WHERE YOU'
480 print ' ARE, HE EATS YOU UP AND YOU LOSE!'
485 print
490 print ' YOU:'
495 print ' EACH TURN YOU MAY MOVE OR SHOOT A CROOKED ARROW'
500 print ' MOVING: YOU CAN MOVE ONE ROOM (THRU ONE TUNNEL)'
505 print ' ARROWS: YOU HAVE 5 ARROWS. YOU LOSE WHEN YOU RUN OUT'
510 print ' EACH ARROW CAN GO FROM 1 TO 5 ROOMS. YOU AIM BY TELLING'
515 print ' THE COMPUTER THE ROOM#S YOU WANT THE ARROW TO GO TO.'
520 print ' IF THE ARROW CAN'T GO THAT WAY (IF NO TUNNEL) IT MOVES'
525 print ' AT RANDOM TO THE NEXT ROOM.'
530 print ' IF THE ARROW HITS THE WUMPUS, YOU WIN.'
535 print ' IF THE ARROW HITS YOU, YOU LOSE.'
540 input 'HIT RETURN TO CONTINUE';a$
545 print ' WARNINGS:'
550 print ' WHEN YOU ARE ONE ROOM AWAY FROM A WUMPUS OR HAZARD,'
555 print ' THE COMPUTER SAYS:'
560 print ' WUMPUS: 'I SMELL A WUMPUS''
565 print ' BAT : 'BATS NEARBY''
570 print ' PIT : 'I FEEL A DRAFT''
575 print
580 return
585 rem *** PRINT LOCATION & HAZARD WARNINGS ***
590 print
595 for j = 2 to 6
600 for k = 1 to 3
605 if s(l(1),k) <> l(j) then 640
610 on j-1 goto 615,625,625,635,635
615 print 'I SMELL A WUMPUS!'
620 goto 640
625 print 'I FEEL A DRAFT'
630 goto 640
635 print 'BATS NEARBY!'
640 next k
645 next j
650 print 'YOU ARE IN ROOM ';l(1)
655 print 'TUNNELS LEAD TO ';s(l,1);' ';s(l,2);' ';s(l,3)
660 print
665 return
670 rem *** CHOOSE OPTION ***
675 print 'SHOOT OR MOVE (S-M)';
680 input i$
685 if (i$ <> 'S') and (i$ <> 's') then 700
690 o = 1
695 return
700 if (i$ <> 'M') and (i$ <> 'm') then 675
705 o = 2
710 return
715 rem *** ARROW ROUTINE ***
720 f = 0
725 rem *** PATH OF ARROW ***
735 print 'NO. OF ROOMS (1-5)';
740 input j9
745 if j9 < 1 then 735
750 if j9 > 5 then 735
755 for k = 1 to j9
760 print 'ROOM #';
765 input p(k)
770 if k <= 2 then 790
775 if p(k) <> p(k-2) then 790
780 print 'ARROWS AREN'T THAT CROOKED - TRY ANOTHER ROOM'
785 goto 760
790 next k
795 rem *** SHOOT ARROW ***
800 l = l(1)
805 for k = 1 to j9
810 for k1 = 1 to 3
815 if s(l,k1) = p(k) then 895
820 next k1
825 rem *** NO TUNNEL FOR ARROW ***
830 l = s(l,fnb(1))
835 goto 900
840 next k
845 print 'MISSED'
850 l = l(1)
855 rem *** MOVE WUMPUS ***
860 gosub 935
865 rem *** AMMO CHECK ***
870 a = a-1
875 if a > 0 then 885
880 f = -1
885 return
890 rem *** SEE IF ARROW IS AT l(1) OR AT l(2)
895 l = p(k)
900 if l <> l(2) then 920
905 print 'AHA! YOU GOT THE WUMPUS!'
910 f = 1
915 return
920 if l <> l(1) then 840
925 print 'OUCH! ARROW GOT YOU!'
930 goto 880
935 rem *** MOVE WUMPUS ROUTINE ***
940 k = fnc(0)
945 if k = 4 then 955
950 l(2) = s(l(2),k)
955 if l(2) <> l then 970
960 print 'TSK TSK TSK - WUMPUS GOT YOU!'
965 f = -1
970 return
975 rem *** MOVE ROUTINE ***
980 f = 0
985 print 'WHERE TO';
990 input l
995 if l < 1 then 985
1000 if l > 20 then 985
1005 for k = 1 to 3
1010 rem *** CHECK IF LEGAL MOVE ***
1015 if s(l(1),k) = l then 1045
1020 next k
1025 if l = l(1) then 1045
1030 print 'NOT POSSIBLE -';
1035 goto 985
1040 rem *** CHECK FOR HAZARDS ***
1045 l(1) = l
1050 rem *** WUMPUS ***
1055 if l <> l(2) then 1090
1060 print '... OOPS! BUMPED A WUMPUS!'
1065 rem *** MOVE WUMPUS ***
1070 gosub 940
1075 if f = 0 then 1090
1080 return
1085 rem *** PIT ***
1090 if l = l(3) then 1100
1095 if l <> l(4) then 1120
1100 print 'YYYYIIIIEEEE . . . FELL IN PIT'
1105 f = -1
1110 return
1115 rem *** BATS ***
1120 if l = l(5) then 1130
1125 if l <> l(6) then 1145
1130 print 'ZAP--SUPER BAT SNATCH! ELSEWHEREVILLE FOR YOU!'
1135 l = fna(1)
1140 goto 1045
1145 return
1150 end