-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathsalvo.bas
More file actions
327 lines (327 loc) · 6.04 KB
/
salvo.bas
File metadata and controls
327 lines (327 loc) · 6.04 KB
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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
1000 REM *** SALVO BY LARRY SIEGEL
1010 REM *** LAST REVISION 6/9/73
1020 REM *** CHECKED OUT ON RSTS/E BY DAVE AHL, DIGITAL
1030 REM ***
1040DIMA(10,10),B(10,10),C(7),D(7),E(12),F(12),G(12),H(12),K(10,10)
1050LETZ8=0
1060FORW=1TO12
1070LETE(W)=-1
1080LETH(W)=-1
1090NEXTW
1100FORX=1TO10
1110FORY=1TO10
1120LETB(X,Y)=0
1130NEXTY
1140NEXTX
1150FORX=1TO12
1160LETF(X)=0
1170LETG(X)=0
1180NEXTX
1190FORX=1TO10
1200FORY=1TO10
1210LETA(X,Y)=0
1220NEXTY
1230NEXTX
1240FORK=4TO1STEP-1
1250LETU6=0
1260GOSUB2910
1270DEFFNA(K)=(5-K)*3-2*INT(K/4)+SGN(K-1)-1
1280DEFFNB(K)=K-INT(K/4)-SGN(K-1)
1290IFV+V2+V*V2=0THEN1260
1300IFV+V2+FNB(K)>10THEN1260
1310IFV+FNB(K)<1THEN1260
1320IFV2+FNA(K)>10THEN1260
1330IFV2+FNA(K)<1THEN1260
1340LETU6=U6+1
1350IFU6>25THEN1190
1360FORZ=1TOFNB(K)
1370LETA(Z+FNA(K),X)=V+Z
1380LETG(Z+FNA(K))=V+V2
1390NEXTZ
1400LETU8=FNA(K)
1410FORZ2=1TOU8+FNB(K)
1420FORZ3=1TOU8-1
1430IFSQR((F(Z3)-F(Z2))^2+(G(Z3)-G(Z2))^2)>3.59THEN1260
1440NEXTZ3
1450NEXTZ2
1460FORZ=2TOFNB(K)
1470LETA(F(Z+U8),G(Z+U8))=.5+SGN(K-1)*(K-1.5)
1480NEXTZ
1490NEXTK
1500PRINT"ENTER COORDINATES FOR..."
1510PRINT"BATTLESHIP"
1520FORX=1TO5
1530INPUTY,Z
1540LETB(Y,Z)=5
1550NEXTX
1560PRINT"CRUISER"
1570FORX=1TO4
1580INPUTY,Z
1590LETB(Y,Z)=2
1600NEXTX
1610PRINT"DESTROYER<A>"
1620FORX=1TO2
1630INPUTY,Z
1640LETB(Y,Z)=1
1650NEXTX
1660PRINT"DESTROYER<B>"
1670FORX=1TO2
1680INPUTY,Z
1690LETB(Y,Z)=.5
1700NEXTX
1710PRINT"DO YOU WANT TO START";
1720INPUTJ$
1730IFJ$<>"HERE ARE YOUR SHIPS" THEN1890
1740PRINT"BATTLESHIP"
1750FORZ=1TO5
1760PRINTF(Z);G(Z)
1770NEXTZ
1780PRINT"CRUISER"
1790PRINTF(6);G(6)
1800PRINTF(7);G(7)
1810PRINTF(8);G(8)
1820PRINT"DESTROYER<A>"
1830PRINTF(9);G(9)
1840PRINTF(10);G(10)
1850PRINT"DESTROYER<B>"
1860PRINTF(11);G(11)
1870PRINTF(12);G(12)
1880GOTO1710
1890LETC=0
1900PRINT"DO YOU WANT TO SEE MY SHOTS"
1910INPUTK$
1920PRINT
1930IFJ$<>"YES"THEN2620
1940REM**************START
1950IFJ$<>"YES"THEN1990
1960LETC=C+1
1970PRINT
1980PRINT"TURN"C
1990LETA=0
2000FORW=.5TO3STEP.5
2010FORX=1TO10
2020FORY=1TO10
2030IFB(X,Y)=0THEN2070
2040NEXTY
2050NEXTX
2060GOTO2080
2070LETA=A+INT(W+.5)
2080NEXTW
2090FORW=1TO7
2100LETC(W)=0
2110LETD(W)=0
2120LETF(W)=0
2130LETG(W)=0
2140NEXTW
2150LETP3=0
2160FORX=1TO10
2170FORY=1TO10
2180IFA(X,Y)>10THEN2200
2190LETP3=P3+1
2200NEXTY
2210NEXTX
2220PRINT"YOU HAVE"A"SHOTS"
2230IFP3>0THEN2250
2240PRINT"THE NUMBER OF YOUR SHOTS EXCEEDS THE NUMBER OF BLANK SQUARES"
2250GOTO2890
2260IFA<>0THEN2290
2270PRINT"I HAVE WON"
2280STOP
2290FORW=1TOA
2300INPUTX,Y
2310IFX<>INT(X)THEN2370
2320IFX<1THEN2370
2330IFX>10THEN2370
2340IFY<>INT(Y)THEN2370
2350IFY<1THEN2370
2360IFY>10THEN2370
2370PRINT"ILLEGAL, ENTER AGAIN"
2380GOTO2300
2390IFA(X,Y)=0THEN2440
2400LETC(W)=X
2410LETD(W)=Y
2420NEXTW
2430GOTO2460
2440PRINT"YOU SHOT THERE BEFORE ON TURN"A"(X,Y)-10
2450GOTO2300
2460FORW=1TOA
2470IFA(C(W),D(W))=3THEN2540
2480IFA(C(W),D(W))=2THEN2560
2490IFA(C(W),D(W))=1THEN2580
2500IFA(C(W),D(W))=.5THEN2600
2510LETA(C(W),D(W))=10+C
2520NEXTW
2530GOTO2620
2540PRINT"YOU HIT MY BATTLESHIP"
2550GOTO2510
2560PRINT"YOU HIT MY CRUISER"
2570GOTO2510
2580PRINT"YOU HIT MY DESTROYER<A>"
2590GOTO2510
2600PRINT"YOU HIT MY DESTROYER<B>"
2610GOTO2510
2620LETA=0
2630IFJ$="YES"THEN2670
2640LETC=C+1
2650PRINT
2660PRINT"TURN"C
2670LETA=0
2680FORW=.5TO3.1STEP.5
2690FORX=1TO10
2700FORY=1TO10
2710IFA(X,Y)=WTHEN2750
2720NEXTY
2730NEXTX
2740GOTO2760
2750LETA=A+INT(W+.5)
2760NEXTW
2770LETP3=0
2780FORX=1TO12
2790FORY=1TO10
2800IFA(X,Y)>10THEN2820
2810LETP3=P3+1
2820NEXTY
2830NEXTX
2840PRINT"I HAVE"A"SHOTS"
2850IFP3>0THEN2880
2860PRINT"THE NUMBER OF MY SHOTS EXCEEDS THE NUMBER OF BLANK SQUARES"
2870GOTO2270
2880IFA<>0THEN2900
2890PRINT"YOU HAVE WON"
2900STOP
2910LETV=INT((RND(-1)+1)*10)+1)
2920LETV2=INT((RND(-1)+1)*10)+1)
2930LETV3=INT(3*RND(-1)+1)
2940LETV2=INT(3*RND(-1)+1)
2950RETURN
2960FORW=1TO12
2970IFH(W)>0THEN3800
2980NEXTW
2990REM**************RANDOM
3000LETW=0
3010LETH3=0
3020GOSUB2910
3030RESTORE
3040LETH2=0
3050LETH3=H3+1
3060IFR3>100THEN3810
3070IFX>0THEN3110
3080IFX<0THEN3120
3090LETX=1+INT(RND(-1)*2.5)
3100GOTO3120
3110LETX=10-INT(RND(-1)*2.5)
3120IFY>10THEN3160
3130IFY<0THEN3270
3140LETY=1+INT(RND(-1)*2.5)
3150GOTO3270
3160LETY=10-INT(RND(-1)*2.5)
3170GOTO3270
3180LETF(W)=X
3190LETG(W)=Y
3200IFW=ATHEN3380
3210IFR2=6THEN3830
3220READX1,Y1
3230LETH2=R2+1
3240DATA1,1,-1,1,1,-3,1,1,0,2,-1,1
3250LETX=X+X1
3260LETY=Y+Y1
3270IFX>10THEN3210
3280IFX<1THEN3210
3290IFY>10THEN3210
3300IFY<1THEN3210
3310IFB(X,Y)>10THEN3210
3320FORQ9=1TOW
3330IFF(Q9)<>XTHEN3350
3340IFG(Q9)=YTHEN3210
3350NEXTQ9
3360LETW=W+1
3370GOTO3180
3380IFK$<>"YES"THEN3420
3390FORZ5=1TOA
3400PRINTF(Z5);G(Z5)
3410NEXTZ5
3420FORW=1TOA
3430IFB(F(W),G(W))=3THEN3500
3440IFB(F(W),G(W))=2THEN3520
3450IFB(F(W),G(W))=1THEN3560
3460IFB(F(W),G(W))=.5THEN3540
3470LETA(F(W),G(W))=10+C
3480NEXTW
3490GOTO1950
3500PRINT"I HIT YOUR BATTLESHIP"
3510GOTO3570
3520PRINT"I HIT YOUR CRUISER"
3530GOTO3570
3540PRINT"I HIT YOUR DESTROYER<B>"
3550GOTO3570
3560PRINT"I HIT YOUR DESTROYER<A>"
3570FORQ=1TO12
3580IFE(Q)<>-1THEN3730
3590LETE(Q)=10+C
3600LETH(Q)=B(F(W),G(W))
3610LETM3=0
3620FORM2=1TO12
3630IFH(M2)>0THEN3650
3640M3=M3+1
3650NEXTM2
3660IFM3<>(INT(Q)+.5)+1+INT(INT(Q)+.5)/3)THEN3470
3670FORM2=1TO12
3680IFH(M2)<>0THEN3710
3690LETE(M2)=-1
3700LETH(M2)=-1
3710NEXTM2
3720GOTO3470
3730NEXTQ
3740PRINT"PROGRAM ABORT:"
3750FORW=1TO12
3760PRINT"E("Q")="E(Q)
3770PRINT"H("Q")="H(Q)
3780NEXTQ
3790STOP
3800REM*************USINGARRAY
3810FORH=1TO10
3820FORS=1TO10
3830LETR(R,S)=0
3840NEXTS
3850NEXTH
3860FORU=1TO12
3870IFE(U)<10THEN4020
3880FORH=1TO10
3890FORS=1TO10
3900IFB(H,S)<10THEN3930
3910LETA(H,S)=-100000
3920GOTO4000
3930FORM=SGN(1-H)TOSGN(10-H)
3940FORN=SGN(1-S)TOSGN(10-S)
3950IFN+M+N*M=0THEN3980
3960IFH+M+1.5+N+1<>E(U)THEN3980
3970LETA(H,S)=K(H,S)+E(U)-2*INT(H(U))+.5)
3980NEXTN
3990NEXTM
4000NEXTS
4010NEXTH
4020NEXTU
4030FORH=1TOA
4040LETF(H)=H
4050LETG(H)=H
4060NEXTH
4070FORH=1TO10
4080FORS=1TO10
4090LETW9=1
4100FORM=1TOA
4110IFK(F(M),G(M))>=K(F(W9),G(W9))THEN4130
4120LETQ9=M
4130NEXTM
4131IFR>0THEN4140
4132IFR=0THEN4210
4140IFK(H,S)<=K(F(W9),G(W9))THEN4210
4150FORM=1TOA
4160IFF(M)<>0THEN4190
4170IFG(M)<>0THEN4210
4180NEXTM
4190LETF(W9)=H
4200LETG(W9)=S
4210NEXTS
4220NEXTH
4230GOTO3380
4240END