プログラミング初心者の子供に何を教えたらいいの?とお悩みの保護者のためのScratch(スクラッチ)の入門講座。Scratchで猫の動かし方はわかったけど・・・次にどんなことをしたらいいの?という疑問にお答えするシリーズです。
今回は「変数」の応用編について解説します。Scratchではクローンごとに変数を使い分けたい!ということがあります。それを実現するのはとっても簡単。今回はそのノウハウをお伝えします。
1. 変数って何?
1-1. 変数とは?
変数とは、値(あたい)を入れる箱のようなものです。値(あたい)には、数値や文字列などがあります。また、変数の箱には名前がつけられるようになっていて、変数の箱の名前のことを「変数名」といいます。
Scratchの変数については、以下の記事でも紹介していますのでそちらを参考にしてください。
<プログラミング初心者のためのScratch(スクラッチ)入門-変数編>
1-2. グローバル変数とローカル変数
変数を作る時のダイアログに、「すべてのスプライト用」「このスプライトのみ」「クラウド変数(サーバーに保存)」が選択できるところがあります。
「すべてのスプライト用」を選択して作った変数をグローバル変数、「このスプライトのみ」を選択して作った変数をローカル変数と言います。
Scratchで作品を作る時グローバル変数を使う方が一般的ですが、ローカル変数を使った方が都合が良い場合があります。それは、どんなときかというと、クローンごとに異なる変数値を使いたい場合。そんな特殊なケースでの変数の使い方について、次の項目で解説いたします。
2. ローカル変数とクローンの実験
ローカル変数とクローンの関係について、どのような働きがあるか?以下の点について調べてみたいと思います。
・クローンはローカル変数の値を使えるか?
・クローンさせた時のローカル変数の値を、クローンごとに変えてもたせておくことができるか?
・クローンされた後に、各クローンごとにローカル変数の値を変えられるか?
2-1. クローンはローカル変数の値を使えるか?
「クローンはローカル変数の値を使えるか?」ということを検証するために以下のようなプログラムを作ってみました。クローンとオリジナルを見分けがつきやすくなるように、クローンされた時に色が変わるようにしています。
もし、クローンがローカル変数を使えるならクローンが「2」という数字を言うはずです。
プログラムの実行結果はこちら。
クローンのネコ(緑のネコ)は、すべて「2」と言いました。これは当たり前といえば当たり前ですね・・・・
2-2. クローンさせた時、各クローンのローカル変数の値を変えられるか?
「クローンさせた時のローカル変数の値を、クローンごとに変えてもたせておくことができるか?」これを検証するために、先ほどのプログラムを次のように変えてみました。
下の図の矢印の部分のブロックを一つ足しただけです。
すると・・・今度はクローンごとに言う番号が変わりました。
この結果から、各クローンはクローンされた時点のローカル変数の値を持っているということがわかります。
2-3. クローンされた後に、各クローンごとにローカル変数の値を変えられるか?
先ほどは、クローン時点の変数の値を検証しました。今度は、クローンした後に変数の値を変えられるかどうかを検証してみたいと思います。
そこで、下の図の赤枠で囲ったプログラムを追加してみました。
先ほどのプログラムの実行後の状態から、以下の図の赤い矢印のネコをクリックすると・・・そのネコの変数の値だけが変わっていきます!
どうやら、クローンはローカル変数の値を別々に持つことができるようです。
2-4. 番外編:クローンとグローバル変数
せっかくなので、クローンとグローバル変数の関係についても確認しておきたいと思います。先ほどのプログラムに1行追加しました。
クローンをクリックした時に、グローバル変数が変わるかどうかを確かめてみます。全部のネコをクリックしてみました。すると・・・グローバル変数はどのネコをクリックしても値が1づつ変わっていきました。
どのクローンからもグローバル変数にはアクセス可能なようです。
3. ローカル変数とクローンを使ったプログラム
では、このようにクローンごとに変数を使い分けられるとどんないいことがあるのでしょうか?この性質を応用したプログラムをご紹介します。
(1)弾幕作り
弾を連続で発射させる弾幕を作る時、弾のクローンごとに発射角度を持たせておくと発射した時の角度のまま弾が進んでいくことが可能になります。
▼参考プログラム1
https://scratch.mit.edu/projects/229548730/
▼参考プログラム2
https://scratch.mit.edu/projects/229555520/
(2)敵キャラの当たり判定
シューティングゲームやアクションゲームなどで敵キャラをクローンさせるとき、2回の攻撃で敵やっつける、といったことをローカル変数で実現することができます。
(3)クローンごとにアクションを変える
ローカル変数「クローン番号」という変数をつくり、クローンごとに番号を割り振っておけば、この番号のクローンはこの動きをする、などクローン番号を指定して動作を変えることが可能になります。
4. まとめ
今回は、ローカル変数の特殊な使い方と使用例について解説しました。クローンごとに、変数の値を使い分けたい時にはこの方法を試してみてくださいね。
知っておくと便利なので、「クローン」と「変数」で困った時には思い出してもらえると嬉しいです。