スマイルブーム自家製プログラム特集 PART7 →PART1に戻る

GALAXY01 by スマイルブーム

再生

 スプライトの回転・拡大縮小と、回転運動のサンプルプログラムだ。
 操作方法はいわゆるラジコン型。十字ボタン左右で進行方向を回転させて、十字ボタン上下でスピードを増減することになる。
 Aボタンで弾を発射。プレイヤー機をしつこく追ってくる敵機に当てると、小さな敵機に分裂するぞ。


 CHECK POiNT 

ワンパク
もうこのさいイキナリ言うがよォ、これまでで一番投げっぱなしなプログラムだなこのヤロウ! ファーック!

博士
ううむ。たしかにゲームとして完成していないのはその通りじゃ。
しかしこう見えて、三角関数を使ったキャラの動きや、スプライトの一通りの基本動作、それに関連した当たり判定、といったゲーム作りの重要なサンプルにはなっておるのじゃぞい。

ワンパク
ムググ……。

インテリ
BG面の星空を2つ重ねた、多重スクロールの手法も使われているね。星空にかぎらず透明色をうまく使えば、かなり効果的な演出に使えるよ。

博士
そうじゃな。あとは……どのくらいスプライトを使うと「処理落ち」するか……とか?

ワンパク
テメエー! やっぱり許せねェー!!

神崎
自家製プログラム特集はこれでおしまい。次回からはまた投稿プログラムの掲載に戻るよ。今回の特集が参考になると嬉しいけど、どうだったかな?
みなさんの投稿、お待ちしています!

