【Scratch入門】緑の旗が押されたときブロックの思わぬエラー #上級編

スポンサーリンク

緑の旗はプログラムの始まり

プログラムの始まりを検知するボタン「緑の旗」。

ほとんどすべてのScratchプログラムは、「緑の旗」のマークからスタートします。

スポンサーリンク

〔緑の旗が押されたとき〕ブロックの動作

実行順序

〔緑の旗が押されたとき〕というブロックを使って、プログラムの始まりを検知します。

では問題です。
次のプログラムを実行すると、どのように表示されるでしょうか。

正解は ネコが「うーん…」と考える でした。

それでは次の問題です。
先ほどのプログラムに新しいブロックを追加しました。
「さようなら」と言うプログラムです。
実行するとどのように表示されるでしょうか。

正解は ネコが「さようなら」と言う でした。

このように、同じイベントのブロックを3つも作ってしまうと、どのブロックが実行されるのかが分かりません。
今回ネコが「さようなら」と言ったのは偶然で、1年後に実行したら「こんにちは!」と言う可能性もあります。
仕様(決まり)ではないので、変わる可能性もあります。

スポンサーリンク

変数への設定タイミング

変数に数を入れて様子をみる

それでは次に、下記のようなプログラムだった場合は、どのように動くでしょうか。

最初の画面はこちらです。
変数の中身は、左上に表示してあります。
実行する前の変数は「0」です。

実行すると、変数の中身は「6」になり、ネコは「変数は1」と言いました。
どこかヘンですよね。
変数の値が、想定と異なります。

プログラムの実行順序

なぜ、左上に表示された変数の中身と、ネコが喋っている変数の値が変わってしまったのでしょうか。
どの順番に実行されているのか調べるために、リストを使ってみます。

  • 〔変数を6にする〕が実行されたら、リストにAと追加する。
  • 〔変数を1ずつ変える〕が実行されたら、リストにBと追加する。
  • 〔変数は○と言う〕が実行されたら、リストにCと追加する。

このように書いて実行してみます。

実行前の画面はこちらです。
全て空にしておきます。

実行するとこのようになります。
「B」「C」「A」の順番でリストが作られていることから、最初に0だった変数が「1」になり、次にネコが「変数は1」と喋り、最後に変数が6に変わっていることが分かります。

正しいプログラムはこちら

〔緑の旗が押されたとき〕ブロックを 3つも作ってしまったために、どの順番で実行されるのかが分からなくなってしまったことがエラーの原因です。
1スプライトにつき〔緑の旗が押されたとき〕ブロックは1つのみ使うようにしましょう。
こちらのプログラムなら、確実に上のブロックから順番に実行されます。

左上に表示されている変数の中身と、ネコが喋っている変数の値が一致しました。
今回は 3行しかないプログラムですが、コードが長くなれば長くなるほどどのブロックが実行されているのか分かりにくくなってきます。
イベントがあちこちに散らばらないように注意しましょう。