ChipMaster's bwBASIC This also includes history going back to v2.10. *WARN* some binary files might have been corrupted by CRLF.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

330 lines
6.8 KiB

  1. 1000 PRINT TAB(33);"SALVO"
  2. 1010 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
  3. 1020 PRINT:PRINT:PRINT
  4. 1030 REM
  5. 1032 DEF FNA(K)=(5-K)*3-2*INT(K/4)+SGN(K-1)-1
  6. 1033 DEF FNB(K)=K+INT(K/4)-SGN(K-1)
  7. 1040 DIM AA(10,10),BB(10,10),CC(7),DD(7),EE(12),FF(12),GG(12),HH(12),KK(10,10)
  8. 1050 Z8=0
  9. 1060 FOR W=1 TO 12
  10. 1070 EE(W)=-1
  11. 1080 HH(W)=-1
  12. 1090 NEXT W
  13. 1100 FOR X=1 TO 10
  14. 1110 FOR Y=1 TO 10
  15. 1120 BB(X,Y)=0
  16. 1130 NEXT Y
  17. 1140 NEXT X
  18. 1150 FOR X=1 TO 12
  19. 1160 FF(X)=0
  20. 1170 GG(X)=0
  21. 1180 NEXT X
  22. 1190 FOR X=1 TO 10
  23. 1200 FOR Y=1 TO 10
  24. 1210 AA(X,Y)=0
  25. 1220 NEXT Y
  26. 1230 NEXT X
  27. 1240 FOR K=4 TO 1 STEP -1
  28. 1250 U6=0
  29. 1260 GOSUB 2910
  30. 1290 IF V+V2+V*V2=0 THEN 1260
  31. 1300 IF Y+V*FNB(K)>10 THEN 1260
  32. 1310 IF Y+V*FNB(K)<1 THEN 1260
  33. 1320 IF X+V2*FNB(K)>10 THEN 1260
  34. 1330 IF X+V2*FNB(K)<1 THEN 1260
  35. 1340 U6=U6+1
  36. 1350 IF U6>25 THEN 1190
  37. 1360 FOR Z=0 TO FNB(K)
  38. 1370 FF(Z+FNA(K))=X+V2*Z
  39. 1380 GG(Z+FNA(K))=Y+V*Z
  40. 1390 NEXT Z
  41. 1400 U8=FNA(K)
  42. 1405 IF U8>U8+FNB(K) THEN 1460
  43. 1410 FOR Z2= U8 TO U8+FNB(K)
  44. 1415 IF U8<2 THEN 1450
  45. 1420 FOR Z3=1 TO U8-1
  46. 1430 IF SQR((FF(Z3)-FF(Z2))^2 + (GG(Z3)-GG(Z2))^2) < 3.59 THEN 1260
  47. 1440 NEXT Z3
  48. 1450 NEXT Z2
  49. 1460 FOR Z=0 TO FNB(K)
  50. 1470 AA(FF(Z+U8),GG(Z+U8))=.5+SGN(K-1)*(K-1.5)
  51. 1480 NEXT Z
  52. 1490 NEXT K
  53. 1500 PRINT "ENTER COORDINATES FOR..."
  54. 1510 PRINT "BATTLESHIP"
  55. 1520 FOR X=1 TO 5
  56. 1530 INPUT Y,Z
  57. 1540 BB(Y,Z)=3
  58. 1550 NEXT X
  59. 1560 PRINT "CRUISER"
  60. 1570 FOR X=1 TO 3
  61. 1580 INPUT Y,Z
  62. 1590 BB(Y,Z)=2
  63. 1600 NEXT X
  64. 1610 PRINT "DESTROYER<A>"
  65. 1620 FOR X=1 TO 2
  66. 1630 INPUT Y,Z
  67. 1640 BB(Y,Z)=1
  68. 1650 NEXT X
  69. 1660 PRINT "DESTROYER<B>"
  70. 1670 FOR X=1 TO 2
  71. 1680 INPUT Y,Z
  72. 1690 BB(Y,Z)=.5
  73. 1700 NEXT X
  74. 1710 PRINT "DO YOU WANT TO START";
  75. 1720 INPUT J$
  76. 1730 IF J$<>"WHERE ARE YOUR SHIPS?" THEN 1890
  77. 1740 PRINT "BATTLESHIP"
  78. 1750 FOR Z=1 TO 5
  79. 1760 PRINT FF(Z);GG(Z)
  80. 1770 NEXT Z
  81. 1780 PRINT "CRUISER"
  82. 1790 PRINT FF(6);GG(6)
  83. 1800 PRINT FF(7);GG(7)
  84. 1810 PRINT FF(8);GG(8)
  85. 1820 PRINT "DESTROYER<A>"
  86. 1830 PRINT FF(9);GG(9)
  87. 1840 PRINT FF(10);GG(10)
  88. 1850 PRINT "DESTROYER<B>"
  89. 1860 PRINT FF(11);GG(11)
  90. 1870 PRINT FF(12);GG(12)
  91. 1880 GOTO 1710
  92. 1890 C=0
  93. 1900 PRINT "DO YOU WANT TO SEE MY SHOTS";
  94. 1910 INPUT K$
  95. 1920 PRINT
  96. 1930 IF J$<>"YES" THEN 2620
  97. 1940 REM*******************START
  98. 1950 IF J$<>"YES" THEN 1990
  99. 1960 C=C+1
  100. 1970 PRINT
  101. 1980 PRINT "TURN";C
  102. 1990 A=0
  103. 2000 FOR W=.5 TO 3 STEP .5
  104. 2010 FOR X=1 TO 10
  105. 2020 FOR Y=1 TO 10
  106. 2030 IF BB(X,Y)=W THEN 2070
  107. 2040 NEXT Y
  108. 2050 NEXT X
  109. 2060 GOTO 2080
  110. 2070 A=A+INT(W+.5)
  111. 2080 NEXT W
  112. 2090 FOR W=1 TO 7
  113. 2100 CC(W)=0
  114. 2110 DD(W)=0
  115. 2120 FF(W)=0
  116. 2130 GG(W)=0
  117. 2140 NEXT W
  118. 2150 P3=0
  119. 2160 FOR X=1 TO 10
  120. 2170 FOR Y=1 TO 10
  121. 2180 IF AA(X,Y)>10 THEN 2200
  122. 2190 P3=P3+1
  123. 2200 NEXT Y
  124. 2210 NEXT X
  125. 2220 PRINT "YOU HAVE";A;"SHOTS."
  126. 2230 IF P3>=A THEN 2260
  127. 2240 PRINT "YOU HAVE MORE SHOTS THAN THERE ARE BLANK SQUARES."
  128. 2250 GOTO 2890
  129. 2260 IF A<>0 THEN 2290
  130. 2270 PRINT "I HAVE WON."
  131. 2280 STOP
  132. 2290 FOR W=1 TO A
  133. 2300 INPUT X,Y
  134. 2310 IF X<>INT(X) THEN 2370
  135. 2320 IF X>10 THEN 2370
  136. 2330 IF X<1 THEN 2370
  137. 2340 IF Y<>INT(Y) THEN 2370
  138. 2350 IF Y>10 THEN 2370
  139. 2360 IF Y>=1 THEN 2390
  140. 2370 PRINT "ILLEGAL, ENTER AGAIN."
  141. 2380 GOTO 2300
  142. 2390 IF AA(X,Y)>10 THEN 2440
  143. 2400 CC(W)=X
  144. 2410 DD(W)=Y
  145. 2420 NEXT W
  146. 2430 GOTO 2460
  147. 2440 PRINT "YOU SHOT THERE BEFORE ON TURN";AA(X,Y)-10
  148. 2450 GOTO 2300
  149. 2460 FOR W=1 TO A
  150. 2470 IF AA(CC(W),DD(W))=3 THEN 2540
  151. 2480 IF AA(CC(W),DD(W))=2 THEN 2560
  152. 2490 IF AA(CC(W),DD(W))=1 THEN 2580
  153. 2500 IF AA(CC(W),DD(W))=.5 THEN 2600
  154. 2510 AA(CC(W),DD(W))=10+C
  155. 2520 NEXT W
  156. 2530 GOTO 2620
  157. 2540 PRINT "YOU HIT MY BATTLESHIP."
  158. 2550 GOTO 2510
  159. 2560 PRINT "YOU HIT MY CRUISER."
  160. 2570 GOTO 2510
  161. 2580 PRINT "YOU HIT MY DESTROYER<A>."
  162. 2590 GOTO 2510
  163. 2600 PRINT "YOU HIT MY DESTROYER<B>."
  164. 2610 GOTO 2510
  165. 2620 A=0
  166. 2630 IF J$="YES" THEN 2670
  167. 2640 C=C+1
  168. 2650 PRINT
  169. 2660 PRINT "TURN";C
  170. 2670 A=0
  171. 2680 FOR W=.5 TO 3 STEP .5
  172. 2690 FOR X=1 TO 10
  173. 2700 FOR Y=1 TO 10
  174. 2710 IF AA(X,Y)=W THEN 2750
  175. 2720 NEXT Y
  176. 2730 NEXT X
  177. 2740 GOTO 2760
  178. 2750 A=A+INT(W+.5)
  179. 2760 NEXT W
  180. 2770 P3=0
  181. 2780 FOR X=1 TO 10
  182. 2790 FOR Y=1 TO 10
  183. 2800 IF AA(X,Y)>10 THEN 2820
  184. 2810 P3=P3+1
  185. 2820 NEXT Y
  186. 2830 NEXT X
  187. 2840 PRINT "I HAVE";A;"SHOTS."
  188. 2850 IF P3>A THEN 2880
  189. 2860 PRINT "I HAVE MORE SHOTS THAN BLANK SQUARES."
  190. 2870 GOTO 2270
  191. 2880 IF A<>0 THEN 2960
  192. 2890 PRINT "YOU HAVE WON."
  193. 2900 STOP
  194. 2910 X=INT(RND(1)*10+1)
  195. 2920 Y=INT(RND(1)*10+1)
  196. 2930 V=INT(3*RND(1)-1)
  197. 2940 V2=INT(3*RND(1)-1)
  198. 2950 RETURN
  199. 2960 FOR W=1 TO 12
  200. 2970 IF HH(W)>0 THEN 3800
  201. 2980 NEXT W
  202. 2990 REM*******************RANDOM
  203. 3000 W=0
  204. 3010 R3=0
  205. 3020 GOSUB 2910
  206. 3030 RESTORE
  207. 3040 R2=0
  208. 3050 R3=R3+1
  209. 3060 IF R3>100 THEN 3010
  210. 3070 IF X>10 THEN 3110
  211. 3080 IF X>0 THEN 3120
  212. 3090 X=1+INT(RND(1)*2.5)
  213. 3100 GOTO 3120
  214. 3110 X=10-INT(RND(1)*2.5)
  215. 3120 IF Y>10 THEN 3160
  216. 3130 IF Y>0 THEN 3270
  217. 3140 Y=1+INT(RND(1)*2.5)
  218. 3150 GOTO 3270
  219. 3160 Y=10-INT(RND(1)*2.5)
  220. 3170 GOTO 3270
  221. 3180 FF(W)=X
  222. 3190 GG(W)=Y
  223. 3200 IF W=A THEN 3380
  224. 3210 IF R2=6 THEN 3030
  225. 3220 READ X1,Y1
  226. 3230 R2=R2+1
  227. 3240 DATA 1,1,-1,1,1,-3,1,1,0,2,-1,1
  228. 3250 X=X+X1
  229. 3260 Y=Y+Y1
  230. 3270 IF X>10 THEN 3210
  231. 3280 IF X<1 THEN 3210
  232. 3290 IF Y>10 THEN 3210
  233. 3300 IF Y<1 THEN 3210
  234. 3310 IF BB(X,Y)>10 THEN 3210
  235. 3320 FOR Q9=1 TO W
  236. 3330 IF FF(Q9)<>X THEN 3350
  237. 3340 IF GG(Q9)=Y THEN 3210
  238. 3350 NEXT Q9
  239. 3360 W=W+1
  240. 3370 GOTO 3180
  241. 3380 IF K$<>"YES" THEN 3420
  242. 3390 FOR Z5=1 TO A
  243. 3400 PRINT FF(Z5);GG(Z5)
  244. 3410 NEXT Z5
  245. 3420 FOR W=1 TO A
  246. 3430 IF BB(FF(W),GG(W))=3 THEN 3500
  247. 3440 IF BB(FF(W),GG(W))=2 THEN 3520
  248. 3450 IF BB(FF(W),GG(W))=1 THEN 3560
  249. 3460 IF BB(FF(W),GG(W))=.5 THEN 3540
  250. 3470 BB(FF(W),GG(W))=10+C
  251. 3480 NEXT W
  252. 3490 GOTO 1950
  253. 3500 PRINT "I HIT YOUR BATTLESHIP"
  254. 3510 GOTO 3570
  255. 3520 PRINT "I HIT YOUR CRUISER"
  256. 3530 GOTO 3570
  257. 3540 PRINT "I HIT YOUR DESTROYER<B>"
  258. 3550 GOTO 3570
  259. 3560 PRINT "I HIT YOUR DESTROYER<A>"
  260. 3570 FOR Q=1 TO 12
  261. 3580 IF EE(Q)<>-1 THEN 3730
  262. 3590 EE(Q)=10+C
  263. 3600 HH(Q)=BB(FF(W),GG(W))
  264. 3610 M3=0
  265. 3620 FOR M2=1 TO 12
  266. 3630 IF HH(M2)<>HH(Q) THEN 3650
  267. 3640 M3=M3+1
  268. 3650 NEXT M2
  269. 3660 IF M3<>INT(HH(Q)+.5)+1+INT(INT(HH(Q)+.5)/3) THEN 3470
  270. 3670 FOR M2=1 TO 12
  271. 3680 IF HH(M2)<>HH(Q) THEN 3710
  272. 3690 EE(M2)=-1
  273. 3700 HH(M2)=-1
  274. 3710 NEXT M2
  275. 3720 GOTO 3470
  276. 3730 NEXT Q
  277. 3740 PRINT "PROGRAM ABORT:"
  278. 3750 FOR Q=1 TO 12
  279. 3760 PRINT "EE(";Q;") =";EE(Q)
  280. 3770 PRINT "HH(";Q;") =";HH(Q)
  281. 3780 NEXT Q
  282. 3790 STOP
  283. 3800 REM************************USINGEARRAY
  284. 3810 FOR R=1 TO 10
  285. 3820 FOR S=1 TO 10
  286. 3830 KK(R,S)=0
  287. 3840 NEXT S
  288. 3850 NEXT R
  289. 3860 FOR U=1 TO 12
  290. 3870 IF EE(U)<10 THEN 4020
  291. 3880 FOR R=1 TO 10
  292. 3890 FOR S=1 TO 10
  293. 3900 IF BB(R,S)<10 THEN 3930
  294. 3910 KK(R,S)=-10000000
  295. 3920 GOTO 4000
  296. 3930 FOR M=SGN(1-R) TO SGN(10-R)
  297. 3940 FOR N=SGN(1-S) TO SGN(10-S)
  298. 3950 IF N+M+N*M=0 THEN 3980
  299. 3960 IF BB(R+M,S+N)<>EE(U) THEN 3980
  300. 3970 KK(R,S)=KK(R,S)+EE(U)-S*INT(HH(U)+.5)
  301. 3980 NEXT N
  302. 3990 NEXT M
  303. 4000 NEXT S
  304. 4010 NEXT R
  305. 4020 NEXT U
  306. 4030 FOR R=1 TO A
  307. 4040 FF(R)=R
  308. 4050 GG(R)=R
  309. 4060 NEXT R
  310. 4070 FOR R=1 TO 10
  311. 4080 FOR S=1 TO 10
  312. 4090 Q9=1
  313. 4100 FOR M=1 TO A
  314. 4110 IF KK(FF(M),GG(M))>=KK(FF(Q9),GG(Q9)) THEN 4130
  315. 4120 Q9=M
  316. 4130 NEXT M
  317. 4131 IF R>A THEN 4140
  318. 4132 IF R=S THEN 4210
  319. 4140 IF KK(R,S)<KK(FF(Q9),GG(Q9)) THEN 4210
  320. 4150 FOR M=1 TO A
  321. 4160 IF FF(M)<>R THEN 4190
  322. 4170 IF GG(M)=S THEN 4210
  323. 4180 NEXT M
  324. 4190 FF(Q9)=R
  325. 4200 GG(Q9)=S
  326. 4210 NEXT S
  327. 4220 NEXT R
  328. 4230 GOTO 3380
  329. 4240 END