ブロック崩し⑤ 【HSP3】
前回はボールとバーの当たり判定についてみました。今回はブロックを表示させていきます。ブロックとボールの当たり判定は次回予定ですので今回のプログラムではボールは素通りします。説明の為のソースはブロックの表示部分のみです。
●使用関数・命令
screen boxf repeat cls if await gosub
●全ソース
bb_sample02.txt
| 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. |
;*********************************************** ; 定数設定 ;*********************************************** #define WINDOW_TITLE "ブロック崩し" ;windowタイトル #define WINDOW_X_SIZE 300 ;window横幅 #define WINDOW_Y_SIZE 400 ;window縦幅 #define BLOCK_X_NUM 5 ;ブロック横の数 #define BLOCK_Y_NUM 5 ;ブロック縦の数 #define BLOCK_PADDING 3 ;ブロック間隔 #define BLOCK_WIDTH 50 ;ブロック横幅 #define BLOCK_HEIGHT 10 ;ブロック縦幅 #define BLOCK_START_X 17 ;ブロック開始X座標 #define BLOCK_START_Y 20 ;ブロック開始Y座標 ;*********************************************** ; 変数設定(デフォルト設定) ;*********************************************** ;■windowの設定 screen 0,WINDOW_X_SIZE,WINDOW_Y_SIZE title WINDOW_TITLE ;■メイン処理 *main repeat cls gosub *block_judgment await 50 loop stop ;■ブロック表示 *block_judgment color 0,0,255 blockY = BLOCK_START_Y ;縦ループ(Y座標) repeat BLOCK_Y_NUM blockX = BLOCK_START_X ;横ループ(X座標) repeat BLOCK_X_NUM boxf blockX,blockY, blockX+BLOCK_WIDTH , blockY+BLOCK_HEIGHT blockX + = BLOCK_WIDTH + BLOCK_PADDING loop blockY + = BLOCK_HEIGHT + BLOCK_PADDING loop return |

2重のループなどがあり複雑にみえますが、ただ矩形表示を繰り返しているだけです。37行目で矩形を表示しています。
矩形の左上の座標を(blockX,blockY)と変数にしています。この変数の値を変えることによりブロックの表示位置を変えてます。ブロックの大きさは一定なので横幅をBLOCK_WIDTH、縦幅をBLOCK_HEIGHTと定数にしました。ですのでブロックの右下の座標は(blockX+BLOCK_WIDTH ,blockY+BLOCK_HEIGHT)となります。

38行目は次の横ブロックのX座標を計算しています。ブロックとブロックには隙間がありますので、次のブロックのX座標までは「ブロックの横幅+ブロックの隙間」の間隔があります。40行目は次の縦ブロックのY座標を計算しています。X座標と同様、次のブロックまでの間隔は「ブロックの縦幅+ブロックの隙間」になります。34行目は縦座標が変わったらX座標の位置を左端のブロックにしています。


