COSMIC BLASTER by たけぽん

再生

 最初にサンプル動画を撮ったらあまりのスピードにコマ落ちしすぎて使い物にならなかったという、トンデモないハイスピードシューティング(そこでサンプル動画ではフレームレートを思いきり落として撮影している。ゴメン!)。
 操作は十字ボタンで移動、Aボタンでショット。ノーミスで「P」のパワーカプセルを取り続けると3段階までショットがパワーアップするぞ。
 「B」のボーナスカプセルもノーミス・連続で取ればボーナス点が上昇。ハイスコアを目指せ!

私が作りました

たけぽん

BASICだけでここまで遊べるゲームが作れるなんて、昔の8ビットのマイコンでは考えられないことでした。
ゲームでスピードを出すためにはマシン語を使いましたが、複雑な計算ができませんでした。
25〜30年くらい前にプチコンがあったら、もっといろいろゲームを作ったんだろうなと思います(私はいわゆるマイコン少年でしたが、結局コンピューター関係の仕事には進みませんでした。プチコンにはまるのは、その反動かも……)。


 CHECK POiNT 

インテリ
この人は常連投稿者だね。『COSMIC COSINE』の経験を活かした敵の動きに、縦スクロールシューティングの要素を加えたってところかな。

神崎
前回はゲーム性が薄かったけど、今回はすごく本格的だね。ボスキャラまでいるよ!

ワンパク
システムはシンプルだが、敵の動きがランダムじゃなくて個性があるのがポイントだな。ウマく早めに叩き落としてラクにするのがゲーム性になってるゼ!

博士
ここまで完成度が高いと、ワシも言うことがなかなかないのう。プチコンの機能はすでに使いこなしておるわけじゃから、次は処理落ちを避けるようにプログラム、ゲームシステムを応用して考えてみるのがいいかもしれん。

