子どもたちがScratch(プログラミング言語)に興味を示して色々試しています。
そこでステージ(背景)を変更する方法について行き詰っていたので助け船を出しました。
やりたいこと
開始の旗をクリックすることで自宅から学校へ行き、先生にあいさつをしたら、先生をクリックすることで返事をもらい帰ってくるまでのデジタル紙芝居のようなことをしようとしていました。(子供が実際に作った物はもっとごちゃごちゃしていたのですが説明のため簡略化しています)
どうなっているのか?
各ステージでキャラクターの表示、非表示と動きは作れたみたいですが、学校で先生をクリックして帰る時、ステージを自宅に戻す事ができずに悩んでいました。
実際に動かしてみると先生にあいさつをしたら返事を待たずに自宅に帰ってきていました。
プログラミングの内容
登場人物は生徒と先生の二人でそれぞれにプログラミングがされていました。(ステージにはプログラミング無し)
先生はステージの切り替わりイベントで表示・非表示を切り替え、クリックのイベントであいさつだけ行っています。
生徒は開始の旗をクリックのイベントで全てのプログラミングをしていました。
問題点
問題となるところは主人公の開始イベントで主人公の行動とステージの切り替えなど全てのプログラミングを詰め込んでしまっているところです。
このままでは開始と同時に状況判断を全く行わず自分勝手に世界を動かしてしまうプログラミングになってしまっています。(以下では先生の返事を待つ必要があるところで分断しています)
解決策「メッセージを使う」
問題点として挙げた「状況判断を全く行わず自分勝手に世界を動かす」ことをやめさせましょう。
それには先生と生徒で連携をとる必要があります。
生徒の開始の旗をクリックして動くところは学校へ行き、先生にあいさつをするところまでです。
そこから先は先生をクリックしてからの動きとしましょう。
ただし、先生をクリックした時に発生するイベントは先生のプログラム内の「このスプライトが押されたとき」ブロックになるので生徒の行動を先生のプログラム内に書く事はできません。
そこで必要になるのが「メッセージ」です。
「メッセージ」は任意のタイミングでイベントを発生させる事ができる物で先生をクリックしたときに「メッセージ」を送る事で生徒がメッセージを受け取るイベントをきっかけにプログラムを実行させることができるようになります。
具体的に「返事」という名前でメッセージを作り、先生はクリックでメッセージを送り、生徒はメッセージを受け取ってプログラムを実行するように変更します。
これでやりたいことができるようになりました。
改良案
プログラムはスプライト(生徒と先生)以外にもステージで組む事ができます。
ステージのプログラムにはステージの切り替えだけをプログラムすると見やすくなります。
これにより役割分担が明確になり、プログラミングの絡まりを防止できます。
具体的には各ステージと状況用の「メッセージ」を準備しておき、「メッセージ」を受け取った時にステージの切り替えを行うプログラムをステージに組んでおきます。
後はステージの切り替えタイミングに合わせて「メッセージ」を送るようにプログラミングして完成です。
いつ、誰が、何をするのかが明確になりすっきりしたプログラムを組む事ができました。
まとめ
動かすだけのプログラムならどこでどんな風に書いても良いのですが後から振り返ったりバージョンアップを繰り返したりする場合にはプログラムが絡みやすくなります。
今回はステージの変更を題材に「メッセージ」の使い方を紹介しましたが重要な事は役割を決めてそこへプログラミングをする事で、それを行うためには「メッセージ」が必要になってきます。
「メッセージ」を使ったプログラミングに慣れて、可読性の良い(読みやすい)プログラミングを作れるようにしましょう。
コメント