-
Notifications
You must be signed in to change notification settings - Fork 1
/
wumpus.bas
234 lines (229 loc) · 5.98 KB
/
wumpus.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
Rem Taken from More BASIC Computer Games by Chris Cerf
10 Print Tab(33); "WUMPUS"
20 Print Tab(15); "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
22 Print
24 Print
26 Print
30 Print "INSTRUCTIONS (Y-N)";
40 Input I$
50 If I$ = "N" Then 60
55 GoSub 1000
60 Rem - SET UP CAVE (DODECAHEDRAL NODE LIST)
70 Dim S(20, 3)
80 For J = 1 To 20
90 For K = 1 To 3
100 Read S(J, K)
110 Next K
120 Next J
130 Data 2,5,8,1,3,10,2,4,12,3,5,14,1,4,6
140 Data 5,7,15,6,8,17,1,1,7,9,8,10,18,2,9,11
150 Data 10,12,19,3,11,13,12,14,20,4,13,15,6,14,16
160 Data 15,17,20,7,16,8,9,17,19,11,18,20,13,16,19
Function FNA (X)
171 X = Int(20 * Rnd(1)) + 1
End Function
Function FNB (X)
181 X = Int(3 * Rnd(1)) + 1
End Function
Function FNC (x)
192 x = Int(4 * Rnd(1)) + 1
End Function
Rem LOCATE L ARRAY ITEMS
Rem- 1-YOU, 2-WUMPUS, 3&4-PITS, 5&6-BATS
240 DIM L(6),M(6)
230 FOR J=1 TO 6
240 L(J)-FNA(0)
260 M(J)=L(J)
270 NEXT J
280 REM- CHECK FOR CROSSOVERS (IE L(1)=L(2) ETC)
290 FOR J=1 TO 6
300 FOR K=J TO 6
310 IF J=K THEN 330
320 IF L(J)-L(K) THEN 240
330 NEXT K
340 NEXT J
350 REM- SET# ARROS
360 A=5
365 L=L(1)
270 REM- RUN THE GAME
375 PRINT "HUNT THE WUMPUS"
380 REM- HAZARD WARNINGS & LOCATIONS
390 GOSUB 2000
400 REM- MOVE OR SHOOT
410 GOSUB 2500
420 ON O GOTO 440,480
430 REM- SHOOT
440 GOSUB 3000
450 IF F-0 THEN 390
460 goTO 500
470 REM- MOVE
480 GOSUB 4000
490 IF F=0 THEN 390
500 IF F>0 THEN 550
510 REM- LOSE
520 PRINT "HA HA HA - YOU LOSE!"
530 GOTO 560
540 REM- WIN
550 PRINT "HEE HEE HEE - THE WUMPUS'LL GETCHA NEXT TIME!!"
560 FOR J=1 TO 6
570 L(J)=M(J)
580 NEXT J
590 PRINT "SAME SET-UP (Y-N)";
600 INPUT I$
610 IF I$ <> "Y" THEN 230
620 GOTO 360
1000 REM- INSTRUCTIONS
1010 PRINT "WELCOME TO 'HUNT THE WUMPUS;"
1020 PRINT " THE WUMPUS LIVES IN A CAVE OF 20 ROOMS. EACH ROOM"
1030 PRINT "HAS 3 TUNNELS LEADING TO OTHER ROOMS. (LOOK AT A"
1040 PRINT "DODECAHEDRON TO SEE HOW THIS WORKS-IF YOU DON'T KNOW"
1050 PRINT "WHAT A DODECHADRON IS, ASK SOMEONE)"
1060 PRINT
1070 PRINT " HAZARDS:"
1080 PRINT "BOTTOMLESS PITS - TWO ROOMS HAVE BOTTOMLESS PITS ON THEM"
1090 PRINT " IF YOU GOTHERE, YOU FALL INTO THE PIT (& LOSE!)"
1100 PRINT "SUPERBATS - TWO OTHER ROOMS HAVE SUPER BATS, IF YOU
1110 PRINT " GO THERE, A BAT GRABS YOU AND TAKE YOU TO SOME";
1115 PRINT " OTHER"
1120 PRINT " ROOM AT RANDOM. (WHICH MIGHT BE TROUBLE)"
1130 PRINT
1140 PRINT " TUMPUS:"
1150 PRINT "THE WUMPUS IS NOT BOTHERED BY THE HAZARDS (HE HAS SUCKER"
1160 PRINT "FEET ANS IS TOO BIG FOR A BAT TO LIFT), USUALLY"
1170 PRINT "HE IS ASLEEP. TWO THINGS THAT TAKE HIM UP: YOUR ENTERING"
1180 PRINT "HIS ROOM OR YOUR SHOOTING AN ARROW."
1190 PRINT " IF THE WIMPUS WAKES, HE MOVES (P=.75) ONE ROOM"
1200 PRINT "OR STAYS STILL (P=.25). AFTER THAT, IF HE IS WHERE YOU"
1210 PRINT "ARE, HE EATS YOU UP (& YOU LOSE!)"
1220 PRINT
1230 PRINT " YOU:"
1240 PRINT "EACH TURN YOU MAY MOVE OR SHOOT A CROOKED ARROW"
1250 PRINT " MOVING: YOU CAN GO ONE ROOM (THRU ONE TUNNEL)"
1260 PRINT " ARROWS: YOU HAVE 5 ARROWS. YOU LOSE WHEN YOU RUN OUT."
1270 PRINT " EACH ARROW CAN GO FROM 1 TO 5 ROOMS. YOU AIM BY ";
1275 PRINT "TELLING"
1280 PRINT " THE COMPUTER THE ROOM YOU WANT THE ARROW TO GO TO."
1290 PRINT " IF THE ARROW CAN'T GO THAT WAY (IE NO TUNNEL) IT ";
1295 PRINT "MOVES"
1300 PRINT " AT RANDOM TO THE NEXT ROOM."
1310 PRINT " IF THE ARROW HITS THE WUMPUS, YOU WIN."
1320 PRINT " IF THE ARROW HITS YOU, YOU LOSE."
1330 PRINT
1340 PRINT " WARNINGS:"
1350 PRINT " WHEN YOU ARE ONE ROOM AWAY FROM WUMPUS OR HAZARD,"
1360 PRINT " THE COMPUTER SAYS:"
1370 PRINT "WUMPUS - 'I SMALL A WUMPUS'"
1380 PRINT "BAT - 'BATS NEARBY'"
1390 PRINT "PIT - 'I FEEL A DRAFT'"
1400 PRINT
1410 RETURN
2000 REM- PRINT LOCATION & HAZARD WARNINGS
2010 PRINT
2020 FOR J= 2 TO 6
2030 FOR K=1 TO 3
2040 IF S(L(1),K)<>L(J) THEN 2110
2050 ON J-1 GOTO 2060,2080,2080,2100,2100
2060 PRINT "I SMELL A WUMPUS!"
2070 GOTO 2110
2080 PRINT "A FEEL A DRAFT!"
2090 GOTO 2110
2100 PRINT "BATS NEARBY!"
2110 NEXT K
2120 NEXT J
2130 PRINT "YOU ARE IN ROOM ";L(1)
2140 PRINT "TUNNELS LEAD TO ";S(L,1);S(L,2);S(L,3)
2150 PRINT
2160 RETURN
2500 REM- CHOOSE OPTION
2510 PRINT "SHOOT OR MOVE (S-M)";
2520 INPUT I$
2530 IF I$ <> "S" THEN 2560
2540 O=1
2550 RETURN
2560 IF I$ <> "M" THEN 2510
2570 O=2
2580 RETURN
3000 REM- ARROW ROUTINE
3010 F=0
3020 REM- PATH OF ARROW
3030 L=L(1)
3040 PRINT "NO. OF ROOMS(1-5)";
3050 INPUT J9
3060 IF J0<1 OR J9>5 THEN 3040
3070 FOR K=1 TO J9
3080 PRINT "ROOM #";
3090 INPUT P(K)
3095 IF K <= 2 THEN 3115
3100 IF P(K) <> P(K-2) THEN 3115
3105 PRINT "ARROWS AREN'T THAT CORRKED - TRY ANOTHER ROOM"
3110 GOTO 3080
3115 NEXT K
3120 REM- SHOOT ARROW
3140 FOR K=1 TO J9
3150 FOR K1=1 TO 3
3160 IF S(L,K1)=P(K) THEN 3295
3170 NEXT K1
3180 REM- NO TUNNEL FOR ARROW
3190 L=S(L,FNB(1))
3200 GOTO 3300
3210 NEXT K
3220 PRINT "MISSED"
3225 L=L(1)
3230 REM- MOVE WUMPUS
3240 GOSUB 3370
3250 REM AMMO CHECK
3255 A=A-1
3260 IF A>0 THEN 3280
3270 F=-1
3280 RETURN
3290 REM- SEE IF ARROW IS AT L(1) OR L(2)
3295 L=P(K)
3300 IF L <> l(2) THEN 3340
3310 PRINT "AHA! YOU GOT THE WUMPUS!"
3320 F-1
3330 RETURN
3340 IF L <> L(1) THEN 3210
3350 PRINT "OUCH! ARROWGOT YOU!"
3360 GOTO 3270
3370 REM- MOVE WUMPUS ROUTINE
3380 K=FNC(0)
3390 IF K=4 THEN 3410
3400 L(2)=S(L(2),K)
3410 IF L(2) <> l THEN 3440
3420 PRINT "TSK TSK TSK - WUMPUS GOT YOU!"
3430 F=-1
3440 RETURN
4000 REM- MOVE ROUTINE
4010 F=0
4020 PRINT "WHERE TO";
4030 INPUT L
4040 IF L<1 OR L>20 THEN 4020
4050 FOR K=1 TO 3
4060 REM- CHECK IF LEGAL MOVE
4070 IF S(L(1),K)=L THEN 4130
4080 NEXT K
4090 IF L-L(1) THEN 4130
4100 PRINT "NOT POSSIBLE -";
4110 GOTO 4020
4120 REM- CHECK FOR HAZARDS
4130 L(1)=1
4140 REM- WUMPUS
4150 IF l <> L(2) THEN 4220
4160 PRINT "...OOPS! BUMPED A WUMPUS!"
4170 REM- MOVE WUMPUS
4180 GOSUB 3380
4190 IF F=0 THEN 4220
4200 RETURN
4210 REM- PIT
4220 IF L <> L(3) AND L <> L(4) THEN 4270
4230 PRINT "YYYIIIIEEEE . . .FELL IN PIT"
4240 F=-1
4250 RETURN
4260 REM- BATS
4270 IF L <> L(5) AND L <> L(6) THEN 4310
4280 PRINT "ZAP--SUPER BAT SNATCH! ELSEWHEREVILLE FOR YOU!"
4290 L=FNA(1)
4300 GOTO 4130
4310 RETURN
5000 END
OK