Scratch各ブロックの使い方(制御)

Scratchで用意されているブロックについてカテゴリーごとに簡単な使い方を説明します。

 

このページでは「制御」カテゴリーに含まれているブロックを紹介します。他のカテゴリーのブロックの使い方についてはこのページの最後にリンクを記載してありますのでそちらよりご参考にどうぞ。

 

制御パレットのブロックの使い方

制御パレット(カテゴリー)には初期設定で11個のブロックが用意されています。ブロックの形状としてはハットブロックが1個、スタックブロックが3個、C型ブロックが5個、キャップブロックが2個となります。

 

“1”秒待つ

Scratchでプログラミングを学ぶ上で重要なブロックの一つがこの制御パレットの「”1”秒待つ」ブロックになります。「ScratchCatを歩かせてみよう!」の記事でも説明しましたがプログラムはかなりの速さで処理されます。このため、人間が見て理解できるような動作をしたり、あるいはタイミングを計って実行したい場合には待ち時間を作る必要があります。この待ち時間を作るためのブロックがこの「”1”秒待つ」ブロックになります。

 

プログラミングに慣れて複雑なプログラムを作る場合には思い通りの処理を実行するのに時間ではなく、”センサー”や”他の条件を満たしたタイミングでメッセージを送る”などによって処理を停止、実行するようになってきますが始めたばかりの頃はわかりやすい「”1”秒待つ」ブロックを使う機会が多いです。

 

“10”回繰り返す、ずっと、<>まで繰り返す

Scratchで繰り返し処理を行うためのブロックが「”10″回繰り返す」ブロック、「ずっと」ブロック、「<>まで繰り返す」ブロックの3つになります。プログラミング学習において早い段階で覚えるべき制御構造として”分岐”と”ループ(繰り返し)”の2種類があります。この3つのブロックが”ループ(繰り返し)”に当たるブロックとなります。

 

「”10″回繰り返す」ブロックはしていされた回数だけCの中に記載したブロックを実行します。このため、Cの中には繰り返し実行したい処理のブロックを記述していきます。姉弟回数が終了した時点でC型ブロックの下の処理に移行します。

 

「ずっと」ブロックはCの中の処理をずっと実行し続けます。この「ずっと」ブロック自体には終了条件がないため、Cの中に終了するための条件を記載しなくては処理が終了しません。終了処理には「”すべて”を止める」ブロックを使用します。オプションで”すべて”は”このスクリプト”、”スプライトの他のスクリプト”に変更可能ですが、Cから抜けるためには実行しているスクリプトを止めなくてはならないため、”すべて”または”このスクリプト”を指定します。スクリプトを終了しなくてはループ(繰り返し)を抜けないため、C型ブロックであるとともに下にブロックを繋げることのできないキャップブロックにもなっています。

 

「<>まで繰り返す」ブロックは<>に終了する条件を記載します。条件には真偽ブロックを使用して、真となった場合にループ(繰り返し)処理が終了します。言い換えると条件が偽の間はCの中が実行され続けます。このため、Cの中で真偽ブロックの条件が満たされるようなスクリプトを組む必要があります。この条件を間違えるとループ処理から抜けない、無限ループのバグとなってしまうので気をつけましょう。

 

もし<>なら、もし<>なら|でなければ

さきほどループ(繰り返し)処理の説明でもしましたが、プログラミング学習において早めに覚えるべき制御構造として”分岐”と”ループ(繰り返し)”があると説明しました。この「もし<>なら」ブロックと「もし<>なら|でなければ」ブロックは”分岐”を行うためのブロックになります。

 

「もし<>なら」ブロックの”<>”には真偽ブロックを使った条件を指定します。この条件を満たす=真の場合のみCの中を実行します。条件を満たさない場合はCの中を実行しないで次のブロックを実行します。特定のケースのみ実行したいブロックがあるときに使用します。

 

「もし<>なら|でなければ」ブロックも分岐を行うためのブロックです。形としてはCが2つ繋がったてEのようになっています。前半のCは「もし<>なら」ブロックと全く同じになります。<>に指定した条件を満たした場合のみ実行します。後半のCの中は、前半のCの中を実行しなかった場合、つまり<>の条件が偽だった場合のみ実行されます。

 

