COSMIC COSINE by たけぽん

再生

 幾何学的な敵の動きが美しいシューティングゲーム。
 操作は十字ボタン左右で回転、上下でスピード変化。何も押さないでいても自機はゆっくり前方に動くので要注意!
 Aボタンで弾を発射。敵を全滅させて次のステージに進もう。ステージ開始時には一定時間の猶予があるので、有利なポジショニングを忘れずに。
 次第にトリッキーになっていく敵を逃さず倒すことはできるかな!?

私が作りました

たけぽん

次はもう少し発展したシューティングゲーム作りに挑戦します!


 CHECK POiNT 

神崎
あれ? この人の名前はさっきも見たような……?

博士
ほとんど間をあけずの投稿じゃったから連続掲載じゃ。ひと月前にも1本掲載されておるし、早くも常連じゃな。

インテリ
こっちはがらっと違うスタイルのシューティングゲームだね。

ワンパク
デキがいいのは認めるがよォ、ちょっとカンタンすぎねェか? コツをつかめば敵の先頭で連射しまくって一発だぜ! ガッデム!

インテリ
まあまあ。このプログラムの場合は、タイトル通り三角関数をうまく使ったバラエティ豊かでスムーズな敵の軌道を楽しむのがツボだよ。

博士
いかにも。リストを見てみると、意外に短い内容でうまく動きを制御しているのがわかるじゃろう。
ワンパク君ごのみのゲーム性となると、敵から弾を発射させると「待ち伏せ」ができなくなって良いかもしれんな。ボーナスステージ的な爽快感はなくなってしまうじゃろうが。

