【GW直前企画】プログラマーもScratchプログラミングを楽しもう!その2~ブロック崩し(基礎編)~
この企画も2日目です。本日は、予告通り、前回のラケットゲームを元に、ブロック崩しを作ってみましょう。
まずは、ブロックのスプライトを用意します。
スプライトのライブラリーから「Button3」を選び、名前を「ブロック」に変更し、スクリプトに、ボールに触れたらブロックが消える処理を記述します。
次に、ボールのスクリプトに、ブロックに触れたときの処理を追加します。
前回、作成したラケットに当たった時の処理と、ほとんど同じですが、下から当たる(元の角度が前回と違う)ので、回す向きを前回とは逆にしています。
あと、ボールが最初に出る向きを、下向き(-135度)に修正しましょう。
実行してみると、こんな感じ。
崩すブロックは1つだけですが、一応、ブロック崩しが出来ました。
出来るには出来ましたが、ブロック側で、ボールに触れたかどうか判定し、ボール側でも、ブロックに触れたかどうか判定しているのは、ちょっと効率が悪い気がします。
子どもが作るのであれば、これでも十分ですが、プログラマーとしては、スレッドの同期について考えたいところです。
Scratchでは、「メッセージ」を使うと、異なるスプライト間でも、処理のタイミングを合わせることが簡単に実現できます。
ブロック側のスクリプトに、イベントとして、メッセージを送る処理を加えます。
デフォルトは「メッセージ1」になっていますが、▼をクリックして、「新しいメッセージ」を選べば、好きなメッセージ名に変更できます。
ボール側では、ブロックに触れたときの処理を、このメッセージを受け取ったときの処理に変更します。こちらで、ずっとイベントを監視している必要もなくなる(ブロック側で監視している)ので、「ずっと」は外します。
だいぶ、スッキリしました。
もちろん、動作は変わりません。
ブロックを増やしてみましょう。
スプライトの「ブロック」を右クリック、複製を選んでコピーします。
スクリプトもコピーされるので、x座標の数字をそれぞれ、「-6」、「85」、「176」に変更します。
これで、4つのブロックが横に並びます。
ブロックを増やしても、ボール側の処理は変更する必要はありません。
これが、最初の「ブロックに触れたかどうか判定」のままなら、それぞれのブロックに対して、触れたかどうか判定しなくてはいけないので、大変なことになっていたところです。
どうですか?
やっぱり、ブロックが多い方がいいですよね。
次回は、もっとたくさんのブロックを置いてみましょう。