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