ボールゲームを作ろう(斜めに進むには?)

プログラムの大まかな流れを考えよう。

ピンボール画面

・上、右、左の壁に当たったら跳ね返る。
・PaddleでBallを跳ね返す。

でもBallが斜めに進むときどうするの?

「〇歩動かす。」

横に動くとき は、「x座標を〇ずつ変える」ブロックを使う。
縦に動くとき は、「 y座標を〇ずつ変える」ブロックを使う。
個人的にxy座標を使ったほうがいいと思ったのですが…

【問題】
縦 または 横にまっすぐに進むときはいいけど、斜めに進むときはxy座標の計算しないといけない。


いきなりハードルが上がってしまいます。

ですが、スクラッチでは、斜めに動かすときは「〇歩動かす」と「〇度に向ける」のブロックがあります。これを使ってプログラムすると座標計算しなくてもできそうです。

スプライトや背景を準備しよう。

・Paddleのスプライトを選んでスプライトリストに追加する。

・スプライトリストのCat2を一度クリックする。
 (キャッチゲームからの続きで作業している場合です。)

・Cat2のコードをマウス左ボタンを押したままスプライトリストのPaddleの所まで移動する。
・スプライトリストのPaddleが「フルッ」って揺れたらマウスのボタンを離す。
・コードがコピーされていることを確認する
・コードがコピーされていたらCat2のスプライトを削除する。
 (スプライトリストをクリックしたときに表示されるバケツのXマークをクリックする)

・paddleの最初の位置を決めます。
 (x座標を0、y座標を-140にする)

プログラムを考えよう。

Ball Game Program

Ballの動きを考えよう。
・最初に150度に向ける。
・Paddleに触れたらBallの向きを変える。
・BallがPaddleより下(-150より小さい)にいったら、また上のほうに動かす。

Paddleに触れた後のBallの向き = 180度 - 触れる前のBallの向き

実行してみる。
・上手に跳ね返るときもあるけど、ときどき”ブブブブ”って変な動きをする。

何かおかしい…?

・どんな時に変な動きをするかためしてみます。
・動きを確認するためにスピードを落とします。

 ずっとのブロックの下の
 10歩動かす → 2歩動かす
 くらいにしてゆっくり動かせてみます。

どんなふうに動いているか観察します。

Paddleの横に当たってしまった時 ”ブブブブ”ってなっています。

デバックしよう。

よーくスプライトの向きのところの数値を見るとたましく変わっています
向きを変えているブロックはPaddleに当たったときだけ実行しているはず。
ということは…

「ずっとPaddleにあったてる…?」
なんて推測ができます。

Ballの向きを変えたあとに 「<(Paddleにふれた)ではない>まで繰り返す」ブロックを挿入して 10歩づつ動かせてみます。
paddleに触れていない状態になったら、この繰り返し処理を抜けて次の処理に移ります。

いい感じに動きました。

実は、Paddleの横にあたってに跳ね返る時の向きがうまくいっていなかったのが原因です。
跳ね返る角度が違って思うように変わってなくて「あれ?」って思ったかもしれません。

今回は「上から落ちてきたBallを跳ね返す」ところのみ考えていますのでそこはまた今度。