プチコンまとめWiki (初代/mkII)

投稿プログラム : 簡素ブロックくずし

2011年12月07日投稿 / 投稿者 : shiro / タグ : 投稿プログラム ゲーム アクションゲーム QRコード 初代対応

概要

昔のアーケードゲームを思い出しながら作りました。
公式のプログラムリストにもブロックくずしがありますが、あえて1から自分で作ってみました。

遊び方

起動するとデモ画面が出ます。Aボタンでゲームがスタートします。
パドルは下画面をタッチして動かしてください。十字キーには対応していません。
アイテムなどは何も出ません。ひたすらボールを打ち返してブロックを消してください。
向こう側の壁にボールが当たると、パドルの長さが半分になります。
ボールは3個です。400点でボールが1個追加されます。
2面クリアしても終わりません。ずっと続きます。

おまけ

DSiLLで開発しています。3DSだとボールが速過ぎると思いますので、49行目のウェイトの値を増やしてください。
かつて8ビットマシンの時代にブロックくずしを作りましたが、BASICでは速度が足りず、マシン語ルーチンを組み込んで何とか遊べる代物になりました。
今はオールBASICでこれだけ高速なブロックくずしが作れるんですね。楽しいです。
ゲームタイトルは最初「元祖ブロックくずし」にしようと思ったのですが、既に使っている人がいたので、「簡素」にしてみました。

スクリーンショット・動画

demo2.jpg
game2.jpg

QR コード

プチコンmkII 向けの QR コードです。

12
qr2-1.pngqr2-2.png
34
qr2-3.pngqr2-4.png

