ブロック崩し③ 【HSP3】
前回はバーをカーソルで動かしてみました。今回はボールを動かしてみます。サンプルコードですが、ボールとバーの当たり判定は今回は説明しないため、バー処理部分は省略させてもらいました。
●使用関数・命令
screen circle repeat cls stick if
| 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. 43. 44. 45. 46. 47. 48. 49. 50. |
;*********************************************** ; 定数設定 ;*********************************************** #define WINDOW_TITLE "ブロック崩し" ;windowタイトル #define WINDOW_X_SIZE 300 ;window横幅 #define WINDOW_Y_SIZE 400 ;window縦幅 #define BALL_SIZE 20 ;ボール幅 ;*********************************************** ; 変数設定(デフォルト設定) ;*********************************************** ballX = 140 ;ボール横座標(左上位置) ballY = 341 ;ボール座標(左上位置) ballSpeedX = 7 ;ボールの横スピード ballSpeedY = -7 ;ボールの縦スピード ;■windowの設定 screen 0,WINDOW_X_SIZE,WINDOW_Y_SIZE title WINDOW_TITLE ;■メイン処理 *main repeat cls gosub *ball_move await 50 loop stop ;■ボール動作 *ball_move color 255,0,0 circle ballX, ballY, ballX+BALL_SIZE, ballY+BALL_SIZE ballX = ballX + ballSpeedX ballY = ballY + ballSpeedY ;左端 if ballX <= 0 { ballX = 0 : ballSpeedX = -ballSpeedX } ;右端 if ballX >= ginfo_winx - BALL_SIZE { ballX = ginfo_winx - BALL_SIZE ballSpeedX = -ballSpeedX } ;上端 if ballY <= 0 { ballY = 0 : ballSpeedY = -ballSpeedY } ;下端 if ballY >= ginfo_winy - BALL_SIZE { ballY = ginfo_winy - BALL_SIZE ballSpeedY = -ballSpeedY } return |

ボールも動く基本はバーと同じです。ボールを囲む矩形の左上の座標を( ballX,ballY )と変数にしました。ボールの初期値は11行目と12行目で指定しています。29行目:ボールは図形の円を描く「circle」命令で描いています。ボールのサイズは定数「BALL_SIZE」にしており変更しやすくしています。
30行目でボールの横移動させています。「ballSpeedX」が座標の増減量です。変数ballXの値を増減することにより横移動しているようにみえます。31行目で縦移動させています。「ballSpeedY」が増減量で、変数ballYの値を増減することよにより縦移動しているようにみえます。32行目から49行目までは端に達したときの処理を行なっています。基本はバーを動かすときと同じですが、横移動量「ballSpeedX」と縦移動量「ballSpeedY」の符号を反転させる制御が追加されています。反転させることにより進む方向が逆になります。例えば座標が増え続けていった場合、反転することにより今度は座標が減り続けるようになるわけです。