プログラムリスト

  1. ’┌──────────────────────────┐
  2. ’│GALAXY01 v1.0             │
  3. ’└──────────────────────────┘
  4. VISIBLE 1,1,1,1,1,1
  5. CLS:COLOR 0
  6. GPAGE 0:GCOLOR 0:GCLS
  7. SPPAGE 0:SPCLR
  8. BGPAGE 0
  9. CLEAR
  10. ’---
  11. DIM E(16,10),CL(4)
  12. DATA 14,11,9,0
  13. FOR I=0 TO 3:READ CL(I):NEXT
  14. _X=0:_Y=1:_C=2:_L=3
  15. _W=4:_N=5:_A=6:_S=7
  16. _V=8
  17. ECNT=10
  18. ’---
  19. FL=0:RQ=FL:BGMW=FALSE
  20. GOSUB @TINIT
  21. ’---
  22. @LOOP
  23.  OLDB=B:B=BUTTON()
  24.  ’
  25.  GOSUB @FLOW
  26.  ’
  27.  VSYNC(1)
  28. GOTO @LOOP
  29. END
  30. ’───────────────────────────
  31. @FLOW ’カ゛メンセンイ
  32. ’───────────────────────────
  33. IF RQ==FL GOTO @FLJUMP
  34. IF BGMW AND BGMCHK() THEN RETURN
  35. BGMW=FALSW
  36. ’--- アタラシイ カ゛メンヘ
  37. ON RQ GOSUB @TINIT,@SSINIT,@GINIT,@OVINIT,@SCINIT
  38. FL=RQ
  39. ’--- カ゛メンコ゛トノショリヘ
  40. @FLJUMP
  41. ON FL GOTO @TIT,@SSTART,@GAME,@GOVER,@SCLEAR
  42. RETURN
  43. ’───────────────────────────
  44. ’───────────────────────────
  45. @ANYBUT
  46. R=FALSE
  47. IF OLDB THEN RETURN
  48. IF B==0 THEN RETURN
  49. R=TRUE
  50. RETURN
  51. ’---
  52. @SE
  53. P=(128/23)*X
  54. V=(100/23)*Y+27
  55. BEEP B,F,V,P
  56. RETURN
  57. ’───────────────────────────
  58. @TIT
  59. ’───────────────────────────
  60. GOSUB @TITPUT
  61. GOSUB @ANYBUT
  62. IF R==FALSE THEN RETURN
  63. BGMSTOP
  64. RQ=1
  65. RETURN
  66. ’---
  67. @TINIT
  68. CLS:BGMPLAY 28
  69. GOSUB @BGINIT
  70. STG=0
  71. ’---
  72. SPCLR
  73. FOR I=0 TO 31
  74.  SPSET I,156,3,0,0,1
  75.  SPOFS I,120,88
  76. NEXT
  77. ’---
  78. @TITPUT
  79. I=(C/4) AND 7
  80. IF I>3 THEN I=7-I
  81. COLOR CL(I):C=C+1
  82. X=6:Y=8
  83. LOCATE X,Y+0:PRINT”┗┏┳┏┓┛ ┳┏┓┫┳━┫┳━┗┫┳┛”
  84. LOCATE X,Y+1:PRINT”┛┻┻┠┛┛ ┻┠┛ ┛  ┛ ┛┻ ┛”
  85. LOCATE X,Y+2:PRINT”┫┨┻ ┛┯┠┻ ┛┗┃┓ ┛ ┫┗ ┛”
  86. COLOR 9:X=8:Y=Y+7
  87. LOCATE X,Y:PRINT”PUSH ANY BUTTON!”
  88. COLOR 2:X=4:Y=Y+5
  89. LOCATE X,Y:PRINT”(C)2011 SmileBoom Co.Ltd.”
  90. ’---
  91. FOR I=0 TO 31
  92.  IF SPCHK(I) GOTO @TISKIP
  93.  ’--- RESET
  94.  SPOFS I,120,88
  95.  SPSCALE I,0,0
  96.  ’--- NEW
  97.  R=RND(60)+15
  98.  SPOFS I,RND(256),RND(192),R
  99.  SPSCALE I,50,R
  100. @TISKIP
  101. NEXT
  102. RETURN
  103. ’───────────────────────────
  104. @SSTART
  105. ’───────────────────────────
  106. W=W-1:IF W<0 GOTO @_SIEND
  107. GOSUB @ANYBUT
  108. IF R==FALSE THEN RETURN
  109. @_SIEND
  110. RQ=2
  111. RETURN
  112. ’---
  113. @SSINIT
  114. CLS:BGMSTOP
  115. X=13:Y=11:W=60*1
  116. LOCATE X,Y:PRINT”Ready?”
  117. FOR I=0 TO 31
  118.  SPOFS I,120,88,15
  119.  SPSCALE I,0,15
  120. NEXT
  121. RETURN
  122. ’---
  123. @BGINIT
  124. BGOFS 0,0,0
  125. BGOFS 1,0,0
  126. FOR Y=0 TO 63
  127.  FOR X=0 TO 63
  128.   BGPUT 0,X,Y,0,0,0,0
  129.   BGPUT 1,X,Y,0,0,0,0
  130.  NEXT
  131. NEXT
  132. RETURN
  133. ’───────────────────────────
  134. @SCLEAR
  135. ’───────────────────────────
  136. GOSUB @ANYBUT
  137. IF R==FALSE THEN RETURN
  138. RQ=3
  139. RETURN
  140. @SCINIT
  141. CLS:BGMPLAY 9
  142. X=13:Y=11:W=60*1
  143. LOCATE X,Y:PRINT”CLEAR!”
  144. RETURN
  145. ’───────────────────────────
  146. @GOVER
  147. ’───────────────────────────
  148. GLINE MX*8,MY*8,RND(256),RND(256),RND(256)
  149. GCIRCLE MX*8,MY*8,RND(100)+2,RND(256)
  150. IF BGMCHK() THEN RETURN
  151. GOSUB @ANYBUT
  152. IF R==FALSE THEN RETURN
  153. ’---
  154. GCLS:SPCLR
  155. RQ=0
  156. RETURN
  157. ’---
  158. @OVINIT
  159. CLS:BGMPLAY 6:BGMW=TRUE
  160. X=11:Y=11
  161. LOCATE X,Y:PRINT”GAME OVER”
  162. RETURN
  163. ’───────────────────────────
  164. @GAME
  165. ’───────────────────────────
  166. GOSUB @MYSHIP
  167. GOSUB @SHOT
  168. GOSUB @ENEMY
  169. ’GOSUB @PUTSCO
  170. GOSUB @MAPSCRL
  171. RETURN
  172. ’---
  173. @MAPSCRL
  174. GX=GX+GVX
  175. GY=GY+GVY
  176. BGOFS 0,GX*2,GY*2
  177. BGOFS 1,GX,GY
  178. RETURN
  179. ’---
  180. @MYSHIP
  181. ’--- ニュウリョクカクニン
  182. GOSUB @GETVEC
  183. ’---
  184. RETURN
  185. @MYCLR
  186. BEEP 32
  187. STG=STG+1
  188. IF STG==4 THEN RQ=4:RETURN
  189. ’---
  190. BGMPLAY 4
  191. BGMW=TRUE
  192. RQ=1
  193. RETURN
  194. ’---
  195. @GETVEC
  196. C=B AND 15:S=3
  197. IF C==4 THEN MA=MA-S:IF MA<0 THEN MA=MA+360
  198. IF C==8 THEN MA=MA+S:IF MA>360 THEN MA=MA-360
  199. IF C==1 THEN MV=MV+0.05:IF MV>2 THEN MV=2
  200. IF C==2 THEN MV=MV-0.05:IF MV<1 THEN MV=1
  201. R=RAD(MA)
  202. VX=COS(R)*MV
  203. VY=SIN(R)*MV
  204. MX=MX+VX:MY=MY+VY
  205. IF MX<16 THEN MX=16
  206. IF MX>239 THEN MX=240
  207. IF MY<16 THEN MY=16
  208. IF MY>175 THEN MY=176
  209. GVX=VX:GVY=VY
  210. I=0:X=MX:Y=MY:A=MA:S=MS:F=TRUE
  211. GOSUB @SETOFSP
  212. RETURN
  213. ’---
  214. @DEAD
  215. BEEP 55,-2000
  216. RQ=3
  217. RETURN
  218. ’---
  219. @SHOT
  220. IF QC GOTO @QMOVE
  221. IF (B AND 16)==0 THEN RETURN
  222. ’--- ハッセイ
  223. QC=1:QA=MA:QV=1.0
  224. QX=MX:QY=MY
  225. ’--- イト゛ウ
  226. @QMOVE
  227. X=QX:Y=QY:R=RAD(QA)
  228. VX=COS(R)*QV
  229. VY=SIN(R)*QV
  230. X=X+VX
  231. Y=Y+VY
  232. IF X<-16 THEN QC=0
  233. IF X>272 THEN QC=0
  234. IF Y<-16 THEN QC=0
  235. IF Y>208 THEN QC=0
  236. QV=QV+0.5
  237. QX=X:QY=Y
  238. I=2
  239. SPOFS I,X-8,Y-8
  240. RETURN
  241. ’---
  242. @ENEMY
  243. I=3:F=FALSE
  244. FOR J=0 TO ECNT-1
  245.  
  246.  ’--- アキ?
  247.  IF E(J,_C)==0 GOTO @ENEXT
  248.  
  249.  ’--- タマニアタッタ?
  250.  X=E(J,_X):Y=E(J,_Y)
  251.  S=E(J,_S)
  252.  IF QC==0 GOTO @EROLL
  253.  IF X-8*S>QX GOTO @EROLL
  254.  IF X+8*S<QX GOTO @EROLL
  255.  IF Y-8*S>QY GOTO @EROLL
  256.  IF Y+8*S<QY GOTO @EROLL
  257.  
  258.  ’--- アタリ
  259.  GOSUB @SHOTDEAD
  260.  E(J,_C)=0
  261.  L=E(J,_L)
  262.  IF L==3 GOTO @ENEXT
  263.  
  264.  ’--- フ゛ンリ
  265.  L=L+1:S=S*0.75
  266.  FOR JJ=0 TO L
  267.   GOSUB @EBORN
  268.  NEXT JJ
  269.  GOTO @ENEXT
  270.  
  271.  ’---
  272. @EROLL
  273.  A=E(J,_A):B=FLOOR(A)
  274.  C=FLOOR(E(J,_N))
  275.  IF B==C GOTO @ESKIP
  276.  
  277.  ’--- カクト゛アワセ
  278.  B=B+E(J,_V)
  279.  IF B>360 THEN B=B-360
  280.  IF B<0 THEN B=B+360
  281.  E(J,_A)=B:A=B
  282.  V=0
  283.  IF B!=C GOTO @EMOVE
  284.  E(J,_V)=8
  285.  GOTO @EMOVE
  286.  
  287.  ’--- 
  288. @ESKIP
  289.  V=E(J,_V):V=V-0.5
  290.  E(J,_V)=V
  291.  IF V>0 GOTO @EMOVE
  292.  
  293.  ’--- ネラウ
  294.  D=ATAN(MY-Y,MX-X)
  295.  N=DEG(D)
  296.  IF N<0 THEN N=N+360
  297.  IF N>360 THEN N=N-360
  298.  E(J,_N)=N
  299.  B=A-N:C=A+360-N:V=SGN(B)
  300.  IF ABS(B)>ABS(C) GOTO @EAVEC
  301.  V=SGN(C)
  302. @EAVEC
  303.  E(J,_V)=V
  304.  GOTO @ENEXT
  305.  
  306.  ’--- イト゛ウ
  307. @EMOVE
  308.  R=RAD(A)
  309.  VX=COS(R)*V
  310.  VY=SIN(R)*V
  311.  X=X+VX:E(J,_X)=X
  312.  Y=Y+VY:E(J,_Y)=Y
  313.  GOSUB @SETOFS
  314.  
  315.  ’---
  316. @ENEXT
  317.  I=I+1
  318.  
  319. NEXT J
  320. RETURN
  321. ’---
  322. @SHOTDEAD
  323. QC=0:QX=-64
  324. SPOFS 2,QX,QY
  325. RETURN
  326. ’---
  327. @PUTSCO
  328. X=0:Y=1
  329. LOCATE X,Y:PRINT”     ”
  330. LOCATE X,Y:PRINT SCO
  331. X=X+10
  332. LOCATE X,Y:PRINT”     ”
  333. LOCATE X,Y:PRINT MV
  334. X=X+10
  335. LOCATE X,Y:PRINT”     ”
  336. LOCATE X,Y:PRINT DOT
  337. RETURN
  338. ’---
  339. @GINIT
  340. CLS:SPCLR
  341. BGMPLAY 17
  342. BGCLIP 0,2,31,23
  343. ’---
  344. GX=0:GY=0:GVX=0:GVY=0
  345. WX=33:BY=0:SY=22
  346. YY=0:WX2=33
  347. ’---
  348. COLOR 7
  349. X=0:Y=0
  350. LOCATE X,Y:PRINT”SCORE”;
  351. X=X+10
  352. LOCATE X,Y:PRINT”SPEED”;
  353. X=X+10
  354. LOCATE X,Y:PRINT”REST”;
  355. LOCATE 0,23:PRINT”STAGE:”;
  356. PRINT STG+1;
  357. COLOR 0
  358. ’--- BGクリア
  359. FOR I=0 TO 100
  360.  X=RND(64):Y=RND(64)
  361.  BGPUT 0,X,Y,&H35B,12,0,0
  362.  X=RND(64):Y=RND(64)
  363.  BGPUT 1,X,Y,&H37B,12,0,0
  364. NEXT
  365. ’--- シ゛フ゛ン
  366. PR=1:SCO=0:I=0:F=TRUE
  367. MX=120:MY=88
  368. MA=0:MS=1.0:MV=1.0
  369. SPSET I,136,2,0,0,PR
  370. SPSET I+1,40,0,0,0,PR
  371. SPANIM I+1,2,3,0
  372. X=MX:Y=MY:A=MA:GOSUB @SETOFS
  373. SPSET I+2,10,0,0,0,0
  374. GOSUB @SETOFSP
  375. ’--- タマ
  376. I=2:QX=-64:QY=QX
  377. QV=1.0:QC=0
  378. SPSET I,142,4,0,0,PR
  379. SPOFS I,QX,QY
  380. SPANIM I,2,4,0
  381. ’--- テキ
  382. I=3:S=2.0:F=FALSE
  383. FOR J=0 TO ECNT-1
  384.  SPSET I,136,10,0,0,PR
  385.  SPOFS I,-64,-64
  386.  E(J,_C)=0
  387.  I=I+1
  388. NEXT
  389. ’---
  390. L=0
  391. X=RND(256):Y=RND(192)
  392. GOSUB @EBORN
  393. RETURN
  394. ’--- アタラシイテキノセイセイ
  395. @EBORN
  396. II=3
  397. FOR K=0 TO ECNT-1
  398.  IF E(K,_C)==0 GOTO @EMAKE
  399.  II=II+1
  400. NEXT K
  401. RETURN
  402. ’---
  403. @EMAKE
  404. E(K,_C)=1
  405. E(K,_X)=X:E(K,_Y)=Y
  406. E(K,_S)=S:E(K,_L)=L
  407. E(K,_V)=0.0
  408. A=RND(360)
  409. E(K,_A)=A
  410. E(K,_N)=A
  411. TMP=I:I=II
  412. GOSUB @SETOFS
  413. I=TMP
  414. RETURN
  415. ’───────────────────────────
  416. ’カイテンヲコウリョシタヒョウシ゛
  417. ’───────────────────────────
  418. @SETOFS ’I,X,Y,A,S
  419. D=A+45:D=D%360
  420. D=RAD(D)
  421. R=9.8 :’SQR(7*7+7*7)
  422. R=R*S
  423. X=X-COS(D)*R
  424. Y=Y-SIN(D)*R
  425. SPOFS I,X,Y
  426. SPANGLE I,A
  427. SPSCALE I,S*100
  428. RETURN
  429. ’--- ホノオツキ
  430. @SETOFSP
  431. GOSUB @SETOFS
  432. ’---
  433. D=RAD(A)
  434. ’R=9.8 :’テキト゛ナキョリ
  435. X=X-COS(D)*R
  436. Y=Y-SIN(D)*R
  437. SPOFS I+1,X,Y
  438. SPANGLE I+1,A
  439. SPSCALE I+1,S*100
  440. RETURN