Scratchでループを中断する!
こんにちは。
Scratch初心者脱出したい人向けです。
Scratchには「〇回繰り返す」などのループ処理をするブロックがあります。
ループ処理をしていると、途中でこれ以降繰り返す必要がなくなり、ループを抜けたいと思う時があると思います。
しかし、ループ処理から抜ける機能をもつブロックはありません。
なのでこのような処理をするには何かしら工夫する必要があります。
よくある工夫は、「○まで繰り返す」ブロックを使うものだと思います。
条件にカウンタ変数を追加すれば、ループを抜けなかった場合に繰り返す回数を指定することもできます。
仕組みが簡単なのがメリットですが、繰り返す処理の途中でループを抜けづらいというデメリットもあります。
今回は工夫のひとつとして、定義ブロックを使ってループ処理から抜ける方法を紹介したいと思います。
ループから抜ける方法
下の画像のようにすると、「抜ける条件=true」を満したときにループを抜ることができます。
抜ける条件や定義ブロックの「処理」、「後処理」は自由に変えて使ってください(後処理はなくても大丈夫です)。
解説
下の画像を見てください。
実は、メッセージ1と2を受け取ったときの挙動は微妙にちがいます。
メッセージ2を受け取ったときのみ、条件を満たせばループから抜けることができます。
メッセージ1を受け取ったとき
メッセージ1を受け取ると、赤で囲ったスクリプトが処理されていきます。
「10回繰り返す」の途中で抜ける条件を満たすと、「このスクリプトを止める」のブロックが実行されます。
このブロックが含まれているスプライトは赤で囲ったものなので、赤で囲ったスクリプトの処理が中止されます。
スクリプトは止まってしまったので、「後処理」のブロックは実行されません。
もし、「10回繰り返す」の途中で抜ける条件を満たさなければ、「後処理」のブロックが実行されます。
メッセージ2を受け取ったとき
さきほど紹介した、条件を満たすとループ処理から抜けるスクリプトです。
メッセージ2を受け取ると、まず緑で囲ったスクリプトが処理されていきます。
が、「ループ処理」のブロックを実行するとき、処理されるスプライトが青で囲ったスプライトに移ります。
青で囲ったスクリプトに処理が移った後、
「10回繰り返す」の途中で抜ける条件を満たすと、「このスクリプトを止める」のブロックが実行されます。
このブロックが含まれているスプライトは青で囲ったものなので、青で囲ったスクリプトの処理が中止されます。
青で囲ったスクリプトが止まると、処理されるスプライトが緑で囲ったスプライトに戻ります。
「ループ処理」のブロックの続きから処理が始まり、「後処理」のブロックが実行されます。
という感じで、ループ処理から抜けて続きを処理していくことが可能です。
もし、途中で抜ける条件を満たさなくても、青で囲ったスクリプトの処理が終了した後に緑で囲ったスプライトの処理に戻り、「後処理」のブロックが実行されます。
使用例
リストの中に「りんご」があるかを判断するプログラムです。
結果は「りんご」あったら「true」、無かったら「false」になります。
リストの中身を順番に確認していくときにループ処理を使っています。
リストの途中で「りんご」が見つかったら、そのあとに何が入っていても結果は変わりません。
そのため、「りんご」が見つかった時点でループを抜けるようになっています。
ちなみに、Scratchには「リストに〇が含まれる」というブロックがあります。
これを使っても結果は同じです。便利ですね。
あとがき
お疲れさまでした。最後まで読んでいただきありがとうございます。
解説が分かりづらくてごめんなさい。自分で実際に試してみるとなんとなく分かると思います。
定義ブロック内の「このスクリプトを止める」はとても便利です。
今回の内容を理解できたら、自分でいろいろ応用してみてください。
雑談
こういうのってどういう文体とかテンションで書けばいいのかわからん
次は短くわかりやすくできるように頑張ります
この記事が気に入ったらサポートをしてみませんか?