home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 5 / FREESOFT.BIN / fb386 / t_burner / t_burner.bas next >
BASIC Source File  |  1992-08-19  |  11KB  |  232 lines

  1. 10 ' !!! TINY BURNER !!!  for FM-TOWNS(F-BASIC 386)
  2. 20 '  Version 4.6
  3. 30 ' Programed by Takefumi Kimura (Hirosaki High School 'PASOKEN'Club )
  4. 40 '
  5. 50 RAD=3.14159!/180:DIM CHA%(255),CHA0%(1600)
  6. 60 SCREEN@0:SCREEN@1:COLOR ,6:CLS
  7. 70 DEF SPRITE 99,0
  8. 80 '***[ MAKE PATARN (After Burner) ]***
  9. 90 CLS:DEF PEN 0,2
  10. 100 CIRCLE(16,21),4,[120,255,120],,,,F:CIRCLE(30,21),4,[120,255,120],,,,F
  11. 110 FOR I=0 TO 1
  12. 120 GET@A(8+16*I,16)-(23+16*I,31),CHA%:DEF SPRITE 0,I*4,CHA%,1
  13. 130 NEXT I
  14. 140 DEF SPRITE 1,0,(112,120),0,2,1
  15. 150 '***[ MAKE PATARN (MY-CHARA) ]***
  16. 160 CLS:LINE(0,18)-(47,18),PSET,7:LINE(4,21)-(43,21),PSET,7
  17. 170 LINE(15,6)-(16,18),PSET,7:LINE(30,6)-(29,18),PSET,7
  18. 180 CIRCLE(23,18),3,5,1.3!,,,F:CIRCLE(23,18),3,7,,,,F
  19. 190 CIRCLE(16,21),3,7,,,,F,,2:CIRCLE(30,21),3,7,,,,F,,2
  20. 200 FOR I=0 TO 5
  21. 210 GET@A(16*(I MOD 3),16*INT(I/3))-(16*(I MOD 3)+15,16*INT(I/3)+15),CHA%
  22. 220 DEF SPRITE 0,8+I*4,CHA%,1
  23. 230 NEXT I
  24. 240 DEF SPRITE 1,2,(104,104),8,3,2
  25. 250 '***[ MAKE PATARN (ENEMY) ]***
  26. 260 CLS:LINE(0,15)-(47,15),PSET,3,BF
  27. 270 LINE(15,0)-(18,15),PSET,4:LINE(31,0)-(28,15),PSET,4
  28. 280 LINE(15,15)-(19,23),PSET,1,BF:LINE(31,15)-(27,23),PSET,1,BF
  29. 290 CONNECT(13,16)-(23,12)-(33,16)-(23,17),3,,F
  30. 300 CIRCLE(23,12),3,5,1.3!,,,F:CIRCLE(23,15),3,1,,,,F
  31. 310 DEF PEN 0,1
  32. 320 GET@A(0,0)-(47,32),CHA0%
  33. 330 FOR L=1 TO 6:CLS
  34. 340 PUT@A(23-23/L,15-15/L)-(23-23/L+47,15-15/L+31),CHA0%,PSET,1/L,1/L
  35. 350 FOR I=0 TO 5
  36. 360 GET@A(16*(I MOD 3),16*INT(I/3))-(16*(I MOD 3)+15,16*INT(I/3)+15),CHA%
  37. 370 DEF SPRITE 0,32+I*4+(L-1)*24,CHA%,1
  38. 380 NEXT I,L
  39. 390 '***[ MAKE PATARN (MISSILE) ]***
  40. 400 FOR I=1 TO 6:CLS
  41. 410 CIRCLE(7,7),2/I,6,,,,F:GET@A(0,0)-(15,15),CHA%
  42. 420 DEF SPRITE 0,172+I*4,CHA%,1
  43. 430 NEXT I
  44. 440 '***[ MAKE PATARN (EXPROSION) ]***
  45. 450 CLS:ZC(0)=2:ZC(1)=6:ZC(2)=7:FOR I=0 TO 2 
  46. 460 CIRCLE(23,15),(10-I*3)*1.6!,ZC(I),,,,F:NEXT
  47. 470 GET@A(0,0)-(47,32),CHA0%
  48. 480 FOR L=1 TO 6:CLS
  49. 490 PUT@A(23-23/L,15-15/L)-(23-23/L+47,15-15/L+31),CHA0%,PSET,1/L,1/L
  50. 500 FOR I=0 TO 5
  51. 510 GET@A(16*(I MOD 3),16*INT(I/3))-(16*(I MOD 3)+15,16*INT(I/3)+15),CHA%
  52. 520 DEF SPRITE 0,200+I*4+(L-1)*24,CHA%,1
  53. 530 NEXT I,L
  54. 540 '***[ MAKE PATARN (RADAR SIGHT) ]***
  55. 550 CLS:SYMBOL(0,0),"○",1,1,7:GET@A(0,0)-(15,15),CHA%
  56. 560 DEF SPRITE 0,344,CHA%,1
  57. 570 '
  58. 580 ' 初期設定 & タイトル
  59. 590 WINDOW:VIEW:COLOR ,0:CLS:SPRITE ON:SPRITE SCREEN(32,0):YL=250:XR=640:YR=250:LV=1:TK=LV:MI=5:SC=0:LT=0:CK=0:CKK=0:P=1:D=3.14159!/180:H=0
  60. 600 FOR I=1 TO 4:XC(I)=0:YC(I)=0:XPC(I)=0:YPC(I)=0:NEXT
  61. 610 'CD PLAY 9:' ←オ-プニングの曲の番号
  62. 620 SPRITE 0,2,1:PLAY OFF
  63. 630 DEF SPRITE 1,8,(50,160),32,3,2:SPRITE 0,8,1
  64. 640 SYMBOL(75,45),"TI  Y",2.5!,2.5!,2
  65. 650 FOR I=0 TO 1:SYMBOL(130+I*18,30+I*25),"N",3.5!,4,1+I*3,,,2:NEXT
  66. 660 SYMBOL(40,70),"BUR  ER",2.5!,2.5!,6
  67. 670 SYMBOL(76,160),"PUSH  A[EASY]/B[HARD]  BUTTON",.5!,.5!,4
  68. 680 IF PTRIG(1)=2 THEN R=2:GOTO 700
  69. 690 IF PTRIG(1)=1 THEN R=1:GOTO 700:ELSE GOTO 680
  70. 700 CLS:RANDOMIZE(TIME/4)
  71. 710 IF PAD(1)=5 THEN RV=-1 ELSE RV=1
  72. 720 FOR I=1 TO 4
  73. 730 DEF SPRITE 1,2+I*6,(104,104),152,3,2:DEF SPRITE 1,31+I,(120,112),196
  74. 740 SPRITE 0,2+I*6,0:SPRITE 0,31+I,0
  75. 750 NEXT:GOTO 2100
  76. 760 '
  77. 770 ' 敵の位置決定
  78. 780 XE(I)=INT(RND(1)*3000)-1500:YE(I)=INT(RND(1)*2500)-1250:ZE(I)=40-INT(RND(1)*20)*(R=2):ZZE(I)=ZE(I)
  79. 790 XC(I)=0:YC(I)=0:XPC(I)=0:YPC(I)=0
  80. 800 DEF SPRITE 1,2+I*6,(104,104),152,3,2:DEF SPRITE 1,31+I,(120,112),196
  81. 810 IF LT=1 THEN MX(I)=(INT(RND(1)*300)-150):MY(I)=(INT(RND(1)*140)-70)
  82. 820 B(I)=0:C(I)=0:RO(I)=0:RETURN
  83. 830 '
  84. 840 ' 画面設定
  85. 850 WINDOW:VIEW:CLS:SPRITE 0,0,0
  86. 860 'READ Z:CD PLAY Z:DATA 15,19,19,17,17,15,21:'←BGMにしたい曲の番号
  87. 870 CO=-(LV>0 AND LV<4)*5-(LV>3 AND LV<7)*3-(LV=7)*2
  88. 880 DEF SPRITE 1,60,(120,82),344:SPRITE 0,60,1:PS=-30
  89. 890 SYMBOL(228,217),"MISSILE"+AKCNV$(STR$(MI)),.5!,.5!,6:SYMBOL(40,17),"SCORE"+AKCNV$(STR$(SC)),.5!,.5!,6
  90. 900 SYMBOL(220,17),"HIT  0  /"+AKCNV$(STR$(NR)),.5!,.5!,6:SYMBOL(40,217),"LEVEL"+AKCNV$(STR$(LV)),.5!,.5!,6
  91. 910 WINDOW(0,26)-(319,214):VIEW(0,26)-(319,214)
  92. 920 GOSUB 1020
  93. 930 ' メイン
  94. 940 PA=PAD(1)
  95. 950 MA=((PA=1 OR PA=2 OR PA=8)-(PA>=4 AND PA=<6))*15*RV
  96. 960 MB=((PA>=6 AND PA=<8)-(PA>=2 AND PA=<4))*15
  97. 970 GOSUB 1020:GOSUB 1150:GOSUB 1390:GOSUB 1540:GOSUB 1670:GOSUB 1850
  98. 980 GOSUB 1910 '判定ルーチンへ
  99. 990 GOTO 940 
  100. 1000 '
  101. 1010 ' 地平線
  102. 1020 IF P=1 THEN P=0:S=0:T=0
  103. 1030 S=S-MB:T=T+MA
  104. 1040 IF S<-70 OR S>70 THEN S=S+MB:MB=0
  105. 1050 IF T<-80 OR T>80 THEN T=T-MA:MA=0
  106. 1060 XLMB=XLM:YLMB=YLM:XLB=XL:YLB=YL
  107. 1070 M=D*S:K=SIN(M):L=COS(M):N=TAN(M)
  108. 1080 XLM=-K*T+160:YLM=L*T+120:YL=N*(XLM):YR=N*(320-XLM)
  109. 1085 'LINE(0,YLMB-YLB)-(320,YLMB+YRB),PRESET,0
  110. 1086 'LINE(0,YLM-YL)-(320,YLM+YR),PSET,1:GOTO 1110
  111. 1090 CONNECT(0,240)-(0,YLM-YL)-(320,YLM+YR)-(320,240),[128,0,0],,F
  112. 1100 CONNECT(0,  0)-(0,YLM-YL)-(320,YLM+YR)-(320,  0),[128,0,128],,F
  113. 1110 MAA=L*T-K*(-S):MBB=L*(-S)-K*T
  114. 1115 'YLMB=YLM:YLB=YL:YRB=YR
  115. 1120 RETURN
  116. 1130 '
  117. 1140 ' 敵
  118. 1150 FOR I=1 TO TK
  119. 1160 XCB(I)=SPRITE(2+I*6,6)-127+24:YCB(I)=SPRITE(2+I*6,7)-119+16
  120. 1170 ZE(I)=ZE(I)-1+(AF>0)
  121. 1180 IF ZE(I)<1 THEN ZE(I)=1
  122. 1190 IF LT=0 THEN GOTO 1220 ELSE MM=INT(RND(1)*5)
  123. 1200 MX(I)=MX(I)-150*SGN(MX(I))*(MM=0)*(G(I)=0)
  124. 1210 MY(I)=MY(I)-150*SGN(MY(I))*(MM=1)*(G(I)=0)
  125. 1220 XB=MBB*ZE(I):YA=MA*ZE(I)
  126. 1230 XI=-K*MY(I)-L*MX(I):YI=L*MY(I)+K*MY(I)+(G(I)=1)*40
  127. 1240 XH(I)=-K*YA-L*XB:YH(I)=L*YA+K*XB
  128. 1250 XE(I)=XE(I)-MBB+XH(I)+XI:YE(I)=YE(I)+MAA+YH(I)+YI
  129. 1260 W=(D*-MB):U=SIN(W):V=COS(W)
  130. 1270 VX=XE(I):VY=YE(I)
  131. 1280 XE(I)=V*VX-U*VY:YE(I)=V*VY+U*VX
  132. 1290 XC(I)=INT(XE(I)/ZE(I)):YC(I)=INT(YE(I)/ZE(I))
  133. 1300 A(I)=12/(INT(ZE(I)/10)+1)
  134. 1310 IF G(I)=1 THEN GOTO 1350
  135. 1320 IF ABS(XC(I))>127 OR ABS(YC(I))>119 THEN SPRITE 0,2+I*6,0:GOTO 1350
  136. 1330 SPRITE 6,2+I*6,XC(I)-XCB(I),YC(I)-YCB(I)
  137. 1340 SPRITE 0,2+I*6,1:SPRITE 1,2+I*6,32+INT(ZE(I)/10)*24
  138. 1350 IF PTRIG(1) AND 1 THEN PLAY OFF:PLAY"V11O2@76G64E64G64E64G64E64V8"
  139. 1360 NEXT:RETURN
  140. 1370 '
  141. 1380 ' バルカン砲 & 敵の爆発
  142. 1390 FOR I=1 TO TK
  143. 1400 IF ABS(XC(I))>127 OR ABS(YC(I))>119 THEN SPRITE 0,2+I*6,0:XC(I)=XCB(I):YC(I)=YCB(I):GOTO 1440
  144. 1410 IF G(I)<>1 THEN 1440
  145. 1420 SPRITE 6,2+I*6,XC(I)-XCB(I),YC(I)-YCB(I)
  146. 1430 SPRITE 0,2+I*6,1:SPRITE 1,2+I*6,200+INT(ZE(I)/10)*24
  147. 1440 NEXT
  148. 1450 IF PTRIG(1) AND 1 THEN GOTO 1470
  149. 1460 RETURN
  150. 1470 CIRCLE(155,120),2,2,,,,F:CIRCLE(165,120),2,2,,,,F
  151. 1480 FOR I=1 TO TK
  152. 1490 IF ABS(XC(I))<2*A(I) AND ABS(YC(I))<A(I) THEN G(I)=1:SC=SC+100:WINDOW:VIEW:LINE(68,17)-(116,25),PSET,0,BF:SYMBOL(60,17),AKCNV$(STR$(SC)),.5!,.5!,6:PLAY OFF:PLAY "V15O5@67CV8":WINDOW(0,26)-(319,214):VIEW(0,26)-(319,214)
  153. 1500 NEXT
  154. 1505 'LINE(153,118)-(167,122),PRESET,0,BF
  155. 1510 RETURN
  156. 1520 '
  157. 1530 ' ロック オン!
  158. 1540 E=E+1
  159. 1550 IF PTRIG(1) AND 8 AND E>5 THEN E=0:GOTO 1620 
  160. 1560 FOR I=1 TO TK
  161. 1570 IF ABS(XC(I))<16 AND ABS(YC(I)-PS)<16 AND G(I)=0 THEN RO(I)=1:BEEP
  162. 1580 IF RO(I)=1 AND PTRIG(1) AND 2 AND G(I)=0 AND MI>0 THEN ELSE 1610
  163. 1590 G(I)=1:SC=SC+300:MI=MI-1:WINDOW:VIEW:LINE(264,217)-(280,225),PSET,0,BF:SYMBOL(256,217),AKCNV$(STR$(MI)),.5!,.5!,6:LINE(60,17)-(108,25),PSET,0,BF:SYMBOL(60,17),AKCNV$(STR$(SC)),.5!,.5!,6:PLAY OFF:PLAY "V15O5@67CV8"
  164. 1600 WINDOW(0,26)-(319,214):VIEW(0,26)-(319,214)
  165. 1610 NEXT:RETURN
  166. 1620 IF PS=30 THEN PS=-30:GOTO 1640
  167. 1630 IF PS=-30 THEN PS=30
  168. 1640 SPRITE 6,60,0,2*PS:GOTO 1560
  169. 1650 '
  170. 1660 ' 敵ミサイル
  171. 1670 FOR I=1 TO TK
  172. 1680 IF (ZE(I)=30 OR ZE(I)=29) AND G(I)=0 THEN C(I)=1:XEM(I)=XE(I):YEM(I)=YE(I):GOTO 1700
  173. 1690 IF C(I)=0 THEN SPRITE 0,31+I,0:GOTO 1820
  174. 1700 XCM=XEM(I)/(ZE(I)+(ZE(I)>1)):YCM=YEM(I)/(ZE(I)+(ZE(I)>1))
  175. 1710 MXM(I)=-XCM*(ABS(XCM-MXM(I))<30)-(MXM(I)+SGN(XCM-MXM(I))*30)*(ABS(XCM-MXM(I))>=30)
  176. 1720 MYM(I)=-YCM*(ABS(YCM-MYM(I))<30)-(MYM(I)+SGN(YCM-MYM(I))*30)*(ABS(YCM-MYM(I))>=30)
  177. 1730 XPCB(I)=SPRITE(31+I,6)-127+8:YPCB(I)=SPRITE(31+I,7)-119+8
  178. 1740 XEM(I)=XEM(I)-MXM(I)-MBB+XH(I):YEM(I)=YEM(I)-MYM(I)+MAA+YH(I)
  179. 1750 VX=XEM(I):VY=YEM(I)
  180. 1760 XEM(I)=V*VX-U*VY:YEM(I)=V*VY+U*VX
  181. 1770 XPC(I)=INT(XEM(I)/ZE(I)):YPC(I)=INT(YEM(I)/ZE(I))
  182. 1780 IF ABS(XPC(I))>127 OR ABS(YPC(I))>119 THEN SPRITE 0,31+I,0:GOTO 1820
  183. 1790 IF C(I)=2 THEN SPRITE 0,31+I,0
  184. 1800 SPRITE 6,31+I,XPC(I)-XPCB(I),YPC(I)-YPCB(I)
  185. 1810 SPRITE 0,31+I,1:SPRITE 1,31+I,176+INT(ZE(I)/10)*4
  186. 1820 NEXT:RETURN
  187. 1830 '
  188. 1840 ' アフタ-バ-ナ-
  189. 1850 AF=AF-1
  190. 1860 IF PTRIG(1) AND 4 AND AF<-10 THEN AF=10:SPRITE 0,0,1
  191. 1870 IF AF=0 THEN SPRITE 0,0,0
  192. 1880 RETURN
  193. 1890 '
  194. 1900 ' 各種判定
  195. 1910 FOR I=1 TO TK
  196. 1920 IF ZE(I)>2 OR ZE(I)<1 THEN GOTO 1940
  197. 1930 Q=Q-(C(I)=1 AND ((ABS(XPC(I))<24 AND YPC(I)<12 AND YPC(I)>-12+AM(I)) OR (ABS(XPC(I))<176+AM(I)+48*(AF>0) AND ABS(YPEM(I)-237)<AM(I))))
  198. 1940 IF ZE(I)=1 THEN CKK=CKK+1:B(I)=0:C(I)=0:GOSUB 780:IF G(I)=1 THEN CK=CK+1:WINDOW:VIEW:LINE(240,17)-(255,25),PSET,0,BF:SYMBOL(232,17),AKCNV$(STR$(CK)),.5!,.5!,6:WINDOW(0,26)-(319,214):VIEW(0,26)-(319,214):G(I)=0:IF CK>=NR THEN H=1:GOTO 1960
  199. 1950 'IF ZE(I)=ZZE(I)-1 OR ZE(I)=ZZE(I)-2 THEN B(I)=0:C(I)=0
  200. 1960 NEXT
  201. 1970 IF Q<>0 THEN Q=0:GOTO 2140
  202. 1980 IF ZE(1)=40 AND R=1 THEN P=1
  203. 1990 IF H=1 THEN H=0:GOTO 2030
  204. 2000 RETURN
  205. 2010 '
  206. 2020 ' レベルクリア!
  207. 2030 SYMBOL(140,74),"Completed",.5!,.5!,2
  208. 2040 SYMBOL(132,90),"Hit Count"+AKCNV$(STR$(INT(CK/CKK*100)))+"%",.5!,.5!,6
  209. 2050 BO=LV*30*INT(CK/CKK*100):SYMBOL(132,106),"BONUS"+AKCNV$(STR$(BO)),.5!,.5!,4:SC=SC+BO:CKK=0
  210. 2060 IF LV=7 THEN FOR I=1 TO 10000:NEXT:GOTO 2240:ELSE:LV=LV+1
  211. 2070 IF LV=4 THEN TK=1:LT=1:FOR I=1 TO 3:SPRITE 0,2+I*6,0:SPRITE 0,31+I,0:NEXT ELSE TK=TK+1
  212. 2080 IF LV=4 OR LV=1 THEN TK=1:LT=1:FOR I=1 TO 3:SPRITE 0,2+I*6,0:SPRITE 0,31+I,0:NEXT
  213. 2090 SYMBOL(132,132),"MISSILE +"+AKCNV$(STR$(TK*2)),.5!,.5!,5:FOR I=1 TO 10000:NEXT:CLS:MI=MI+TK*2
  214. 2100 GOSUB 1020:CK=0:SYMBOL(148,100),"LEVEL"+AKCNV$(STR$(LV)),.5!,.5!,2
  215. 2110 NR=3*TK:SYMBOL(136,132),"Work Count"+AKCNV$(STR$(NR)),.5!,.5!,6:FOR I=1 TO 10000:NEXT:AF=0:YL=250:YR=250:FOR I=1 TO TK:G(I)=0:GOSUB 780:NEXT:P=1:GOTO 850
  216. 2120 '
  217. 2130 ' ゲ-ムオ-バ-
  218. 2140 CIRCLE(160,120),30,6,,,,F
  219. 2150 CIRCLE(160,120),20,2,,,,F
  220. 2160 FOR I=0 TO 25:CIRCLE(110+RND(1)*100,115+RND(1)*10),7+RND(1)*10,2+INT(RND(1)*2)*4,,,,F:NEXT
  221. 2170 SYMBOL(6,60),"GAME OVER",2.2!,2.2!,3,,,2
  222. 2180 PLAY "O3@67cdefg":PLAY"@42c16b16a16b16c16d16d16c16b16c16d16e16f16e16c16"
  223. 2190 SYMBOL(90,150),"SCORE"+STR$(SC)+" ",1,1,5,,,18
  224. 2200 SYMBOL(128,180),"PUSH 'RUN' BUTTON",.5!,.5!,2
  225. 2210 IF PTRIG(1) AND 4 THEN GOTO 590:ELSE GOTO 2210
  226. 2220 '
  227. 2230 ' ゲ-ムクリア!
  228. 2240 SYMBOL(25,75),"MISSION COMPLETED!",1,1,5
  229. 2250 CBO=MI*2000+10000:SYMBOL(40,136),"CLEAR BONUS [MISSILE"+STR$(MI)+"× 2000 + 10000 =]"+STR$(CBO),.5!,.5!,2:SC=SC+CBO:FOR I=0 TO 10000:NEXT
  230. 2260 'CD PLAY 13:' ←エンディングの曲
  231. 2270 COLOR 6:LOCATE 15,1:PRINT AKCNV$(STR$(SC));:GOTO 2190
  232.