スマイルブーム自家製プログラム特集 PART1 →PART2

BLOCK by スマイルブーム

再生

 スタンダードなブロックくずしタイプのゲームを作ってみたぞ。
 Aボタンでボール発射。ブロックやカベに反射するボールを、十字ボタン左右で動かすパドルで受け止めよう。ボールを落としてしまうとミスになるぞ。
 キミはボール10個をなくす前に、全部のブロックを壊すことができるかな?


 CHECK POiNT 

インテリ
今回の更新ではスマイルブームのスタッフ製プログラムを特集するよ。

ワンパク
ユーザーからの投稿プログラムもケッコーたまってんだろ? そっちが先じゃねェか?

博士
うむ。まさにこうしている間にもぞくぞく投稿が届いておるわけじゃが、それがスマイルブーム製プログラムより進んでおるときては、もう化けの皮がはがれる前に公開した方が……。

ワンパク
テメェエー! そっちの都合じゃねえか! この資本主義のブタどもがァー!

博士
冗談じゃ冗談じゃ。だいたい8割くらいは冗談じゃ。もともと参考にしてもらうために作ったプログラムじゃから、投稿作より先になるべく早く公開すべきと判断されたのじゃよ。

神崎
(8割……?)

博士
このプログラムではパドルとボールがスプライトなのに、ブロックにはコンソール画面を使っているというのが面白いのう。
56行以降ブロックの当たり判定にCHKCHRを使って、ブロックのどこに当たったのかが文字情報でわかり、それ次第でボールの反射を制御するしくみなのじゃな。

ワンパク
なんだかゴマカされた気もするが、たしかに応用の効きそうなアイデアだぜ。しかし……このゲーム、難しくねーか? 反射角も90度固定だしよォ……。

博士
そこはホレ、プログラマー諸君の今後の工夫しだいじゃよ。

ワンパク
テメェエー! 面倒くさそうなとこブン投げてんじゃねエぞ! この拝金主義者どもがァー!

神崎
落ち着いてワンパク君! もともとそういう趣旨の特集だから! きみの言葉もさっきから何か間違ってるから!

インテリ
この「当たった場所によって挙動を変える」考え方をパドルにもあてはめることから始めるといいかもね。ブロックもコンソールの味気ないフォントだけど、フォントリソースを書き換えたり、スプライトやBGに切り替えるといいと思うよ。

