Scratchでゲームを作っていると、「こう動くはずなのに、なぜかうまくいかない」という場面に出会います。こうした不具合は、プログラムの仕組みを理解するよいきっかけになります。
今回は、生徒が制作したスイカを集めるゲームで見つかった、メッセージの繰り返しについて紹介します。
15点になったら、次の場面へ進むはずが……
このゲームでは、スイカを集めると得点が増え、15点に到達するとキャラクターが話し始め、その後、料理の場面へ進むように作られていました。
ところが、15点になると同じメッセージが繰り返し送られ、次の場面へ進む処理が妨げられてしまいました。
原因は、スイカのスプライトにある次の組み合わせでした。
ずっと
もし〈集めたスイカ = 15〉なら
enoughを送る
「enough」は、次の場面へ進む合図として使っていたメッセージの名前です。
一見すると、「15点になったら合図を送る」という自然なプログラムに見えます。しかし、ここには「ずっと」と「もし」の組み合わせで起きやすい落とし穴があります。
「15点になった瞬間」と「15点である間」の違い
作った人が意図していたのは、「15点になった瞬間に、1回だけ合図を送る」という動きです。
一方、このブロックが実際に指示しているのは、「得点を繰り返し調べて、15点なら毎回合図を送る」という動きでした。
得点が15点のままなら、何度調べても条件は成立します。そのため、「ずっと」の中を繰り返すたびにメッセージが送られます。
合図を受け取るキャラクターには、セリフを言い、少し待ってから料理の場面へ進む処理があります。そこへ同じ合図が何度も届くと、処理が先頭からやり直され、先へ進めなくなる原因になります。
コンピューターは、「1回だけでよいはず」という人の意図を補ってはくれません。ブロックで示した手順を、そのまま実行するのです。
「待ってから1回送る」に変えてみる
今回のように、目標の得点に到達したときに1回だけ合図を送りたい場合は、「ずっと」と「もし」を、次の形に置き換えると分かりやすくなります。
〈集めたスイカ > 14〉まで待つ
enoughを送る
この形なら、15点以上になるまでは待ち、条件を満たしたらメッセージを1回送って、その処理は終わります。
得点は1点ずつ増えるので、「14より大きい」は「15点以上」を表します。複数のスイカをほぼ同時に集めて得点が16点以上になった場合にも、次の場面へ進める条件です。
修正した後は、14点では合図が送られず、15点に到達するとセリフが順番に進むかを確かめます。「直したつもり」で終わらず、実際の動きを確認するところまでが大切です。
不具合は、考え方を深める教材になる
今回の失敗から学べるのは、ブロックの使い方だけではありません。
「自分はどう動いてほしかったのか」「今のプログラムは何を繰り返しているのか」「1回だけ動かすには、どこを変えればよいのか」。こうした問いを通して、子どもたちは自分の考えと実際の手順を比べる経験を積みます。
ご家庭でも、うまく動かなかったときには「どんな動きにしたかったの?」「実際にはどうなったの?」と声をかけてみてください。違いを言葉にすることが、原因を見つける手がかりになります。
プログラミングの学びは、最初から正解を作ることだけではありません。 思った通りに動かない理由を探し、直して、もう一度確かめる。その試行錯誤の中で、手順を考える力や、問題を解決する力が育っていきます。
体験会随時開催中です!


体験会詳細
お問い合わせ