<>まで待つ

「<>まで待つ」ブロックの<>には真偽ブロックによって条件を設定します。このとき設定した条件を満たすまでスクリプトをストップします。つまり、他のスクリプトによって条件を満たすようにしなくてはなりません。

 

例えば、シミュレーションゲームを作る場合において、画面の切り替え前に「”スペースキー”が押された」ブロックを使って、スペースキーが押されるまで画面が切り替わらないように設定することができます。

 

スクリプトを止めて待つブロックには「”1”秒待つ」ブロックがあります。しかし、「”1”秒待つ」ブロックは時間によって制御されるため、思った通りのタイミングで後続のスクリプトを実行するように調整するのは難しくなります。「<>まで待つ」ブロックの場合、<>の条件をしっかりと指定することによって任意のタイミングで後続のスクリプトを実行しやすくなります。また、アプリの実行者のアクションに合わせるようにタイミングを調整することもできます。

 

“すべて”を止める

スクリプトを停止させるときに使用するのが「”すべて”を止める」ブロックになります。プログラムというのは、すべてのスクリプトが実行されてキャップブロックで終了となります。しかし、制御構造でループ(繰り返し)を実行していたり、実行を一時的に止めるブロックを使用している場合、プログラムが終了しない場合があります。このようなときに終了させるために使用するのが「”すべて”を止める」ブロックになります。

 

“すべて”はオプションで”すべて”、”このスクリプト”、”スプライトの他のスクリプト”に変更可能です。”すべて”は文字通りすべてのスクリプトを終了します。スプライトの他のスクリプトや他のスプライト、ステージのすべてが終了の対象となります。

 

“このスクリプト”はブロックを設置したスクリプトのみが対象となります。

 

“スプライトの他のスクリプト”は”このスクリプト”の反対でブロックを設置したスプライトの他のスクリプトのみを停止します。ブロックを設置したスクリプトは生きており、後続のブロックを実行します。このため、オプションで”スプライトの他のスクリプト”を選択した場合のみ、キャップブロックではなくスタックブロックとなります。

 

“自分自身”のクローンを作る

クローンを作るために使用するのが「”自分自身”のクローンを作る」ブロックになります。このブロックを使うことによってスクリプトでスプライトの複製を作成することができます。

 

複数のスプライトを使用したい場合、あらかじめスプライトリストでスプライトを作成しておくことで叶えることができます。ただし、大量にスプライトを使いたい場合、スプライトリストであらかじめ定義しておくのは大変です。このようなときにスクリプトでスプライトの複製を作ったり消したりします。

 

よく使う例としては、シューティングゲームの弾があります。シューティングゲームでは自弾、敵弾ともに大量の弾が登場します。そして登場した弾はすぐに消えて無くなります。このような時にあらかじめすべての弾を定義しておくのは大変。このようなときに、都度「”自分自身”のクローンを作る」ブロックを作って弾の複製を作成します。(このため、弾はあらかじめ1発用意しておきます。)

 

“自分自身”はオプションで変更して自分自身以外のスプライトを指定することもできます。つまり自機のスプライトのスクリプトから自弾を複製するといった使い方ができます。

 

クローンされたとき

「クローンされたとき」ブロックは「”自分自身”のクローンを作る」ブロックで複製して作られたスプライトに実行されるスクリプトを記述するためのブロックです。クローンはまずこのブロックのスクリプトが実行されます。

クローンされたスプライトで実行されるのはこのブロックであり、「”自分自身”のクローンを作る」ブロックの後続ではないので注意しましょう。

 

このクローンを削除する

「”自分自身”のクローンを作る」ブロックで作られたクローンを削除するときに使うためのブロックになります。削除されるため、後続のスクリプトはなく、キャップブロックとなります。

 

スクリプトによって作成されるクローンは削除されるまでステージに残り続けます。このため、大量にクローンを作る場合は必要において順次削除していかなければ画面が埋まってしまったり、処理動作に影響を与える可能性が出てきます。例えば、シューティングゲームの弾などは画面外に外れたら削除する、といった使い方をします。

 

ブロックの使い方カテゴリ一覧