【GW直前企画】プログラマーもScratchプログラミングを楽しもう!その3~ブロック崩し(応用編)~
企画3日目の本日は、この企画の最終回です。「ブロック崩し」を完成させましょう。
前回までで、4つのブロックを消す「ブロック崩し」を作りました。
前回、元になる「ブロック」のスプライトを「複製」して、ブロックを増やしましたが、ブロックの数が多くなると、その方法も大変そうですよね。
子どもが作るのであれば、「コツコツと地道な作業も大切」なんて言って、やらせるのも良いのですが、プログラマーとしては、ブロックの数を増やすのもコードで実現したいところです。
同様のスプライトを増やしたい、というとき、Scratchの「クローン」という機能が便利です。
「制御」の「自分自身のクローンを作る」で、元のスプライトの複製を作成できます。
ただし、前回のスプライトを右クリックして複製を作る方法と異なり、スクリプトはコピーされません。
そこで、「クローンされたとき」を使い、複製を作るときに、スクリプトが実行されるようにします。
それでは、前回のブロックを修正してみましょう。
元になるブロックを非表示(「隠す」)にして、4回、x座標をずらしながら、クローンを作成します。
「0.2秒待つ」処理を入れると、並べる様子がアニメーションになります。
今までのスクリプトは、「クローンされたとき」の下に移します。
また、並べ終わるまで、ゲームが開始されないように、メッセージを使って、タイミングを合わせています。「並べ終わり」のメッセージを新しく作成し、並べ終わったら、このメッセージを送るようにしています。
ボール側のスクリプトは、緑の旗がクリックされたときではなく、「並べ終わりを受け取ったとき」に、ボールを動かし始めるように修正します。
前回、コピーしたブロック2~ブロック4のスプライトは、削除しましょう。
実行すると、こんな感じ。
あれ?4回コピーしたのに、ブロックは4個だけ?
元のブロックと合わせて5個並ぶのでは?
と思った方、いいところに気がつきましたね。
「クローンされたとき」の対象となるのは、新たに作成されたクローンのみなので、コピー元のブロックでは実行されません。
したがって、元のブロックは存在はしているものの、消えたまま、ボールが触れても何も置きません。
クローンの仕組みが分かったところで、ブロックをもっと並べられるように2段にしてみましょう。
実行してみましょう。
ブロックが7個並ぶようになりました。
ちゃんと7個全部に、ボールが触れたときの処理がなされています。
さて、いよいよ仕上げです。次の機能を追加してみましょう。
- ブロックをすべて消すこと(クリア)ができたら「CLEAR!!」の文字を表示する
- 「CLEAR!!」を1秒表示したら、またブロックを並べ直してゲーム再開
- クリアする度に、ボールの速度が速くなる
- クリアする度に、ラケットの形が変わるようにする
- ボールが赤いライン(Line)に触れたら、ゲームオーバー。「GAME OVER」の文字を表示する
「CLEAR!!」と「GAME OVER」の文字は、スプライトとして用意します。
それぞれ、緑の旗がクリックされたときは、非表示にしておき、新しいメッセージ「クリア」、「GAME OVER」を受け取ったら、表示するようにします。
クリアの場合は、表示しっぱなしだとダメなので、1秒だけ表示したら、ブロックを並べ直すためのメッセージを新しく用意し、それを送って、また非表示にします。
ラケットに新しいコスチュームを加えましょう。
緑の旗がクリックされときは、最初のコスチュームにし、クリアされたときに、コスチュームが変わるようにします。
ブロックのスクリプトを修正します。
ブロックを並べ始めるイベントを、新しいメッセージ「並べるを受け取ったとき」にします。
また、「ブロックの数」を数える変数を用意し、ボールが触れたら、1つ減らすようにします。
また、ブロックは非表示にする(隠す)のではなく、削除するようにします。
並べ直す都度、ブロックは新たに作成されるので。
ボールのスクリプトを修正は全部で大きく4か所です。
まずは、緑の旗がクリックされたときに、ブロックを並べるメッセージを送り、各データを初期化する処理を追加します。
次は、「並べ終わりを受け取ったとき」の下です。
「点数を0にする」は、緑の旗がクリックされたときに、移します。
ブロックの数が0になったら、ボールを止めるようにします。つまり、「ずっと」ではなく、「ブロックの数が0になるまで」にします。
また、ボールのスピードが変えるために、「10歩動かす」を「速度歩動かす」にします。
3か所目は、「もしLineに触れたなら」の下です。
「GAME OVER」というメッセージを送る処理を加えます。
また、「すべてを止める」のではなく、「スプライトの他のスクリプトを止める」に
変更します。
4か所目、「当たったを受け取ったとき」の下で最後です。
「ブロックに数が0になったときの処理を追加します。
まず、メッセージ「クリア」を送り、少し(1秒)待ったら、ブロックの数を7個に戻し、ボールも最初の位置に戻します。
そして、速度を少し早く(+2)します。
では、実行してみましょう。
背景を変えることも出来るので、クリアしたら、他の背景にしたりも出来ます。
クローンを作るときに、少し工夫すれば、特定のブロックに当たったらボールを増やしたり、なんてことも出来そうです。
いろいろアイデアが浮かんできましたね?
というところで、この企画は、おしまいです。
この続きは、どうぞ、お子さまとお楽しみください。
もちろん、お一人でやっても、OKです。
それでは、良いGWをお迎えください!