プログラムリスト

  1. ’**************
  2. ’*            *
  3. ’*    カンソ     *
  4. ’* フ゛ロック クス゛シ *
  5. ’*            *
  6. ’* 2012.1.19  *
  7. ’*  by shiro  *
  8. ’*            *
  9. ’**************
  10. ’*** ショキ セッテイ ***
  11. CLEAR
  12. VISIBLE 1,0,0,0,1,1
  13. PNLTYPE ”OFF”
  14. CLS
  15. GPAGE 0:GCLS 0
  16. GPAGE 1:GCLS 0
  17. BGMSTOP
  18. GPAGE 0
  19. SPPAGE 0
  20. DIM BLOCK(14,8),COLBLK(8)
  21. ’ケ゛ーム モート゛
  22. GMDEMO=0
  23. GMPLAY=1
  24. GMMISS=2
  25. ’フ゛ロック
  26. BLOCKMAX=14*8
  27. BLKOX=56:BLKOY=16
  28. BLKWX=14:BLKWY=6
  29. ’スクリーン サイス゛
  30. SCRMINX=55:SCRMAXX=SCRMINX+BLKWX*14+2
  31. SCRMINY=0:SCRMAXY=191
  32. ’ハ゜ト゛ル
  33. PADIX=150:PADY=189
  34. PADWL=28:PADWS=14
  35. PADWY=2
  36. ’ホ゛ール
  37. SPSET 0,254,1,0,0,0
  38. SPSCALE 0,150
  39. BALLMAX=3
  40. BALLIX=110:BALLIY=82
  41. BALLWT0=12:BALLWT1=10
  42. ’スコア
  43. SCOREX=0:SCOREY=0
  44. SCOREB=400
  45. ’ホ゛ール ノコリ
  46. BALLCX=0:BALLCY=3
  47. ’メッセーシ゛
  48. MESX=12:MESY=13
  49. ’カラー
  50. COLPAD=15
  51. COLWALL=15
  52. COLMES=0
  53. COLSCORE=0:COLBALLC=0
  54. FOR Y=0 TO 7
  55. READ COLBLK(Y)
  56. NEXT Y
  57. DATA 3,3,12,12,11,11,15,15
  58. ’サウント゛
  59. BPPAD=4096:BPWALL=2048:BPBLOCK=0
  60. BPBONUS=3
  61. GOSUB @INIBLOCK
  62. GOSUB @PRTSCORE
  63. GOSUB @PRTBALLC
  64. ’*** テ゛モ ***
  65. @DEMO
  66. GM=GMDEMO
  67. GOSUB @PRTBLOCK
  68. BALLSP=3
  69. BALLX=BALLIX:BALLY=BALLIY
  70. BALLDX=1:BALLDY=1
  71. GOSUB @PRTPADLN
  72. COLOR COLMES
  73. LOCATE MESX,MESY
  74. PRINT ”PUSH A TO START”
  75. LOCATE MESX,MESY+2
  76. PRINT ” PUSH B TO END”
  77. @DEMOLOOP
  78. GOSUB @MOVEBALL
  79. FOR I=0 TO BALLWT0+BALLWT1*BALLSP:GOSUB @PRTWALL:NEXT I
  80. IF (BUTTON() AND 16)!=0 GOTO @GAMEINIT
  81. IF (BUTTON() AND 32)!=0 GOTO @ENDINIT
  82. GOTO @DEMOLOOP
  83. ’*** ケ゛ーム ショキカ ***
  84. @GAMEINIT
  85. SCORE=0
  86. BALLC=BALLMAX
  87. CLBLOCK=FALSE
  88. CLS:GCLS 0
  89. GOSUB @PRTWALL
  90. GOSUB @INIBLOCK
  91. GOSUB @PRTBLOCK
  92. GOSUB @PRTSCORE
  93. ’*** ケ゛ーム リスタート ***
  94. @RESTART
  95. GM=GMPLAY
  96. BALLSP=3
  97. BALLDX=1:BALLDY=1
  98. PADX=PADIX:PADWX=PADWL
  99. PADRFC=0
  100. RFPAD=FALSE:RFBLOCK=FALSE
  101. GOSUB @PRTPAD
  102. GOSUB @PRTBALLC
  103. BALLX=BALLIX:BALLY=BALLIY
  104. GOSUB @PRTBALL
  105. VSYNC 150
  106. ’*** メイン ルーフ゜ ***
  107. @MAINLOOP
  108. GOSUB @MOVEPAD
  109. GOSUB @MOVEBALL
  110. FOR I=0 TO BALLWT0+BALLWT1*BALLSP:GOSUB @PRTWALL:NEXT I
  111. IF GM==GMPLAY GOTO @MAINLOOP
  112. ’*** ミス ***
  113. VSYNC 150
  114. BALLC=BALLC−1
  115. GOSUB @PRTBALLC
  116. IF BALLC==0 GOTO @DEMO
  117. GOSUB @ERCPAD
  118. GOTO @RESTART
  119. ’*** ケ゛ーム シュウリョウ ***
  120. @ENDINIT
  121. VISIBLE 1,1,1,1,1,1
  122. CLS
  123. GPAGE 0:GCLS 0
  124. SPCLR
  125. END
  126. ’===== サフ゛ルーチン =====
  127. ’*** カヘ゛ ヒョウシ゛ ***
  128. @PRTWALL
  129. GLINE SCRMINX,SCRMINY,SCRMINX,SCRMAXY,COLWALL
  130. GLINE SCRMAXX,SCRMINY,SCRMAXX,SCRMAXY,COLWALL
  131. RETURN
  132. ’*** テ゛モ ハ゜ト゛ルライン ヒョウシ゛ ***
  133. @PRTPADLN
  134. GFILL SCRMINX+1,PADY,SCRMAXX−1,PADY+PADWY,COLPAD
  135. RETURN
  136. ’*** フ゛ロック ショキカ ***
  137. @INIBLOCK
  138. BLOCKC=BLOCKMAX
  139. FOR X=0 TO 13
  140. BLOCK(X,0)=7:BLOCK(X,1)=7
  141. BLOCK(X,2)=5:BLOCK(X,3)=5
  142. BLOCK(X,4)=3:BLOCK(X,5)=3
  143. BLOCK(X,6)=1:BLOCK(X,7)=1
  144. NEXT X
  145. RETURN
  146. ’*** フ゛ロック ヒョウシ゛ ***
  147. @PRTBLOCK
  148. FOR X=0 TO 13
  149. FOR Y=0 TO 7
  150. IF BLOCK(X,Y)==0 THEN @PRTBLK2
  151. GX=BLKOX+X*BLKWX
  152. GY=BLKOY+Y*BLKWY
  153. GCOLOR COLBLK(Y)
  154. GFILL GX+1,GY+1,GX+BLKWX−1,GY+BLKWY−1
  155. @PRTBLK2
  156. NEXT Y
  157. NEXT X
  158. RETURN
  159. ’*** ハ゜ト゛ルヲ ウコ゛カス ***
  160. @MOVEPAD
  161. GOSUB @ERCPAD
  162. IF TCHST==TRUE THEN PADX=TCHX
  163. IF PADX−PADWX/2<=SCRMINX THEN PADX=SCRMINX+PADWX/2
  164. IF PADX+PADWX/2>=SCRMAXX−1 THEN PADX=SCRMAXX−PADWX/2−1
  165. GOSUB @PRTPAD
  166. RETURN
  167. ’ハ゜ト゛ル ヒョウシ゛
  168. @PRTPAD
  169. GFILL PADX−PADWX/2+1,PADY,PADY+PADWY,COLPAD
  170. RETURN
  171. ’ハ゜ト゛ル ショウキョ
  172. @ERCPAD
  173. GFILL PADX−PADWX/2+1,PADY,PADY+PADWY,0
  174. RETURN
  175. ’*** ホ゛ールヲ ウコ゛カス ***
  176. @MOVEBALL
  177. IF BALLX<=SCRMINX+2 THEN GOSUB @RFWALLL
  178. IF BALLX>=SCRMAXX−2 THEN GOSUB @RFWALLR
  179. IF BALLY<SCRMINY THEN GOSUB @RFWALLU
  180. IF BALLY>SCRMAXY+1 THEN GOSUB @RFMISS:RETURN
  181. IF BALLY<PADY−2 OR BALLY>PADY THEN RFPAD=FALSE:GOTO @NOPAD
  182. IF GM==GMDEMO THEN GOSUB @RFPADLN:GOTO @NOPAD
  183. IF 0<=PADX−BALLX AND PADX−BALLX<=PADWX/2 AND RFPAD==FALSE THEN GOSUB @RFPADL
  184. IF 0<BALLX−PADX AND BALLX−PADX<=PADWX/2+1 AND RFPAD==FALSE THEN GOSUB @RFPADR
  185. @NOPAD
  186. @CHKBLOCK
  187. IF RFBLOCK==TRUE GOTO @NOBLOCK
  188. BX=FLOOR((BALLX−BLKOX)/BLKWX)
  189. BY=FLOOR((BALLY−BLKOY)/BLKWY)
  190. IF BY<0 OR BY>7 GOTO @NOBLOCK
  191. IF BLOCK(BX,BY)>0 THEN GOSUB @RFBLOCK
  192. @NOBLOCK
  193. BALLX=BALLX+BALLDX
  194. BALLY=BALLY+BALLDY
  195. GOSUB @PRTBALL
  196. RETURN
  197. ’ホ゛ール ヒョウシ゛
  198. @PRTBALL
  199. SPOFS 0,BALLX−12,BALLY−12
  200. RETURN
  201. ’ハンシャ ハ゜ト゛ル ヒタ゛リ
  202. @RFPADL
  203. BEEP 0,BPPAD
  204. BALLDX=−1:BALLDY=−BALLDY
  205. GOSUB @BALLPTRN
  206. RFPAD=TRUE:RFBLOCK=FALSE
  207. IF CLBLOCK==TRUE THEN GOSUB @PRTBLOCK:CLBLOCK=FALSE
  208. RETURN
  209. ’ハンシャ ハ゜ト゛ル ミキ゛
  210. @RFPADR
  211. BEEP 0,BPPAD
  212. BALLDX=1:BALLDY=−BALLDY
  213. GOSUB @BALLPTRN
  214. RFPAD=TRUE:RFBLOCK=FALSE
  215. IF CLBLOCK==TRUE THEN GOSUB @PRTBLOCK:CLBLOCK=FALSE
  216. RETURN
  217. ’ハンシャ ハ゜ト゛ルライン
  218. @RFPADLN
  219. BALLDY=−BALLDY
  220. GOSUB @BALLPTRN
  221. RFBLOCK=FALSE
  222. RETURN
  223. ’ホ゛ール ハ゜ターン
  224. @BALLPTRN
  225. PADRFC=PADRFC+1
  226. IF PADRFC==5 AND BALLSP!=0 THEN BALLSP=2
  227. IF PADRFC==11 AND BALLSP!=0 THEN BALLDY=−0.5
  228. IF PADRFC==15 AND BALLSP!=0 THEN BALLSP=1:BALLDY=−1
  229. RETURN
  230. ’ハンシャ カヘ゛ ヒタ゛リ
  231. @RFWALLL
  232. IF GM==GMPLAY THEN BEEP 0,BPWALL
  233. BALLDX=1
  234. RETURN
  235. ’ハンシャ カヘ゛ ミキ゛
  236. @RFWALLR
  237. IF GM==GMPLAY THEN BEEP 0,BPWALL
  238. BALLDX=−1
  239. RETURN
  240. ’ハンシャ カヘ゛ ウエ
  241. @RFWALLU
  242. BALLDY=−BALLDY
  243. RFBLOCK=FALSE
  244. IF GM==GMDEMO THEN RETURN
  245. IF PADWX==PADWL THEN GOSUB @ERCPAD:PADWX=PADWS:GOSUB @PRTPAD
  246. RETURN
  247. ’ハンシャ フ゛ロック
  248. @RFBLOCK
  249. BALLDY=−BALLDY
  250. RFBLOCK=TRUE
  251. IF BY<=3 THEN BALLSP=0:BALLDY=SGN(BALLDY)
  252. IF GM==GMDEMO THEN RETURN
  253. BEEP 0,BPBLOCK
  254. SCORE0=SCORE
  255. SCORE=SCORE+BLOCK(BX,BY)
  256. GOSUB @PRTSCORE
  257. BLOCK(BX,BY)=0
  258. BLOCKC=BLOCKC−1
  259. GX=BLKOX+BX*BLKWX
  260. GY=BLKOY+BY*BLKWY
  261. GFILL GX+1,GY+1,GX+BLKWX−1,GY+BLKWY−1,0
  262. IF SCORE0<SCOREB AND SCORE>=SCOREB THEN BALLC=BALLC+1:GOSUB @PRTBALLC:BEEP BPBONUS
  263. IF BLOCKC==0 THEN CLBLOCK=TRUE
  264. RETURN
  265. ’ミス
  266. @RFMISS
  267. GM=GMMISS
  268. RETURN
  269. ’*** スコア ヒョウシ゛ ***
  270. @PRTSCORE
  271. COLOR COLSCORE
  272. LOCATE SCOREX,SCOREY
  273. PRINT ”SCORE”
  274. LOCATE SCOREX,SCOREY+1
  275. PRINT SCORE
  276. RETURN
  277. ’*** ノコリ ホ゛ール ヒョウシ゛ ***
  278. @PRTBALLC
  279. COLOR COLBALLC
  280. LOCATE BALLCX,BALLCY
  281. PRINT ”BALL”
  282. LOCATE BALLCX,BALLCY+1
  283. PRINT ”    ”
  284. LOCATE BALLCX,BALLCY+1
  285. FOR I=1 TO BALLC
  286. PRINT ”○”;
  287. NEXT I
  288. RETURN

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • shiro : YouTubeにプレイ動画を上げたので、こちらにも追加しました。 (2011/12/09 (金) 00:18:48)
  • shiro : プログラムリスト内に数カ所間違いがあったので直しました。すみませんでした。 (2011/12/13 (火) 01:04:53)
  • shiro : ゲーム初期化部分を修正して、コードを短くしました。 (2012/01/19 (木) 12:42:07)
  • shiro : ニコニコ動画をプレーヤー表示にしました。 (2012/02/16 (木) 22:26:32)
  • 名無しさん : 一人しかコメント出してない。 (2012/02/23 (木) 19:25:01)
  • うおおおおおお : これをうつせというのかぁ (2012/03/11 (日) 09:16:05)
  • shiro : プチコンmkIIが出たら、QRコードを載せようと思います(^^)v (2012/03/11 (日) 13:58:24)
  • ウイング(うおおおおおお) : ワーイ (2012/03/11 (日) 18:23:03)
  • shiro : mkII用のQRコードを載せました。 (2012/03/14 (水) 17:12:01)
  • erukane : ありがとうございます。十字キーに対応させていただけると、うれしいです。あっと、自分でなんとかするのが先ですね。(^^;) (2012/03/15 (木) 08:56:01)
  • ウイング : プチコン (2012/03/15 (木) 16:00:02)
  • ウイング : ↑打ち間違い (2012/03/15 (木) 16:01:03)
  • ウイング : プチコンmkiiga (2012/03/15 (木) 16:01:47)
  • shiro : 十字キー対応にもできるのですが、ペンの方がパドルが操作しやすいと思います。私は既存のブロック崩しゲームが十字キーでしか操作できないのが不満でした… (2012/03/16 (金) 03:25:55)
  • erukane : shiroさん、了解致しました。そういうことだったんですね。リスト、参考になります。(^^) (2012/03/16 (金) 16:43:11)
  • 名無しさん : qrコード見えない・・・(´・ω・`) (2012/03/16 (金) 18:33:58)
  • shiro : どうもIE8だけQRコードを表示できないようです。chrome、Firefox、Safariなど別のブラウザを使ってみてください。 (2012/03/16 (金) 23:12:19)
  • shiro : IE8の方は、F12キーを押して開発者モードにして、ウインドウ下部に出るメニューで「ブラウザモード」「ドキュメントモード」を「IE7」にしてみてください。 (2012/03/16 (金) 23:13:47)
  • shiro : 投稿ページのタイトルが画像参照URLに入るのですが、タイトルに全角文字があるとエンコードされてURLに入り、その解釈がIE8だとうまくいかないようです。例えば英語タイトルの「TENORI-COM」ではその現象が起きていません。 (2012/03/16 (金) 23:20:21)
  • shiro : 面倒なので、6個のQRコードを1枚の合成画像に置き換えました。どうも表形式で並べると、IE8で見えなくなるようです。 (2012/03/16 (金) 23:46:58)
  • Dy : 359行にもわたるプログラムの開発、お疲れ様です。これからもがんばってください。 (2012/03/17 (土) 00:05:46)
  • プチコンまとめWiki管理人 : IE8での表示不具合の件、こちらで調査・対応してみます。申し訳ありません。 (2012/03/17 (土) 00:06:05)
  • プチコンまとめWiki管理人 : IE8以下の表示バグを回避するようにcssを修正しました。表の中に画像を埋め込む場合、HTMLの仕様とIEバグの都合上「#ref()」を使わず、以下のように記述していただく必要があります。大変お手数をおかけしました。 (2012/03/17 (土) 00:37:33)
    |&ref(qr1.png);|&ref(qr2.png);|
  • shiro : 管理人さん、対応ありがとうございます。合成画像で載せてしまったので、今回はこのままで行きたいと思います。 (2012/03/17 (土) 12:23:00)
  • カップラーメン : 十字ボタンで今までやっていましたw (2012/03/29 (木) 17:00:18)
  • 人間 : 処理抜け ブロックにあたったあと、ブロックにもう1度あたっても、壊れない (2012/04/09 (月) 14:33:18)
  • 人間 : ついでに改造法 47行(BALLLMAX=の後の数字)変えればボール増える (2012/04/09 (月) 14:47:18)
  • shiro : ブロックに当たった後、次にブロックに当たっても壊れないのは仕様ですw。初期のブロックくずしはそうなっていました。その後のアルカノイドなどは連続で壊れましたが。 (2012/04/29 (日) 17:17:54)
  • shiro : 残りボール数などを含めて、改造は各自で自由にやってみてください(^^) (2012/04/29 (日) 17:19:52)
  • shiro : ちなみに一度ブロックに当たったかどうかは変数RFBLOCKで判定していて、236行目のIF文をコメントアウトすれば連続でブロックに当たります。ただしその後のボールの動きがおかしくなるかもしれません。 (2012/04/29 (日) 17:27:07)
  • shiro : プチコンmkII Ver2.1を使って再保存して、QRコードの枚数を減らしました。 (2012/05/02 (水) 12:59:25)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.061 秒 | このページの最終更新 : 2013/02/20 (水) 17:14:43 (2340d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30