プログラムリスト

  1. ’┌─────────┐
  2. ’│フ゛ロッククス゛シ│
  3. ’└─────────┘
  4. CLEAR
  5. VISIBLE 1,1,0,0,1,0
  6. SPPAGE 0:SPCLR
  7. DIM B$(2,2)
  8. DATA ”   ”
  9. DATA ”   ”
  10. DATA ”┌─┐”
  11. DATA ”└─┘”
  12. FOR I=0 TO 1
  13.  FOR J=0 TO 1
  14.   READ B$(I,J)
  15.  NEXT
  16. NEXT
  17. ’---
  18. DIM CL(8)
  19. DATA 3,4,9,13,12
  20. FOR I=0 TO 4
  21.  READ CL(I)
  22. NEXT
  23. ’---
  24. FLW=-1:REQ=1
  25. ’---
  26. @LOOP
  27.  OLDB=B:B=BUTTON()
  28.  IF FLW==REQ THEN @SKIP
  29.  FLW=REQ
  30.  ON FLW GOSUB @GI,@TI,@CI,@EI
  31. @SKIP
  32.  ON FLW GOSUB @GM,@TM,@CM,@EM
  33.  VSYNC 1
  34. GOTO @LOOP
  35. ’---
  36. @GM
  37. VX=0
  38. IF B==16 THEN BS=1
  39. IF B AND 4 THEN VX=-1
  40. IF B AND 8 THEN VX=1
  41. IF VX==0 THEN @BMOVE
  42. PX=PX+VX*6
  43. IF PX<16  THEN PX=16
  44. IF PX>239 THEN PX=239
  45. ’---
  46. @BMOVE
  47. IF BS==0 THEN @PUTALL
  48. ’---タマイト゛ウ
  49. OLDBY=BY
  50. BX=BX+(BVX*SPD)
  51. BY=BY+(BVY*SPD)
  52. ’---タマトフ゛ロック
  53. X=FLOOR(BX/8)
  54. Y=FLOOR(BY/8)
  55. C=CHKCHR(X,Y)
  56. IF C==-1 THEN @CHKWALL
  57. C$=CHR$(C)
  58. IF C$==”└” THEN @HITL
  59. IF C$==”┘” THEN @HITL
  60. IF C$==”┌” THEN @HITH
  61. IF C$==”┐” THEN @HITH
  62. IF C$==”─” THEN @HIT
  63. GOTO @CHKWALL
  64. ’---フ゛ロックテ゛ハンシャ
  65. @HITL
  66. IF BVY<0 THEN @HIT
  67. GOTO @HITX
  68. @HITH
  69. IF BVY>0 THEN @HIT
  70. @HITX
  71. BVX=-BVX
  72. GOTO @HIT2
  73. ’---フ゛ロックハカイ
  74. @HIT
  75. BVY=-BVY
  76. ’---
  77. @HIT2
  78. BEEP 8
  79. I=FLOOR((Y-4)/2)
  80. SC=SC+((4-I)*10)
  81. I=(I*10)+FLOOR((X-1)/3)
  82. T=0:GOSUB @PUTBLK
  83. ’---クリア
  84. BLK=BLK-1
  85. IF BLK==0 THEN REQ=2
  86. ’---タマトカヘ゛
  87. @CHKWALL
  88. IF BX<16  THEN BX=16:GOSUB @REVX
  89. IF BX>239 THEN BX=239:GOSUB @REVX
  90. IF BY<16  THEN BY=16:GOSUB @REVY
  91. IF BY>224 THEN @DEAD
  92. IF OLDBY>PY  THEN @PUTALL
  93. IF BY<PY  THEN @PUTALL
  94. ’---フ゜レイヤ-トノハンテイ
  95. X=ABS(BX-PX)
  96. IF X>20 THEN @PUTALL
  97. ’---ハンシャ
  98. GOSUB @REVY2
  99. BY=PY-1
  100. GOTO @PUTALL
  101. ’---タマショキカ
  102. @DEAD
  103. BS=0:BVY=-2:BY=PY-1
  104. LF=LF-1:SPD=1.0
  105. BEEP 5
  106. ’---ケ゛-ムオ-ハ゛-
  107. IF LF<0 THEN REQ=3:LF=0
  108. ’---
  109. @PUTALL
  110. GOSUB @PUTBAR
  111. GOSUB @PUTBALL
  112. GOSUB @PUTSTAT
  113. RETURN
  114. ’---
  115. @REVX
  116. BVX=-BVX:BEEP 8
  117. SPD=SPD+0.05
  118. RETURN
  119. ’---
  120. @REVY
  121. SPD=SPD+0.1
  122. @REVY2
  123. BVY=-BVY:BEEP 8
  124. RETURN
  125. ’---
  126. @PUTBLK
  127. X=FLOOR(I%10)*3+1
  128. Y=FLOOR(I/10)
  129. COLOR CL(Y)
  130. Y=Y*2+4
  131. FOR J=0 TO 1
  132.  LOCATE X,Y+J
  133.  PRINT B$(T,J)
  134. NEXT
  135. COLOR 0
  136. RETURN
  137. ’---
  138. @PUTBAR
  139. SPOFS 1,PX-16,PY
  140. SPOFS 2,PX,PY
  141. RETURN
  142. ’---
  143. @PUTBALL
  144. IF BS==0 THEN BX=PX:BY=PY-1
  145. SPOFS 0,BX-8,BY-8
  146. RETURN
  147. ’---
  148. @GI
  149. VISIBLE 0,1,0,0,0,0
  150. CLS
  151. BGMPLAY 0
  152. BX=128:BY=22*8:BS=0
  153. BVX=2:BVY=-2
  154. SPSET 0,252,2,0,0,0
  155. SPANIM 0,2,4,0
  156. ’---
  157. PX=128:PY=22*8
  158. SC=0:LF=9:SPD=1.0
  159. SPSET 1,272,12,0,0,1
  160. SPSET 2,272,12,1,0,1
  161. COLOR 8
  162. FOR I=0 TO 31:PRINT”В”;:NEXT
  163. FOR I=1 TO 22
  164.  LOCATE 0,I:PRINT”В”
  165.  LOCATE 31,I:PRINT”В”;
  166. NEXT
  167. COLOR 0
  168. ’---
  169. T=1:BLK=0
  170. FOR I=0 TO 10*4-1
  171.  GOSUB @PUTBLK
  172.  BLK=BLK+1
  173. NEXT
  174. ’---
  175. GOSUB @PUTALL
  176. ’---
  177. VISIBLE 1,1,0,0,1,0
  178. RETURN
  179. ’---
  180. @PUTSTAT
  181. LOCATE 0,23
  182. PRINT”SCORE:”;SC;
  183. LOCATE 24,23
  184. PRINT”LEFT:”;LF;
  185. RETURN
  186. ’┌────┐
  187. ’│タイトル│
  188. ’└────┘
  189. @TI
  190. CLS:SPCLR
  191. BGMPLAY 15
  192. LOCATE 0,6
  193. PRINT”    ВВВл Вл   ВВВВлВВВВлВ  Вл”
  194. PRINT”    ВлВ  В    Вл В Вл  лВ ВВ ”
  195. PRINT”    ВВВВлВ    В  В В    ВВВлл”
  196. PRINT”    Вл В В    В  В В    ВлВВл”
  197. PRINT”    ВВВВ ВВВВлВВВВ ВВВВлВ лВ ”
  198. PRINT”    л   лл   лл   лл   ллл лл”
  199. LOCATE 8,14
  200. PRINT”PUSH ANY BUTTON”
  201. LOCATE 4,22
  202. PRINT”(C)2011 SmileBoom Co.Ltd.”
  203. RETURN
  204. ’---
  205. @TM
  206. IF OLDB!=0 THEN RETURN
  207. IF B==0 THEN RETURN
  208. ’---
  209. REQ=0
  210. RETURN
  211. ’┌───┐
  212. ’│クリア│
  213. ’└───┘
  214. @CI
  215. BGMPLAY 4
  216. RETURN
  217. ’---
  218. @CM
  219. IF BGMCHK() THEN RETURN
  220. IF B!=0 THEN RETURN
  221. REQ=1
  222. RETURN
  223. ’┌─────────┐
  224. ’│ケ゛-ムオ-ハ゛-│
  225. ’└─────────┘
  226. @EI
  227. BGMPLAY 6
  228. SPCLR
  229. LOCATE 11,12
  230. PRINT”GAME OVER”
  231. RETURN
  232. ’---
  233. @EM
  234. IF BGMCHK() THEN RETURN
  235. IF B!=0 THEN RETURN
  236. REQ=1
  237. RETURN