home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / games / artill2.zip / ARTILL.BAS next >
BASIC Source File  |  1987-01-08  |  8KB  |  291 lines

  1. 1 ' THE PORTLAND IBM PERSONAL COMPUTER CLUB
  2. 2 ' ARTILL.BAS
  3. 3 ' Submitted by Joe Lipska,  July 1982
  4. 4 '
  5. 30 DEF SEG=0
  6. 40 IF (PEEK(&H410) AND &H30)<>&H30 THEN DEF SEG:GOTO 110
  7. 50 WIDTH 80:CLS:LOCATE 3,1
  8. 60 PRINT "HOLD IT!"
  9. 70 PRINT "YOU'RE NOT USING THE COLOR/GRAPHICS MONITOR ADAPTER!"
  10. 80 PRINT "THIS PROGRAM USES GRAPHICS AND REQUIRES THAT ADAPTER."
  11. 90 PRINT "SORRY,BUT THIS PROGRAM WILL NOT CONTINUE."
  12. 100 END
  13. 110 TIM$=RIGHT$(TIME$,2)
  14. 120 RIM=ASC(RIGHT$(TIM$,1))
  15. 130 RIM=RIM+ASC(LEFT$(TIM$,1))
  16. 140 RANDOMIZE(RIM)
  17. 150 DEF SEG=0:POKE &H417,96
  18. 160 DEG=.017745329#
  19. 170 KEY OFF:CLS:WIDTH 40
  20. 180 INPUT "A 0=MONOCROME  1=COLOR";A
  21. 190 CLS
  22. 200 PRINT  "              ARTILLARY"
  23. 210 PRINT " To shoot shells input ANGLE,VELOCITY "
  24. 220 PRINT " an example is  70,100"
  25. 230 PRINT
  26. 240 PRINT " Wind can vary both in direction and in"
  27. 250 PRINT " strength if you choose this option"
  28. 260 PRINT
  29. 270 PRINT " Each gun company starts with 100 men."
  30. 280 PRINT " After each shot there is a deserter"
  31. 290 PRINT " on each side.  Near misses can cause"
  32. 300 PRINT " casualties, dependent on distance and"
  33. 310 PRINT " # of men remaining. A near miss which"
  34. 320 PRINT " would bring a gun company to less than"
  35. 330 PRINT " 10 men is treated as a direct hit. A"
  36. 340 PRINT " running total of base strength is"
  37. 350 PRINT " maintained between battles for each "
  38. 360 PRINT " side. Misses leaves craters; therefore"
  39. 370 PRINT " shots can be used to lower a large"
  40. 380 PRINT " mountain!"
  41. 390 PRINT " If desertion brings your gun company"
  42. 400 PRINT " to less than 5 men, your gun misfires"
  43. 410 INPUT " (PRESS RETURN TO CONTINUE)";ZZZ$: CLS
  44. 420 PRINT
  45. 430 INPUT "TYPE Y IF YOU WANT VARYING WIND";Q$:Q$=LEFT$(Q$,1)
  46. 440  Q1=0
  47. 450 SCREEN 1:COLOR A,1
  48. 460  IF Q$<>"Y" THEN 500
  49. 470 Q1=1
  50. 480 PRINT "LEVEL OF DIFFICULTY":INPUT"     1=EASY,20=DIFFICULT";LEVEL
  51. 490 IF LEVEL <1 OR LEVEL>20 THEN 480
  52. 500 DIM H(320),A1(2),A2(2), B1(4),B2(4),L(2),T1(2),M1(2)
  53. 510 DIM E1(2),V1(2),WIDOW(18)
  54. 520 N=1.5+-1^ INT(100*RND(1))*.5
  55. 530 CLS
  56. 540 LINE (0,0)-(14,14),3,B
  57. 550 PAINT (1,1),3,3
  58. 560 GET (1,1)-(13,13),WIDOW
  59. 570 PLAY "MBO2T230L3CL5MSFP8FL4ACL2FL4CL5MSFAL4O3CO2AP14FP14L1C"
  60. 580 CLS
  61. 590 PLAY "MBP6L3CL4MSFFFFP4L3CL4MSFFFF"
  62. 600 PLAY "MBT230P3O3L3CO2L2AL4FL3CCL1F"
  63. 610 RESTORE
  64. 620 DATA -1,1,1,-1,-1,-1,1,1
  65. 630 T1(1)=0
  66. 640 T1(2)=0
  67. 650 M1(1)=101
  68. 660 M1(2)=101
  69. 670 A1(1)=2
  70. 680 A1(2)=2
  71. 690 A2(1)=4
  72. 700 A2(2)=27
  73. 710 FOR L=1 TO 4
  74. 720 READ B1(L)
  75. 730 NEXT L
  76. 740 FOR L=1 TO 4
  77. 750 READ B2(L)
  78. 760 NEXT L
  79. 770 E1(1)=0
  80. 780 E1(2)=0
  81. 790 V1(1)=0
  82. 800 V1(2)=0
  83. 810 N2=0
  84. 820 E3=0
  85. 830 V3=0
  86. 840 REM ESTABLISH BASE LOCATIONS
  87. 850 X1=INT(53+RND(1)*60)
  88. 860 X2=INT(198+RND(1)*60)
  89. 870 L(1)=INT(20+(X1-20)*RND(1))
  90. 880 L(2)=INT(X2+(300-X2)*RND(1))
  91. 890 REM ESTABLISH LEFT & RIGHT ELEVATIONS
  92. 900 HGT1=RND(1)*98+2
  93. 910 HGT2=RND(1)*98+2
  94. 920 IF HGT1<>HGT2 THEN 960
  95. 930 HGT1=15
  96. 940 HGT2=15
  97. 950 GOTO 1020
  98. 960 IF HGT1>HGT2 THEN 1000
  99. 970 HGT2=15+(HGT2-HGT1)
  100. 980 HGT1=15
  101. 990 GOTO 1020
  102. 1000 HGT1=15+(HGT1-HGT2)
  103. 1010 HGT2=15
  104. 1020 FOR I=1 TO X1
  105. 1030 H(I)=HGT1
  106. 1040 NEXT I
  107. 1050 H9=RND(1)*98+2
  108. 1060 FOR I=X2 TO 320
  109. 1070 H(I)=HGT2
  110. 1080 NEXT I
  111. 1090 REM PEAK ELEVATION
  112. 1100 X3=X1+INT(RND(1)*(X2-X1-20))+10
  113. 1110 H(X3)=RND(1)*90+50
  114. 1120 TOP=X3
  115. 1130 REM SLOPE OF FLAT LAND TO PEAK
  116. 1140 D1=(H(X3)-H(1))/2
  117. 1150 D2=(H(X3)-H(320))/2
  118. 1160 IF D1*D2<0 THEN 1360
  119. 1170 REM DRAW CURVE TO PEAK
  120. 1180 J=-180
  121. 1190 K=180/(X3-X1+1)
  122. 1200 H9=H(1)+D1
  123. 1210 FOR I=X1+1 TO X3-1
  124. 1220 J=J+K
  125. 1230 H(I)=H9+COS(J*DEG)*D1
  126. 1240 NEXT I
  127. 1250 J=0
  128. 1260 K=180/(X2-X3+1)
  129. 1270 H9=H(320)+D2
  130. 1280 REM DRAW CURVE FROM PEAK
  131. 1290 FOR I=X3+1 TO X2-1
  132. 1300 J=J+K
  133. 1310 IF I=321 THEN 1340
  134. 1320 H(I)=H9+COS(J*DEG)*D2
  135. 1330 NEXT I
  136. 1340 GOTO 1440
  137. 1350 REM DRAW CURVE FROM LEFT TO RIGHT
  138. 1360 D=(H(1)-H(320))/2
  139. 1370 J=0
  140. 1380 K=180/(X2-X1+1)
  141. 1390 H9=H(320)+D
  142. 1400 FOR I=X1+1 TO X2-1
  143. 1410 J=J+K
  144. 1420 H(I)=H9+COS(J*DEG)*D
  145. 1430 NEXT I
  146. 1440 REM DRAW TERAIN
  147. 1450 CLS
  148. 1460 LINE (X2,(200-H(X2)))-(319,(200-H(X2))),1
  149. 1470 LINE (0,(200-H(1)))-(X1,(200-H(X1))),1
  150. 1480 FOR I=X1 TO X2
  151. 1490 LINE -(I,(200-H(I))),1
  152. 1500 NEXT I
  153. 1510 PAINT (100,199),1
  154. 1520 REM DETERMINE WIND
  155. 1530 WIND=100*RND(1)-50
  156. 1540 W=((LEVEL*2)*RND(1))-LEVEL+WIND
  157. 1550 W=INT(W)
  158. 1560 IF W<1 THEN ARROW=27 ELSE ARROW=26
  159. 1570 IF W=0 THEN 1540
  160. 1580 N=3-N
  161. 1590 M1(N)=M1(N)-1
  162. 1600 M1(3-N)=M1(3-N)-1
  163. 1610 REM DRAW BASES
  164. 1620 XX=L(1)
  165. 1630 YY=200-H(L(1))
  166. 1640 LINE (XX-2,YY-2)-(XX+2,YY+2),,BF
  167. 1650 XX=L(2)
  168. 1660 YY=200-H(L(2))
  169. 1670 LINE (XX-2,YY-2)-(XX+2,YY+2),,BF
  170. 1680 REM PRINT TITLES
  171. 1690 LOCATE 1,2
  172. 1700 PRINT "ANGLE,SPEED MEN"
  173. 1710 LOCATE 1,25
  174. 1720 PRINT "ANGLE,SPEED MEN"
  175. 1730 LOCATE 2,14:PRINT USING "###";M1(1)
  176. 1740 LOCATE 2,37:PRINT USING "###";M1(2)
  177. 1750 LOCATE 1,19
  178. 1760 PRINT "Wind"
  179. 1770 LOCATE 2,18
  180. 1780 PRINT USING "##";ABS(W):LOCATE 2,21:PRINT "mph";
  181. 1790 LOCATE 3,12
  182. 1800 PRINT "              "
  183. 1810 LOCATE 3,20
  184. 1820 PRINT CHR$(ARROW)
  185. 1830 LOCATE A1(N),A2(N)
  186. 1840 PRINT USING "###";E1(N);
  187. 1850 PRINT ",";:PRINT USING "###";V1(N)
  188. 1860 LOCATE A1(N)+1,A2(N)-1
  189. 1870 PRINT "           "
  190. 1880 LOCATE A1(N)+1,A2(N)-1
  191. 1890 INPUT E$,V$
  192. 1900 E=VAL(E$):V=VAL(V$)
  193. 1910 IF E=0 OR V=0 THEN 1860
  194. 1920 E1(N)=E:V1(N)=V
  195. 1930 V=V/10
  196. 1940 IF M1(N)>5 THEN 1980
  197. 1950 E=90
  198. 1960 V=0
  199. 1970 W=1
  200. 1980 REM
  201. 1990 E=90-E
  202. 2000 C=1
  203. 2010 IF N=1 THEN 2040
  204. 2020 E=-E
  205. 2030 E3=-E3
  206. 2040 X1=L(N)
  207. 2050 Y1=H(L(N))
  208. 2060 T=0
  209. 2070 V1=SIN(E*DEG)*V
  210. 2080 V2=COS(E*DEG)*V
  211. 2090 T=T+.3
  212. 2100 IF T=.3 THEN 2120
  213. 2110 PRESET (X,200-Y)
  214. 2120 V1=V1+(V1+W)/1500
  215. 2130 X=X1+(V1+W/50)*T
  216. 2140 IF X<1 OR X>320 THEN 2670
  217. 2150 REM account for gravity and accelerarion
  218. 2160 Y=Y1+(V2-T/2.5)*T
  219. 2170 PSET (X,200-Y)
  220. 2180 IF Y-H(X)=>1 THEN 2090
  221. 2190 PRESET (X,200-Y)
  222. 2200 IF ABS(X-L(N))<1 AND T>.5 THEN 2710
  223. 2210 IF ABS (X-L(3-N))<1 THEN 2690
  224. 2220 IF T<.5 THEN 2090
  225. 2230 REM miss
  226. 2240 IF X<6 THEN 2570
  227. 2250 IF X>314 THEN 2570
  228. 2260 SOUND 179,3
  229. 2270 LINE (X-3,(200-H(X-3)))-(X-2,(200-H(X-2))),0
  230. 2280 FOR L=X-2 TO X+3
  231. 2290 LINE -(L,(200-H(L))),0
  232. 2300 NEXT L
  233. 2310 TMY=195-Y
  234. 2320 IF TMY>186 THEN 2570
  235. 2330 REM CHANGE LANDSCAPE
  236. 2340 PUT (X-6,TMY),WIDOW,PRESET
  237. 2350 TMPX=X-6:TMPY=205-Y
  238. 2360 H(X-3)=H(X-3)-1
  239. 2370 H(X-2)=H(X-2)-2
  240. 2380 H(X-1)=H(X-1)-3.5
  241. 2390 H(X)=H(X)-4
  242. 2400 H(X+1)=H(X+1)-3.5
  243. 2410 H(X+2)=H(X+2)-2
  244. 2420 H(X+3)=H(X+3)-1
  245. 2430 MIN=X-12
  246. 2440 MAX=X+12
  247. 2450 IF MIN<1 THEN MIN=1
  248. 2460 IF MAX>320 THEN MAX=320
  249. 2470 LINE (MIN,(200-H(MIN)))-(MIN+1,(200-H(MIN+1))),1
  250. 2480 FOR L=MIN+1 TO MAX
  251. 2490 LINE -(L,(200-H(L))),1
  252. 2500 NEXT L
  253. 2510 FOR PNTX=X-2 TO X+2
  254. 2520 PNTY=205-H(PNTX)
  255. 2530 IF PNTY>199 THEN PNTY=199
  256. 2540 PAINT (PNTX,PNTY),1,1
  257. 2550 PAINT (PNTX,201-H(PNTX)),1,1
  258. 2560 NEXT PNTX
  259. 2570 IF ABS(X-L(3-N))>8 THEN 2670
  260. 2580 REM near miss
  261. 2590 D9=2*ABS(X-L(3-N))
  262. 2600 D9=INT(M1(3-N)/D9)
  263. 2610 M1(3-N)=M1(3-N)-D9
  264. 2620 T1(3-N)=T1(3-N)+D9
  265. 2630 N2=1
  266. 2640 IF M1(3-N)<10 THEN 2690
  267. 2650 N2=0
  268. 2660 SOUND 179,5
  269. 2670 IF Q1=1 THEN 1540 ELSE 1580
  270. 2680 REM hit and explotion
  271. 2690 N=3-N
  272. 2700 PLAY "MBO1L16FP16FP16F"
  273. 2710 PSET (X,200-Y),2
  274. 2720 DRAW "H15E2F2E2F2E2F2E2F2E2F2E2F2E2F2E2F2G16C2"
  275. 2730 PAINT (X,199-Y),2,2
  276. 2740 LOCATE 1,1
  277. 2750 PRINT "                                       "
  278. 2760 PRINT "                                       "
  279. 2770 PRINT "                                      "
  280. 2780 LOCATE 1,1
  281. 2790 T1(N)=T1(N)+M1(N)
  282. 2800 PRINT  " CASUALTIES   left=" ;T1(1);" right=";T1(2)
  283. 2810 IF N2=1 THEN 2830
  284. 2820 N=3-N
  285. 2830 LOCATE 2,1
  286. 2840 PRINT " AGAIN?";
  287. 2850 INPUT A$:A$=LEFT$(A$,1)
  288. 2860 IF A$="N" THEN 2880
  289. 2870 PRINT "PLEASE WAIT 5 SECONDS":GOTO 610
  290. 2880 END
  291.