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

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

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

»

企画3日目の本日は、この企画の最終回です。「ブロック崩し」を完成させましょう。

前回までで、4つのブロックを消す「ブロック崩し」を作りました。

前回、元になる「ブロック」のスプライトを「複製」して、ブロックを増やしましたが、ブロックの数が多くなると、その方法も大変そうですよね。
子どもが作るのであれば、「コツコツと地道な作業も大切」なんて言って、やらせるのも良いのですが、プログラマーとしては、ブロックの数を増やすのもコードで実現したいところです。
同様のスプライトを増やしたい、というとき、Scratchの「クローン」という機能が便利です。
「制御」の「自分自身のクローンを作る」で、元のスプライトの複製を作成できます。
ただし、前回のスプライトを右クリックして複製を作る方法と異なり、スクリプトはコピーされません。
そこで、「クローンされたとき」を使い、複製を作るときに、スクリプトが実行されるようにします。

それでは、前回のブロックを修正してみましょう。
元になるブロックを非表示(「隠す」)にして、4回、x座標をずらしながら、クローンを作成します。
「0.2秒待つ」処理を入れると、並べる様子がアニメーションになります。
今までのスクリプトは、「クローンされたとき」の下に移します。

image001.png

また、並べ終わるまで、ゲームが開始されないように、メッセージを使って、タイミングを合わせています。「並べ終わり」のメッセージを新しく作成し、並べ終わったら、このメッセージを送るようにしています。

ボール側のスクリプトは、緑の旗がクリックされたときではなく、「並べ終わりを受け取ったとき」に、ボールを動かし始めるように修正します。

image002.png

前回、コピーしたブロック2~ブロック4のスプライトは、削除しましょう。

実行すると、こんな感じ。

あれ?4回コピーしたのに、ブロックは4個だけ?
元のブロックと合わせて5個並ぶのでは?
と思った方、いいところに気がつきましたね。
「クローンされたとき」の対象となるのは、新たに作成されたクローンのみなので、コピー元のブロックでは実行されません。
したがって、元のブロックは存在はしているものの、消えたまま、ボールが触れても何も置きません。

image003.png

クローンの仕組みが分かったところで、ブロックをもっと並べられるように2段にしてみましょう。

image004.png

実行してみましょう。

ブロックが7個並ぶようになりました。
ちゃんと7個全部に、ボールが触れたときの処理がなされています。

さて、いよいよ仕上げです。次の機能を追加してみましょう。

  • ブロックをすべて消すこと(クリア)ができたら「CLEAR!!」の文字を表示する
  • 「CLEAR!!」を1秒表示したら、またブロックを並べ直してゲーム再開
  • クリアする度に、ボールの速度が速くなる
  • クリアする度に、ラケットの形が変わるようにする
  • ボールが赤いライン(Line)に触れたら、ゲームオーバー。「GAME OVER」の文字を表示する

「CLEAR!!」と「GAME OVER」の文字は、スプライトとして用意します。

image005.png

それぞれ、緑の旗がクリックされたときは、非表示にしておき、新しいメッセージ「クリア」、「GAME OVER」を受け取ったら、表示するようにします。
クリアの場合は、表示しっぱなしだとダメなので、1秒だけ表示したら、ブロックを並べ直すためのメッセージを新しく用意し、それを送って、また非表示にします。

■「CLEAR!!」のスクリプト
image006.png

■「GAME OVER」のスクリプト
image007.png

ラケットに新しいコスチュームを加えましょう。

image008.png

緑の旗がクリックされときは、最初のコスチュームにし、クリアされたときに、コスチュームが変わるようにします。

■「Paddle」のスクリプト
image009.png

ブロックのスクリプトを修正します。

ブロックを並べ始めるイベントを、新しいメッセージ「並べるを受け取ったとき」にします。
また、「ブロックの数」を数える変数を用意し、ボールが触れたら、1つ減らすようにします。
また、ブロックは非表示にする(隠す)のではなく、削除するようにします。
並べ直す都度、ブロックは新たに作成されるので。

■「ブロック」のスクリプト
image010.png

ボールのスクリプトを修正は全部で大きく4か所です。

まずは、緑の旗がクリックされたときに、ブロックを並べるメッセージを送り、各データを初期化する処理を追加します。

次は、「並べ終わりを受け取ったとき」の下です。
「点数を0にする」は、緑の旗がクリックされたときに、移します。
ブロックの数が0になったら、ボールを止めるようにします。つまり、「ずっと」ではなく、「ブロックの数が0になるまで」にします。
また、ボールのスピードが変えるために、「10歩動かす」を「速度歩動かす」にします。

■「Ball」のスクリプトの修正箇所(1つめと2つめ)
image011.png

3か所目は、「もしLineに触れたなら」の下です。
「GAME OVER」というメッセージを送る処理を加えます。
また、「すべてを止める」のではなく、「スプライトの他のスクリプトを止める」に
変更します。

■「Ball」のスクリプトの修正箇所(3つめ)
image012.png

4か所目、「当たったを受け取ったとき」の下で最後です。
「ブロックに数が0になったときの処理を追加します。
まず、メッセージ「クリア」を送り、少し(1秒)待ったら、ブロックの数を7個に戻し、ボールも最初の位置に戻します。
そして、速度を少し早く(+2)します。

■「Ball」のスクリプトの修正箇所(4つめ)
image013.png

では、実行してみましょう。


背景を変えることも出来るので、クリアしたら、他の背景にしたりも出来ます。

クローンを作るときに、少し工夫すれば、特定のブロックに当たったらボールを増やしたり、なんてことも出来そうです。

いろいろアイデアが浮かんできましたね?

というところで、この企画は、おしまいです。
この続きは、どうぞ、お子さまとお楽しみください。
もちろん、お一人でやっても、OKです。

それでは、良いGWをお迎えください!

Comment(0)