オルタナティブ・ブログ > まあまあ元気になる話 >

IT業界での少し気分がアップする出来事、心持ち役立つこと、ややイイ話

【GW直前企画】プログラマーもScratchプログラミングを楽しもう!その2~ブロック崩し(基礎編)~

»

この企画も2日目です。本日は、予告通り、前回のラケットゲームを元に、ブロック崩しを作ってみましょう。

まずは、ブロックのスプライトを用意します。

スプライトのライブラリーから「Button3」を選び、名前を「ブロック」に変更し、スクリプトに、ボールに触れたらブロックが消える処理を記述します。
image001.png
image002.png

次に、ボールのスクリプトに、ブロックに触れたときの処理を追加します。
image003.png

前回、作成したラケットに当たった時の処理と、ほとんど同じですが、下から当たる(元の角度が前回と違う)ので、回す向きを前回とは逆にしています。

あと、ボールが最初に出る向きを、下向き(-135度)に修正しましょう。

image003(2).png

実行してみると、こんな感じ。

崩すブロックは1つだけですが、一応、ブロック崩しが出来ました。

出来るには出来ましたが、ブロック側で、ボールに触れたかどうか判定し、ボール側でも、ブロックに触れたかどうか判定しているのは、ちょっと効率が悪い気がします。

子どもが作るのであれば、これでも十分ですが、プログラマーとしては、スレッドの同期について考えたいところです。

Scratchでは、「メッセージ」を使うと、異なるスプライト間でも、処理のタイミングを合わせることが簡単に実現できます。

ブロック側のスクリプトに、イベントとして、メッセージを送る処理を加えます。
デフォルトは「メッセージ1」になっていますが、▼をクリックして、「新しいメッセージ」を選べば、好きなメッセージ名に変更できます。

image004.png

ボール側では、ブロックに触れたときの処理を、このメッセージを受け取ったときの処理に変更します。こちらで、ずっとイベントを監視している必要もなくなる(ブロック側で監視している)ので、「ずっと」は外します。

image005.png

だいぶ、スッキリしました。
もちろん、動作は変わりません。

ブロックを増やしてみましょう。
スプライトの「ブロック」を右クリック、複製を選んでコピーします。
image006.png

image007.png

スクリプトもコピーされるので、x座標の数字をそれぞれ、「-6」、「85」、「176」に変更します。

image008.png

これで、4つのブロックが横に並びます。

ブロックを増やしても、ボール側の処理は変更する必要はありません。
これが、最初の「ブロックに触れたかどうか判定」のままなら、それぞれのブロックに対して、触れたかどうか判定しなくてはいけないので、大変なことになっていたところです。

どうですか?

やっぱり、ブロックが多い方がいいですよね。

次回は、もっとたくさんのブロックを置いてみましょう。

Comment(0)