-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtower.bas
210 lines (210 loc) · 7.75 KB
/
tower.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
10 NR=14:NT=11:NP=11:NV=29:NO=NT+NP
20 DIM AC(NR,6),VB$(NV),OB$(NO),RM$(NR),TD$(NT),VN(NV),TL(NT),TF(NT)
99 REM *INITIALIZATION*
100 RM=1:CT=0:CF=0:RT=-1:CA=0:MF=0:CD=0:WD=-1:LI=0:BT=-1
120 FOR I=1 TO NR:READ RM$(I):NEXT I
130 FOR I=1 TO NV:READ VB$(I),VN(I):NEXT I
140 FOR I=1 TO NO:READ OB$(I):NEXT I
150 FOR I=1 TO NT:READ TD$(I),TL(I),TF(I):NEXT I
160 FOR I=1 TO NR:READ AC(I,1),AC(I,2),AC(I,3),AC(I,4),AC(I,5),AC(I,6):NEXT I
199 REM *MAIN LOOP: ROOM DESCRIPTION*
200 IF WD=0 THEN 400
210 WD=0:PRINT RM$(RM)
220 K=0
230 FOR I=1 TO NT
240 IF TL(I)<>RM THEN 270
250 IF K=0 THEN PRINT "You see:":K=1
260 PRINT TD$(I)
270 NEXT I
300 PRINT"Exits are:"
310 FOR I=1 TO 6
320 IF AC(RM,I)<>0 THEN PRINT VB$(I);" ";
330 NEXT I
340 PRINT
399 REM *MAIN LOOP:COMMAND INPUT AND PARSER*
400 INPUT C$
410 L=LEN(C$):IF L=0 THEN 400
420 C1$="":C2$="":C2=0:X=0
430 FOR I=1 TO L
440 A$=MID$(C$,I,1):A=ASC(A$):IF A>=97 AND A<=122 THEN A$=CHR$(A-32)
450 IF A$<>" " THEN 460
455 IF C2$<>"" THEN 500
457 X=1:GOTO 490
460 IF X=0 THEN C1$=C1$+A$:GOTO 490
470 C2$=C2$+A$
490 NEXT I
500 IF C1$="" THEN PRINT "Excuse me?":GOTO 400
510 C1$=LEFT$(C1$,5):C2$=LEFT$(C2$,5)
520 FOR C1=1 TO NV
530 IF VB$(C1)=C1$ THEN C1=VN(C1):GOTO 600
540 NEXT C1
550 PRINT"I don't know the verb ";C1$:GOTO 400
600 IF C2$="" THEN 700
610 FOR C2=1 TO NO
620 IF OB$(C2)=C2$ THEN 700
630 NEXT C2
635 IF C1=11 THEN C2=1:GOTO 700
640 PRINT"I don't know the object ";C2$:GOTO 400
699 REM *PRELIMINARY FILTERING OF COMMANDS*
700 IF C2>NT+5 AND C1<>7 AND C1<>11 THEN 640
710 IF C2>NT AND C2<NT+5 THEN IF C1<>11 THEN 8010
720 IF C2>NT THEN 750
725 TL=TL(C2)
730 IF C1<>11 AND TL<>RM AND TL<>0 THEN PRINT"It isn't here.":GOTO 400
750 ON C1 GOTO 1000,1000,1000,1000,1000,1000,1100,1200,1300,1400
760 ON C1-10 GOTO 1500,1800,1900,2000,2100,2200,2300,2400,2500,9999
770 ON C1-20 GOTO 2600,2700,2800
999 REM *DIRECTIONS*
1000 IF AC(RM,C1)=0 THEN PRINT"You can't go that way.":GOTO 8200
1010 IF RM=4 AND RT<>0 THEN PRINT"The rats look too fierce.":GOTO 8200
1020 RM=AC(RM,C1):WD=-1:GOTO 8200
1099 REM *GO*
1100 IF C2=0 THEN 8050
1105 IF C2<=16 THEN 8040
1110 C1=C2-16:GOTO 1000
1199 REM *EAT*
1200 IF C2<>6 THEN 8010
1210 TL(C2)=-1:PRINT"GAG! COUGH! CHOKE! PUKE!":GOTO 8200
1299 REM *KICK*
1300 IF C2=0 THEN 8050
1305 IF C2<>7 OR CD<>0 THEN 8020
1310 IF CA<>0 THEN CT=9:GOTO 8200
1320 PRINT"The computer starts up!"
1330 PRINT"The console displays: 'PLEASE LOG IN.'":CA=-1:GOTO 8200
1399 REM *INSERT*
1400 IF C2=0 THEN 8050
1410 IF C2<>5 THEN 8010
1420 IF RM<>6 THEN 8030
1430 TL(5)=-1:TL(6)=RM:PRINT "A candy bar comes out.":GOTO 8200
1499 REM *TYPE*
1500 IF C2=0 THEN 8050
1502 IF RM<>10 THEN 8030
1510 IF CA=0 THEN PRINT "The computer isn't running.":GOTO 8200
1520 IF LI<>0 THEN 1600
1530 IF C2<>12 THEN PRINT "'Invalid login ID.'":GOTO 8200
1540 LI=-1:PRINT "'";C2$;" Logged in.'":GOTO 8200
1600 IF CP<>0 THEN 1700
1605 IF C2<=12 THEN PRINT "'Invalid command.'":GOTO 8200
1610 IF C2=13 THEN PRINT "'COPY LOGOU ADVEN'":GOTO 8200
1620 IF C2=14 THEN PRINT "'Welcome to Adventure! W#uld Y#$*'":CT=9:GOTO 8200
1630 IF C2=15 THEN PRINT "'Mount tape then type filename.'":CP=-1:GOTO 8200
1640 PRINT "'Logged out.'":CP=-1:GOTO 8200
1700 CP=0:IF C2<=12 THEN PRINT"'No such file.'":GOTO 8200
1710 IF MT=0 THEN PRINT"'Error: Tape not mounted'":GOTO 8200
1720 PRINT "The tape spins...":FOR I=1 TO 500:NEXT I
1730 PRINT "'File copied.'"
1740 IF C2=14 THEN PRINT "CONGRATULATIONS, you've done it!":END
1750 GOTO 8200
1799 REM *TAKE*
1800 IF C2=0 THEN 8050
1805 IF TF(C2)=0 THEN PRINT "That's beyond your ability.":GOTO 8200
1810 IF TL=0 THEN PRINT"You already have it!":GOTO 200
1820 IF C2=4 AND CF=0 THEN PRINT"There was a coin under it.":TL(5)=RM:CF=-1
1825 IF C2=2 THEN MT=0
1830 TL(C2)=0:GOTO 8000
1899 REM *DROP*
1900 IF C2=0 THEN 8050
1905 IF TL<>0 THEN PRINT "You don't have it.":GOTO 200
1910 TL(C2)=RM:IF RM<>4 OR C2<>6 THEN 8000
1920 PRINT"The rats devour the candy and get sleepy."
1930 TD$(1)="Sleepy rats":TL(6)=-1:RT=0
1940 GOTO 8000
1999 REM *INVENTORY*
2000 K=0:PRINT"You are carrying:"
2010 FOR I=1 TO NT
2020 IF TL(I)=0 THEN PRINT TD$(I):K=1
2030 NEXT I
2040 IF K=0 THEN PRINT "Nothing."
2050 GOTO 8200
2099 REM *MOUNT*
2100 IF C2=0 THEN 8050
2110 IF C2<>2 THEN 8010
2120 IF RM<>10 OR MT<>0 THEN 8030
2130 TL(2)=RM:MT=-1:GOTO 8000
2199 REM *READ*
2200 IF C2=0 THEN 8050
2210 IF C2=3 THEN PRINT"'INSERT COIN.'":GOTO 8200
2220 IF C2<>10 THEN PRINT "Nothing is written on it.":GOTO 8200
2230 PRINT "'...USER ID IS ROAD...'"
2240 PRINT "'TYPE DIR FOR LIST OF COMMANDS...'"
2250 PRINT"The rest is illegible.":GOTO 8200
2299 REM *FIGHT*
2300 PRINT"That won't work.":GOTO 8200
2399 REM *START*
2400 IF C2=0 THEN 8050
2410 IF C2=7 THEN 8020
2420 GOTO 8010
2499 REM *OPEN*
2500 IF C2=0 THEN 8050
2510 IF C2<>9 THEN 8010
2520 IF MF<>0 THEN PRINT"It already is.":GOTO 8200
2530 PRINT"Inside it is a manual.":TL(10)=RM:MF=-1:GOTO 8200
2599 REM *LOOK*
2600 IF C2<>0 THEN 8040
2610 WD=-1:GOTO 8200
2699 REM *WIND*
2700 IF C2<>11 THEN 8010
2710 IF BT=0 THEN PRINT"It's fully wound.":GOTO 8200
2720 PRINT "The clock chimes deafeningly and something flies past."
2730 BT=0:TL(8)=-1
2740 GOTO 8200
2799 REM *EXAMINE*
2800 IF C2=3 OR C2=10 THEN PRINT "Something is written there.":GOTO 8200
2810 IF C2=9 AND MF=0 THEN PRINT"It is closed.":GOTO 8200
2820 IF C2=4 THEN PRINT"It looks beyond repair.":GOTO 8200
2830 IF C2=7 THEN PRINT"This is an ancient mainframe with a console.":GOTO 8200
2840 IF C2=11 THEN PRINT"There is a large handle for winding the clock.":GOTO 8200
2845 IF C2=2 AND MT<>0 THEN PRINT"It is mounted on the computer.":GOTO 8200
2850 PRINT"You see nothing special.":GOTO 8200
7999 REM *COMPLETION MESSAGES*
8000 PRINT"O.K.":GOTO 8200
8010 PRINT"That's silly!":GOTO 200
8020 PRINT"Nothing happens.":GOTO 8200
8030 PRINT"You can't do that now.":GOTO 8200
8040 PRINT"Who's your English teacher?":GOTO 200
8050 PRINT"Please give an object.":GOTO 200
8199 REM *COMPLECTION ROUTINES*
8200 IF CA=0 THEN 8300
8210 CT=CT+1:IF CT<10 THEN 8300
8220 IF RM=10 THEN PRINT"The computer dies with a loud pop."
8230 CD=-1:CA=0:TD$(7)="Dead computer"
8300 IF RM=TL(8) THEN PRINT"A horde of bats carries you out.":RM=1:WD=-1
8310 GOTO 200
9000 DATA You are in front of an old factory with a clock tower.
9002 DATA You are at the bottom of the stairwell.
9004 DATA You are at the top of some basement steps.
9006 DATA You are in a damp celler.
9008 DATA You are in a storeroom.
9010 DATA You are in the cafeteria.
9012 DATA You're at a landing on the stairs.
9014 DATA Around you is a manufacturing area.
9016 DATA You're at a landing on the third floor.
9018 DATA You are in the computer room.
9020 DATA You are inside the clock tower.
9022 DATA You're at the top of the stairs.
9024 DATA You are in a long corridor going east.
9026 DATA You're at the east end of the corridor.
9050 DATA N,1,S,2,E,3,W,4,U,5,D,6,GO,7,EAT,8,KICK,9,INSER,10,DEPOS,10,TYPE,11
9055 DATA TAKE,12,GET,12,DROP,13,THROW,13,INVEN,14,I,14,MOUNT,15,READ,16
9060 DATA FIGHT,17,KILL,17,START,18,POWER,18,OPEN,19,QUIT,20,LOOK,21
9065 DATA WIND,22,EXAMI,23
9100 DATA RATS,TAPE,MACHI,TERMI,COIN,CANDY,COMPU,BATS,DESK,MANUA,CLOCK,ROAD
9105 DATA DIR,ADVEN,COPY,LOGOU,NORTH,SOUTH,EAST,WEST,UP,DOWN
9150 DATA Hungry rats,4,0,Computer tape,5,1,Vending machine,6,0
9155 DATA Broken-down terminal,8,1,Coin,-1,1,Candy Bar,-1,1,Computer,10,0
9160 DATA Bats,13,0,Desk,14,0,Computer Manual,-1,1,Elaborate Clockwork,11,0
9200 DATA 2,0,0,0,0,0
9205 DATA 3,1,0,0,7,0
9210 DATA 0,2,0,0,0,4
9215 DATA 0,0,5,0,3,0
9220 DATA 0,0,0,4,0,0
9225 DATA 0,0,7,0,0,0
9230 DATA 0,0,8,6,9,2
9235 DATA 0,0,0,7,0,0
9240 DATA 0,0,10,0,12,7
9245 DATA 0,0,0,9,0,0
9250 DATA 0,12,0,0,0,0
9255 DATA 11,0,13,0,0,9
9260 DATA 0,0,14,12,0,0
9270 DATA 0,0,0,13,0,0
9999 END