プログラムリスト

  1. ’COSMIC COSINE И by タケホ゜ン И
  2. CLS:CLEAR:VISIBLE 1,1,0,0,1,1
  3. SPPAGE 0:GPAGE 0:GCLS
  4. DIM SX(16),SY(16),SC(16)
  5. DIM FX(11),FY(11),FD(11)
  6. DIM FS(11),FC(11),UD(19)
  7. DIM UX(19),UY(19),UC(19)
  8. DIM US(19),UP(19),UT(19)
  9. DIM UK(19),SP(11)
  10. FOR K=1 TO 8
  11. READ UP(K),UT(K),US(K):NEXT
  12. DATA 1,0,1,1,1,1,1,1.5,1
  13. DATA 2,0,2,2,1,2,2,1.5,2
  14. DATA 2,2,1,3,0,3
  15. FOR K=1 TO 4
  16. SPSET K,190,2,0,0,2
  17. SPOFS K,0,-32:NEXT
  18. FOR K=11 TO 18
  19. SPSET K,178,7,0,0,1
  20. SPANIM K,3,10,0:SPOFS K,0,-32
  21. NEXT
  22. @START1
  23. RO=1:SC=0:SK=2:RC=3:RS=3
  24. RP=0:GCLS:CLS:GOSUB @DSTAR
  25. SPSET 0,176,2,0,0,1
  26. GOSUB @USTART
  27. @START2
  28. X=128:Y=144:KD=90:KS=0.9:FS=0
  29. FP=0:DIE=0:BGMPLAY 23
  30. SPANIM 0,2,30,0
  31. @START3
  32. COLOR 15:LOCATE 0,0:?”SCORE”
  33. LOCATE 23,0:?”SCENE ”;RO
  34. LOCATE 24,23:?”LAST ”;SK;
  35. @MAIN
  36. ZD=KD:ZX=X:ZY=Y
  37. GOSUB @DRZAHYO:SPOFS 0,ZX,ZY
  38. SPANGLE 0,KD:GOSUB @KEYIN
  39. KDX=KS*COS(RAD(KD)):X=X-KDX
  40. KDY=KS*SIN(RAD(KD)):Y=Y-KDY
  41. IF X<0 THEN X=X+256
  42. IF X>255 THEN X=X-256
  43. IF Y<0 THEN Y=Y+192
  44. IF Y>192 THEN Y=Y-192
  45. GOSUB @MSTAR
  46. GOSUB @FSTART
  47. GOSUB @FMOVE
  48. GOSUB @UMOVE
  49. IF UW==0 THEN @PCL
  50. IF DIE==1 THEN @DIE
  51. GOTO @MAIN
  52. @PCL
  53. RO=RO+1:IF RO<9 THEN @PC1
  54. IF RO==9 THEN RQ=1
  55. RQ=RQ+0.5:RP=RP+1
  56. IF RP<RC THEN @PC1
  57. RC=RC+1:RP=0:RQ=1
  58. @PC1
  59. GOSUB @USTART
  60. GOTO @START3
  61. @DRZAHYO
  62. ZD=ZD+45
  63. IF ZD>360 THEN ZD=ZD-360
  64. ZX=ZX-11.3*COS(RAD(ZD))
  65. ZY=ZY-11.3*SIN(RAD(ZD))
  66. RETURN
  67. @KEYIN
  68. B=BUTTON():FS=0
  69. IF B AND 16 THEN FS=1
  70. IF B AND 8 THEN KD=KD+5
  71. IF B AND 4 THEN KD=KD-5
  72. IF KD>=360 THEN KD=KD-360
  73. IF KD<0 THEN KD=KD+360
  74. IF B AND 1 THEN KS=KS+0.4
  75. IF KS>5 THEN KS=5
  76. IF B AND 2 THEN KS=KS-0.4
  77. IF KS<-0.8 THEN KS=-0.8
  78. IF KS>0.9 THEN KS=KS-0.1
  79. IF KS<0.9 THEN KS=KS+0.1
  80. RETURN
  81. @DSTAR
  82. FOR K=0 TO 15
  83. SX(K)=RND(256):SY(K)=RND(192)
  84. SC(K)=RND(128)+128
  85. GPSET SX(K),SY(K),SC(K)
  86. NEXT:RETURN
  87. @MSTAR
  88. FOR K=0 TO 15:SC(K)=SC(K)+1
  89. IF SC(K)>255 THEN SC(K)=128
  90. B=3:IF K>7 THEN B=6
  91. GPSET SX(K),SY(K),0
  92. SX(K)=SX(K)-KDX/B:V=SX(K)
  93. IF V<0 THEN SX(K)=SX(K)+256
  94. IF V>255 THEN SX(K)=SX(K)-256
  95. SY(K)=SY(K)-KDY/B:V=SY(K)
  96. IF V<0 THEN SY(K)=SY(K)+192
  97. IF V>191 THEN SY(K)=SY(K)-192
  98. GPSET SX(K),SY(K),SC(K)
  99. NEXT:RETURN
  100. @FSTART
  101. FP=FP-1:IF FP>0 THEN RETURN
  102. IF FS==0 THEN RETURN
  103. K=1
  104. @FS1
  105. IF FC(K)<1 THEN @FS2
  106. K=K+1:IF K<5 THEN @FS1
  107. RETURN
  108. @FS2
  109. FP=11:FC(K)=1:FX(K)=X:FY(K)=Y
  110. FD(K)=KD:FS(K)=KS+4
  111. SPOFS K,X,Y:RETURN
  112. @FMOVE
  113. FOR K=1 TO 4
  114. IF FC(K)<1 THEN @FM1
  115. FDX=FS(K)*COS(RAD(FD(K)))
  116. FDY=FS(K)*SIN(RAD(FD(K)))
  117. FX(K)=FX(K)-FDX
  118. FY(K)=FY(K)-FDY
  119. IF FX(K)<0 THEN @FM2
  120. IF FX(K)>255 THEN @FM2
  121. IF FY(K)<0 THEN @FM2
  122. IF FY(K)>191 THEN @FM2
  123. SPOFS K,FX(K)-8,FY(K)-8
  124. FOR J=11 TO 18
  125. IF UC(J)!=1 THEN @FM3
  126. IF UX(J)>FX(K)+8 THEN @FM3
  127. IF UX(J)<FX(K)-8 THEN @FM3
  128. IF UY(J)>FY(K)+8 THEN @FM3
  129. IF UY(J)<FY(K)-8 THEN @FM3
  130. UC(J)=2:FC(K)=0:SPOFS K,0,-32
  131. @FM3
  132. NEXT
  133. @FM1
  134. NEXT:RETURN
  135. @FM2
  136. SPOFS K,O,-32:FC(K)=0
  137. GOTO @FM1
  138. @UICHI
  139. V=COS(RAD(UD(K)))
  140. UX(K)=128+120*V*UK(K)
  141. V=SIN(RAD(UD(K)))
  142. UY(K)=96+88*V*UK(K)
  143. SPOFS K,UX(K)-8,UY(K)-8
  144. RETURN
  145. @USTART
  146. J=0:UW=8:BEEP 5
  147. IF RO<9 THEN @US1
  148. UP=RS:UT=2:US=RC-2:GOTO @US2
  149. @US1
  150. UP=UP(RO):UT=2:US=US(RO)
  151. RQ=UT(RO):IF RQ==0 THEN UT=1
  152. @US2
  153. :FOR K=11 TO 18:UD(K)=J
  154. UC(K)=-75
  155. SPCHR K,178,15,0,0,1
  156. SPANIM K,3,5,0:J=J+UP*11
  157. NEXT:RETURN
  158. @UMOVE
  159. FOR K=11 TO 18
  160. IF UC(K)==1 THEN @UM0
  161. IF UC(K)==0 THEN @UME
  162. IF UC(K)>1 THEN @UMB
  163. IF UC(K)>-75 THEN @UMF
  164. @UM0
  165. UD(K)=UD(K)+US:V=UD(K)
  166. IF V>360 THEN UD(K)=UD(K)-360
  167. UK(K)=1:IF UT!=2 THEN @UML
  168. J=RQ*UD(K)
  169. @UM4
  170. IF J<=360 THEN @UM5
  171. J=J-360:GOTO @UM4
  172. @UM5
  173. UK(K)=COS(RAD(J))
  174. @UML
  175. GOSUB @UICHI
  176. IF UC(K)<0 THEN @UMF
  177. FOR I=1 TO 4
  178. IF FC(I)!=1 THEN @UMD
  179. IF FX(I)>UX(K)+8 THEN @UMD
  180. IF FX(I)<UX(K)-8 THEN @UMD
  181. IF FY(I)>UY(K)+8 THEN @UMD
  182. IF FY(I)<UY(K)-8 THEN @UMD
  183. FC(I)=0:UC(K)=2:SPOFS I,0,-32
  184. @UMD
  185. NEXT
  186. IF X>UX(K)+8 THEN @UME
  187. IF X<UX(K)-8 THEN @UME
  188. IF Y>UY(K)+8 THEN @UME
  189. IF Y<UY(K)-8 THEN @UME
  190. DIE=1
  191. @UME
  192. NEXT:RETURN
  193. @UMB
  194. IF UC(K)>2 THEN @UMB1
  195. BEEP 12:SC=SC+10:GOSUB @SCORE
  196. SPCHR K,248:SPANIM K,8,4,1
  197. @UMB1
  198. UC(K)=UC(K)+1
  199. IF UC(K)<23 THEN @UME
  200. UC(K)=0:SPOFS K,0,-32:UW=UW-1
  201. GOTO @UME
  202. @UMF
  203. UC(K)=UC(K)+1
  204. IF UC(K)<-1 THEN @UME
  205. UC(K)=1:SPCHR K,178,7,0,0,1
  206. SPANIM K,3,5,0
  207. GOTO @UME
  208. @SCORE
  209. LOCATE 6,0:? SC;:RETURN
  210. @DIE
  211. SPCHR 0,248:SPANIM 0,8,10,0
  212. BGMSTOP:BEEP 13:VSYNC 90
  213. SK=SK-1:IF SK<0 THEN @OVER
  214. SPCHR 0,176:GOTO @START2
  215. @OVER
  216. BEEP 34
  217. LOCATE 11,8:?”GAME OVER”
  218. @OV1
  219. B=BUTTON():IF B!=0 THEN @OV1
  220. LOCATE 10,1?:?”HIT A BUTTON”
  221. @OV2
  222. B=BUTTON()
  223. IF B AND 1024 THEN END
  224. IF B AND 16 THEN @START1
  225. GOSUB @MSTAR
  226. GOTO @OV2