プログラムリスト

  1. ’COSMIC BLASTER И by タケホ゜ン И
  2. CLS:CLEAR:VISIBLE 1,1,1,1,1,0
  3. BGPAGE 0:BGCLIP 0,0,31,23
  4. SPPAGE 0:HI=1000:GOSUB @BGCL
  5. GOSUB @BGSTAR
  6. GOSUB @CYARA
  7. DIM GR(4),GN(4),GD(35),GK(35)
  8. DIM GJ(35),GX(35),GY(35)
  9. DIM GB(35),GH(35),GL(35)
  10. DIM TD(17),TX(17),TY(17)
  11. DIM TW(17)
  12. DIM ED(21),EX(21),EY(21)
  13. DIM EM(21),EN(21),ES(21)
  14. FOR I=0 TO 70:SPCLR I:NEXT
  15. FOR J=11 TO 34
  16. SPSET J,140,5,0,0,1:NEXT
  17. SPSET 0,176,2,0,0,1
  18. FOR K=1 TO 12
  19. SPSET K+80,190,2,0,0,0:NEXT
  20. FOR K=1 TO 20
  21. SPSET K+50,214,2,0,0,0:NEXT
  22. SPSET 80,232,2,0,0,0
  23. @START1
  24. CLS:SC=0:RO=1:LI=1:VL=2:PD=0
  25. BGL1=320:BGX1=128:LT=0
  26. BGL2=320:BGX2=128:UP=0
  27. FOR K=11 TO 34:GD(K)=0
  28. SPOFS K,0,-32:NEXT
  29. FOR K=1 TO 12:TD(K)=0
  30. SPOFS K+80,0,-32:NEXT
  31. FOR K=1 TO 20:ED(K)=0
  32. SPOFS K+50,0,-32:NEXT
  33. SPOFS 80,0,-32
  34. @START2
  35. LK=30:LH=0:SPCHR 0,176
  36. SPANIM 0,2,50,0:SPANGLE 0,90
  37. SPOFS 0,VX+8,VY-8
  38. @START3
  39. COLOR 0:IF LT>0 THEN @STA3
  40. BGMPLAY 13:GOTO @STA5
  41. @STA3
  42. BGMPLAY 2
  43. @STA5
  44. LOCATE 0,0:?”SCORE”
  45. GOSUB @DRAWSC:LOCATE 21,0
  46. ?”HIGH”:GOSUB @DRAWHI
  47. GOSUB @DRAWVL:COLOR 13
  48. VX=128:VY=120:TK=1:TP=0:LH=0
  49. VD=0:EK=0:JK=0:VP=0:PJ=8
  50. PH=100:LOCATE 13,8:?”READY!”
  51. @START4
  52. GOSUB @KEYIN
  53. GOSUB @JIMOVE
  54. GOSUB @MSTART
  55. GOSUB @MMOVE
  56. GOSUB @TMOVE
  57. GOSUB @EMOVE
  58. GOSUB @PMOVE
  59. GOSUB @SCROLL:VSYNC 2:JK=JK+1
  60. IF JK<100 THEN @START4
  61. VD=0:LOCATE 13,8:?”      ”
  62. @MAIN
  63. GOSUB @TSTART
  64. GOSUB @KEYIN
  65. GOSUB @JIMOVE
  66. GOSUB @MSTART
  67. GOSUB @MMOVE
  68. IF VP==2 AND TH==1 THEN @MAI2
  69. VSYNC 1
  70. @MAI2
  71. GOSUB @TMOVE
  72. GOSUB @ESTART
  73. GOSUB @EMOVE
  74. GOSUB @PSTART
  75. GOSUB @PMOVE
  76. GOSUB @SCROLL
  77. IF VD==1 THEN @DIE
  78. VSYNC 1:GOTO @MAIN
  79. @TSTART
  80. IF LH==1 THEN @TSH
  81. LK=LK-1:IF LK>0 THEN RETURN
  82. LK=100-LI
  83. @TS2
  84. LH=1:LJ=1:LL=0
  85. @TSH
  86. LL=LL-1:IF LL>0 THEN RETURN
  87. LL=12:P=LI(LI):J=11
  88. @TS3
  89. IF GD(J)==0 THEN @TS4
  90. J=J+1:IF J<35 THEN @TS3
  91. RETURN
  92. @TS4
  93. GD(J)=1:GK(J)=0
  94. GB(J)=P:GL(J)=1:GH(J)=1
  95. IF P<12 OR P>14 THEN @TS7
  96. GL(J)=-1
  97. @TS7
  98. IF VX<128 THEN GH(J)=-1
  99. GOSUB @TICHI
  100. SPCHR J,BT(P),BP(P),0,0,1
  101. SPANIM J,BA(P),5,0
  102. SPOFS J,GX(J)-8,GY(J)-8
  103. IF P<15 THEN @TS8
  104. LK=600-LI:SPSCALE J,200
  105. BGMPLAY 2
  106. LB=1:LT=LI/2+20:GOTO @TS6
  107. @TS8
  108. SPSCALE J,100
  109. LJ=LJ+1:IF LJ<9 THEN RETURN
  110. @TS6
  111. LI=LI+1:LH=0
  112. IF LI<48 THEN RETURN
  113. LI=1:RO=RO+1:RETURN
  114. @TMOVE
  115. O=11
  116. @TMS
  117. IF GD(O)==0 THEN @TM0
  118. IF GD(O)==2 THEN @TM2
  119. IF GD(O)>2 THEN @TM3
  120. GK(O)=GK(O)+2
  121. IF GK(O)<360 THEN @TM9
  122. IF GB(O)<15 THEN @TM1
  123. GK(O)=0
  124. @TM9
  125. P=BI(GB(O)):J=O:GOSUB @TICHI
  126. SPOFS O,GX(O)-8,GY(O)-8:U=1
  127. @TM8
  128. IF TD(U)!=1 THEN @TM7
  129. IF GX(O)>TX(U)+8 THEN @TM7
  130. IF GX(O)<TX(U)-8 THEN @TM7
  131. IF GY(O)>TY(U)+8 THEN @TM7
  132. IF GY(O)<TY(U)-8 THEN @TM7
  133. IF GB(O)>14 THEN @TM6
  134. GD(O)=2
  135. @TM4
  136. TD(U)=0:SPOFS U+80,0,-32
  137. @TM7
  138. U=U+1:IF U<13 THEN @TM8
  139. IF GX(O)>VX+8 THEN @TM0
  140. IF GX(O)<VX-8 THEN @TM0
  141. IF GY(O)>VY+8 THEN @TM0
  142. IF GY(O)<VY-8 THEN @TM0
  143. VD=1
  144. @TM0
  145. O=O+1:IF O<35 THEN @TMS
  146. RETURN
  147. @TM1
  148. GD(O)=0:SPOFS O,0,-32
  149. GOTO @TM0
  150. @TM2
  151. BEEP 12:SC=SC+1:GOSUB @DRAWSC
  152. PJ=PJ+1:SPCHR O,248,3,0,0,0
  153. SPANIM O,8,5,1:GD(O)=3
  154. GOTO @TM0
  155. @TM3
  156. GD(O)=GD(O)+1
  157. IF GD(O)<12 THEN @TM0
  158. GOTO @TM1
  159. @TICHI
  160. IF P>15 THEN @TI3
  161. IF P>9 THEN @TI2
  162. @TI1
  163. Z=P*0.5:K=GK(J):C1=Z*K
  164. C=C1-FLOOR(C1/360)*360
  165. S=SIN(RAD(K)):C2=COS(RAD(C))
  166. GX(J)=-S*C2*120*GH(J)+128
  167. GY(J)=-COS(RAD(K))*C2*88+96
  168. RETURN
  169. @TI2
  170. Z=0.5:IF P>11 THEN Z=1.5
  171. IF P>13 THEN Z=2.5
  172. K=GK(J):C1=Z*K
  173. C=C1-FLOOR(C1/360)*360
  174. C2=COS(RAD(C)):S=COS(RAD(K))
  175. GX(J)=-C2*120*GH(J)+128
  176. GY(J)=-S*88*GL(J)+96
  177. RETURN
  178. @TI3
  179. Z=1.5:IF P==17 THEN Z=2
  180. IF P==18 THEN Z=3
  181. K=GK(J):C1=Z*K
  182. C=C1-FLOOR(C1/360)*360
  183. S=SIN(RAD(C))
  184. GX(J)=S*80*GH(J)+128
  185. GY(J)=(K/180-1)*88+96
  186. RETURN
  187. @KEYIN
  188. TR=BUTTON()
  189. IF TR AND 4 THEN VX=VX-8
  190. IF TR AND 8 THEN VX=VX+8
  191. IF TR AND 1 THEN VY=VY-8
  192. IF TR AND 2 THEN VY=VY+8
  193. TH=0:IF TR AND 16 THEN TH=1
  194. IF VX<8 THEN VX=8
  195. IF VX>248 THEN VX=248
  196. IF VY<16 THEN VY=16
  197. IF VY>184 THEN VY=184
  198. IF TR AND 1024 THEN @KEY1
  199. RETURN
  200. @KEY1
  201. TR=BUTTON()
  202. IF TR!=0 THEN @KEY1
  203. @KEY2
  204. TR=BUTTON()
  205. IF TR!=1024 THEN @KEY2
  206. VSYNC 10:RETURN
  207. @JIMOVE
  208. SPOFS 0,VX+8,VY-8:RETURN
  209. @MSTART
  210. IF TK>0 THEN TK=TK-1:RETURN
  211. IF TH!=1 THEN RETURN
  212. J=1:TK=4
  213. @MS2
  214. K=1
  215. @MS0
  216. IF TD(K)==0 THEN @MS1
  217. K=K+1:IF K<13 THEN @MS0
  218. RETURN
  219. @MS1
  220. TD(K)=1:TY(K)=VY
  221. IF VP>0 THEN @MS3
  222. TX(K)=VX:TW(K)=0:RETURN
  223. @MS3
  224. IF J>1 THEN @MS4
  225. TX(K)=VX-4:TW(K)=0:GOTO @MS8
  226. @MS4
  227. IF J>2 THEN @MS6
  228. TX(K)=VX+4:TW(K)=0:GOTO @MS8
  229. @MS6
  230. IF J>3 THEN @MS7
  231. TX(K)=VX:TW(K)=-8:GOTO @MS8
  232. @MS7
  233. TX(K)=VX:TW(K)=8:RETURN
  234. @MS8
  235. J=J+1
  236. IF J>2 AND VP==1 THEN RETURN
  237. GOTO @MS2
  238. @MMOVE
  239. FOR K=1 TO 12
  240. IF TD(K)!=1 THEN @MM0
  241. TX(K)=TX(K)+TW(K)
  242. TY(K)=TY(K)-12
  243. SPOFS K+80,TX(K)-7,TY(K)-8
  244. IF TY(K)<0 THEN @MM3
  245. J=11
  246. @MM1
  247. IF GD(J)!=1 THEN @MM2
  248. IF TX(K)>GX(J)+16 THEN @MM7
  249. IF TX(K)<GX(J)-16 THEN @MM7
  250. IF TY(K)>GY(J)+16 THEN @MM7
  251. IF TY(K)<GY(J)-16 THEN @MM7
  252. IF GB(J)>14 THEN @MMB
  253. @MM7
  254. IF TX(K)>GX(J)+8 THEN @MM2
  255. IF TX(K)<GX(J)-8 THEN @MM2
  256. IF TY(K)>GY(J)+8 THEN @MM2
  257. IF TY(K)<GY(J)-8 THEN @MM2
  258. GD(J)=2
  259. @MM4
  260. TD(K)=0:SPOFS K+80,0,-32
  261. @MM2
  262. J=J+1:IF J<35 THEN @MM1
  263. @MM0
  264. NEXT:RETURN
  265. @MM3
  266. TD(K)=0:SPOFS K+80,0,-32
  267. GOTO @MM0
  268. @MMB
  269. B=GB(J):LT=LT-1
  270. IF LT!=4 THEN @MM8
  271. SPCHR J,BT(B),BY(B),0,0,1
  272. SPANIM J,BA(B),5,0
  273. @MM8
  274. BEEP 11:IF LT>0 THEN @MM4
  275. SC=SC+LI*15:BEEP 13:LK=50
  276. GD(J)=2:BGMPLAY 13:GOTO @MM4
  277. @TM6
  278. B=GB(O):LT=LT-1
  279. IF LT!=4 THEN @TM61
  280. SPCHR O,BT(B),BY(B),0,0,1
  281. SPANIM O,BA(B),5,0
  282. @TM61
  283. BEEP 11:IF LT>0 THEN @TM4
  284. SC=SC+LI*15:BEEP 13:LK=50
  285. GD(O)=2:BGMPLAY 13:GOTO @TM4
  286. @ESTART
  287. EK=EK+1
  288. IF EK<(28-RO*8) THEN RETURN
  289. J=(LI+4)/10+RND(5)+RO
  290. IF J<6 THEN RETURN
  291. K=1:EK=0
  292. @ES1
  293. IF ED(K)==0 THEN @ES2
  294. K=K+1:IF K<21 THEN @ES1
  295. RETURN
  296. @ES2
  297. J=0:I=RND(24)+11
  298. @ES3
  299. IF GD(I)==1 THEN @ES5
  300. J=J+1:I=I+1
  301. IF J>24 THEN RETURN
  302. IF I>34 THEN I=11
  303. GOTO @ES3
  304. @ES5
  305. ED(K)=1:EX(K)=GX(I)
  306. EY(K)=GY(I)
  307. J=(LI+4)/20+RND(5)-4+RO
  308. IF J<1 THEN J=1
  309. ES(K)=J:M=VX-EX(K):N=VY-EY(K)
  310. A=SQR(M*M+N*N)
  311. IF A==0 THEN A=1
  312. EM(K)=M*2*J/A:EN(K)=N*2*J/A
  313. RETURN
  314. @EMOVE
  315. FOR K=1 TO 20
  316. IF ED(K)!=1 THEN @EM8
  317. EX(K)=EX(K)+EM(K)
  318. EY(K)=EY(K)+EN(K)
  319. SPOFS K+50,EX(K)-8,EY(K)-8
  320. IF EX(K)>VX+6 THEN @EM1
  321. IF EX(K)<VX-6 THEN @EM1
  322. IF EY(K)>VY+6 THEN @EM1
  323. IF EY(K)<VY-6 THEN @EM1
  324. VD=1
  325. @EM1
  326. IF EX(K)<0 THEN @EM2
  327. IF EX(K)>256 THEN @EM2
  328. IF EY(K)<0 THEN @EM2
  329. IF EY(K)>192 THEN @EM2
  330. @EM8
  331. NEXT:RETURN
  332. @EM2
  333. ED(K)=0:SPOFS K+50,0,-32
  334. GOTO @EM8
  335. @PSTART
  336. IF PD>0 THEN RETURN
  337. IF PJ<20 THEN RETURN
  338. PJ=0:PK=0
  339. IF VP<2 THEN @PS1
  340. SPCHR 80,234,3,0,0,0
  341. SPANIM 80,2,5,0:PD=2:RETURN
  342. @PS1
  343. PD=1:SPCHR 80,232,13,0,0,0
  344. SPANIM 80,2,5,0:RETURN
  345. @PMOVE
  346. IF PD==0 THEN RETURN
  347. IF PD>2 THEN @PM6
  348. Z=2.5:PK=PK+3:C1=Z*PK
  349. C=C1-FLOOR(C1/360)*360
  350. PX=-SIN(RAD(C))*40+128
  351. PY=(PK/180-1)*88+96
  352. SPOFS 80,PX,PY
  353. IF PK>=366 THEN @PM5
  354. IF PX>VX+12 THEN RETURN
  355. IF PX<VX-12 THEN RETURN
  356. IF PY>VY+12 THEN RETURN
  357. IF PY<VY-12 THEN RETURN
  358. @PM3
  359. IF PD==1 THEN @PM4
  360. SC=SC+PH:GOSUB @DRAWSC
  361. COLOR 9:LOCATE PX/8-1,PY/8
  362. ?PH;”0”;:BEEP 7:PH=PH*2
  363. IF PH>6400 THEN PH=6400
  364. SPOFS 80,0,-32:PK=0:PD=3
  365. RETURN
  366. @PM4
  367. VP=VP+1:BEEP 36
  368. PD=0:SPOFS 80,0,-32:RETURN
  369. @PM5
  370. PD=0:PH=100:SPOFS 80,0,-32
  371. RETURN
  372. @PM6
  373. PK=PK+1:IF PK<50 THEN RETURN
  374. LOCATE PX/8-1,PY/8:?”      ”;
  375. PD=0:RETURN
  376. @DIE
  377. IF VP==0 THEN @DI0
  378. VP=VP-1:BEEP 11:VD=0:PH=100
  379. GOTO @MAIN
  380. @DI0
  381. BEEP 13:SPCHR 0,248
  382. SPANIM 0,8,10,0:KJ=0
  383. @DI1
  384. GOSUB @TMOVE
  385. GOSUB @EMOVE
  386. GOSUB @MMOVE
  387. GOSUB @PMOVE
  388. GOSUB @SCROLL
  389. VSYNC 2
  390. KJ=KJ+1:IF KJ<70 THEN @DI1
  391. VL=VL-1:IF VL>=0 THEN @START2
  392. COLOR 13:LOCATE 11,9
  393. ?”GAME OVER”:BGMPLAY 24
  394. IF SC>HI THEN HI=SC
  395. COLOR 13:LOCATE 10,17
  396. ?”HIT A BUTTON”:SPOFS 0,0,-32
  397. @DI3
  398. B=BUTTON():IF B!=0 THEN @DI3
  399. @DI2
  400. B=BUTTON()
  401. IF B AND 16 THEN @START1
  402. IF B AND 1024 THEN @DI4
  403. GOSUB @TSTART
  404. GOSUB @TMOVE
  405. GOSUB @EMOVE
  406. GOSUB @SCROLL
  407. IF LI(LI)>14 THEN LI=LI+1
  408. VSYNC 1:GOTO @DI2
  409. @DI4
  410. BGMSTOP:END
  411. @SCROLL
  412. BGOFS 0,VX/2,BGL1:BGL1=BGL1-8
  413. BGOFS 1,VX/8,BGL2:BGL2=BGL2-2
  414. IF BGL1<0 THEN BGL1=504
  415. IF BGL2<0 THEN BGL2=510
  416. RETURN
  417. @DRAWSC
  418. A$=STR$(SC):R=LEN(A$)
  419. A$=”     ”+A$
  420. B$=MID$(A$,R-1,6):COLOR 0
  421. LOCATE 5,0: ?B$;”0”;
  422. IF UP!=0 THEN RETURN
  423. IF SC<1000 THEN RETURN
  424. VL=VL+1:UP=1:GOSUB @DRAWVL
  425. RETURN
  426. @DRAWHI
  427. A$=STR$(HI):R=LEN(A$)
  428. A$=”     ”+A$
  429. B$=MID$(A$,R-1,6):COLOR 0
  430. LOCATE 25,0: ?B$;”0”;:RETURN
  431. @DRAWVL
  432. COLOR 7:LOCATE 0,23:?”     ”;
  433. LOCATE 0,23
  434. IF VL<1 THEN RETURN
  435. FOR ZW=1 TO VL:?”Г”;:NEXT
  436. RETURN
  437. @CYARA
  438. DIM BT(21),BA(21),BP(21)
  439. DIM BI(21),BY(21),LI(48)
  440. RESTORE @CY1:FOR K=1 TO 20
  441. READ BT(K),BA(K),BP(K),BI(K)
  442. NEXT
  443. FOR K=15 TO 20:READ BY(K)
  444. NEXT
  445. @CY1
  446. DATA 140,2,5,18,140,2,4,17
  447. DATA 140,2,2,16,174,2,5,1
  448. DATA 174,2,12,3,174,2,0,5
  449. DATA 137,1,4,7,137,1,5,9
  450. DATA 178,3,2,10,178,3,3,12
  451. DATA 178,3,10,14,180,3,2,11
  452. DATA 180,3,3,13,180,3,10,15
  453. DATA 174,2,10,6,163,1,10,4
  454. DATA 178,3,7,6,174,2,8,4
  455. DATA 178,3,2,8,137,1,3,8
  456. DATA 11,3,3,11,5,12
  457. FOR K=1 TO 47:READ LI(K)
  458. NEXT:RETURN
  459. DATA 1,2,5,4,10,15
  460. DATA 1,3,6,4,9,12,11,16
  461. DATA 2,3,5,6,11,1,13,17
  462. DATA 3,4,14,9,10,12,7,18
  463. DATA 1,6,13,11,5,12,8,19
  464. DATA 9,10,11,14,13,12,8,20,2
  465. @BGCL
  466. FOR K=0 TO 63
  467. FOR J=0 TO 63
  468. BGPUT 0,J,K,0,0,0,0
  469. BGPUT 1,J,K,0,0,0,0:NEXT
  470. NEXT:RETURN
  471. @BGSTAR
  472. FOR K=0 TO 80:X=RND(48)
  473. Y=RND(64):C=RND(14)+2
  474. J=859+RND(2)*32
  475. BGPUT 1,X,Y,J,C,0,0:NEXT
  476. FOR K=0 TO 2
  477. FOR J=0 TO 15:RESTORE @BGP3D
  478. FOR Y=0 TO 2
  479. FOR O=0 TO 1
  480. FOR X=0 TO 2:READ I
  481. L=X+O*37+K*4
  482. BGPUT 0,L,Y+J*4,I+768,10,0,0
  483. NEXT
  484. NEXT
  485. NEXT
  486. NEXT
  487. NEXT:RETURN
  488. @BGP3D
  489. DATA 108,45,110,44,45,46
  490. DATA 0,76,77,76,77,0
  491. DATA 44,109,46,108,109,110