ブロック崩し④ 【HSP3】
前回はボールの移動についてみました。今回はバーとボールの当たり判定についてみていきます。また、ボールが下端に達したら「GAME OVER」を表示してみます。
●使用関数・命令
screen circle boxf repeat cls stick if await gosub
●全ソース
bb_sample01.txt
| 1. 2. 3. 4. 10. 11. 12. 13. 21. 22. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 47. 48. 49. 50. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. |
;*********************************************** ; 定数設定 ;*********************************************** 省略 ;*********************************************** ; 変数設定(デフォルト設定) ;*********************************************** 省略 ;■windowの設定 省略 ;■メイン処理 *main repeat cls gosub *bar_operation gosub *ball_move gosub *hit_judgment await 50 loop stop ;■バー操作 *bar_operation 省略 return ;■ボール動作 *ball_move 省略 ;下端(ゲームオーバー処理) if ballY >= ginfo_winy - BALL_SIZE { pos 70,150 font "MS ゴシック",30 mes "GAME OVER" stop } return ;■当たり判定処理 *hit_judgment if (barX+BAR_X_SIZE) > ballX AND barX < (ballX+BALL_SIZE) AND (barY+BAR_Y_SIZE) > ballY AND barY < (ballY+BALL_SIZE){ ballSpeedY = -ballSpeedY } return |

ボールは円ですが、当たり判定処理がやりやすいように円を囲む矩形として処理しています。バーも矩形ですので、矩形と矩形の当たり判定になります。矩形同士の当たり判定の方法は「当たり判定(矩形と矩形)」に詳しく書きましたのでこちらを参考にしてください。今回は当たり判定処理もサブルーチン「*hit_judgment」としました。77行目が当たり判定条件です。条件を満たせば78行目で縦方向の座標増減量の符号を逆にしています。Y座標が増え続けて下移動していたのが「当たり判定」により増減量の符号が変わりY座標が減り続け上移動になります。
ブロック崩し③では68行目からのボールが下端に達したときの処理は次のようにしていました。
;下端
if ballY >= ginfo_winy - BALL_SIZE {
ballY = ginfo_winy - BALL_SIZE
ballSpeedY = -ballSpeedY
}
この処理は下端をはみ出した分は下端ちょうどになるように座標を修正し、そしてY座標の増減量の符号を逆にしています。つまり「今回の当たり判定」と同様、ボールをはね返しています。ブロック崩しはボールが下端に達したら「GAME OVER」なのでその処理へ変更します。
「GAME OVER」という文字を表示して「stop」命令でプログラムを終了させています。「font」命令でフォントの種類とサイズを指定しました。


