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