Authors
Publication
Pub Details
Date
Pages
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