Scratchの基本操作

Scratchで変数を使いスコア表示、メッセージで難易度を変える

Scratchはアメリカの大学、MIT(マサチューセッツ工科大学)メディアラボで開発されたビジュアルプログラミング言語です。

前回の続き

ここまで作ってきたプログラムにさらにブロックを追加し、さらにゲームの要素を入れていきたいと思います。

ここでは、2つのプログラムを追加していきたいと思います。

  • 「ネコ」のスプライトが「蝶」のスプライトに触れるとスコアが入り、スコアが加算
  • スコアが加算されると「蝶」のスプライトをスピードを徐々に上げ、ゲームの難易度を変動

これまで作成してきたところと比較し、少々処理が複雑になってきます。
ゲームの要素を追加していくには、「変数」と「メッセージ」利用し、ゲームとしての処理を実現していきます。「変数」と聞くと聞き慣れない言葉な方もいらっしゃると思うので、「難しそう。。。」となるかもしれません。しかし、一般的なプログラミングでも頻繁に使われるもので、「データを入れる箱」であり、特に難しいものではありません。

ここでは、簡単な利用例をゲームを作りながら「変数」の使い方い「スコア」を変更していくものを紹介していくので、是非チャレンジしていただきたいと思います。

「変数」については、こちらの記事も是非参照してください。

▼ 今回作成するプログラム(の旗をクリックして動作を確認することができます)

変数をつくり、ゲームスコアを表示する

最初に説明させていただいた通り、「変数」というデータを入れる箱を利用し、スコアが加算(足し算)される処理を追加していきたいと思います。

「変数」を使うには、左側のコードのリストにある「変数」のところクリックします。
ここでは新たに「変数」を作りたいと思いますので、「変数を作る」をクリックします。

クリックすると、「変数」の設定をするモーダルが表示されます。

新しい変数名のところは、どのような変数名でも大丈夫です。今回、わかりやすい名前で「スコア」というものに変更します。
その下に2つのラジオボタンがありますが、ここではそのままで大丈夫です。もし変更してしまったら「すべてのスプライト用」にチェックが入っているようにします。
できたら、右下の「保存」をクリックします。

これまで作成してきたコードブロックを見直しておきます。
まず最初に「ネコ」の「スプライト」のブロックのButterfly 2(蝶)の「スプライト」に触れた場合の処理にコードを追加していきます。

「〜を0にする」をドラッグし、「が押されたとき」の下に挿入します。
挿入できたら、変数名となる部分をクリックして「スコア」に変更します。値の部分は「0」に変更してください。図のように「スコアを0にする」になっていれば大丈夫です。

同じく左側の「変数」のところから、「〜を〜ずつ変える」をドラッグし、「捕まえた!と1秒言う」のすぐ下に挿入します。
挿入できたら、変数名のところをクリックし「スコア」を選択します。値の部分を「1」に変更します。図のように「スコアを1ずつ変える」になっていれば大丈夫です。

これで、「蝶」のスプライトに触れるたびにスコアが「1」ずつ加算(足し算)されるプログラムができました。

では実際にそうなっているかステージで動作を確認してみます。
をクリックしスタートします。ネコの「スプライト」をジャンプさせてButterfly 2(蝶)の「スプライト」に触れてみます。ステージの左上に表示されたスコアが、触れるたびに1点ずつ加算されていくのが確認できるかと思います。

メッセージを使って、蝶のスピードを変える

今度は、「メッセージ」という仕組みを利用していきます。

ここでは、ネコの「スプライト」がButterfly 2(蝶)の「スプライト」に触れたタイミングで、「メッセージ」を送り、Butterfly 2(蝶)の「スプライト」のスピードを徐々に上げていくことで、ゲームの難易度を変化させていこうと思います。

今回は、「ネコ」の「スプライト」から「メッセージ」を送るようにしたと思うので、左側の「イベント」から「メッセージ1を受け取ったとき」をドラッグし、「スコアを1ずつ変える」のすぐ下に挿入します。

挿入ができたら、「メッセージ1」のところをクリックし、「新しいメッセージ」を選択します。

選択するとモーダル画面が表示され、新しい「メッセージ」の名を設定します。
ここでは「捕まった」という名前を入力しています。他にわかりやすい名前であれば何でも構いません。入力できたら、「保存」をクリックします。

画面がもどると、先ほど作成した「メッセージ」である「捕まった」になっていることがわかります。

今度は、先ほど設定した「メッセージ」を受け取る側の蝶のスプライトの方に受け取りの処理を追加していきます。
スプライトを切り替えたいので、ステージ下にあるスプライトのところから、「蝶」のスプライトをクリックします。ここでは「Butterfly 2」をクリックします。

「メッセージ」の受け取りは、別のプログラムにする必要があるので、左側の「イベント」からどこか空いてる場所に「メッセージ1を受け取ったとき」をドラッグし配置します。
ドラッグできたら、「メッセージ1」の部分をクリックし、「捕まった」を選択します。

次にButterfly 2(蝶)の「スプライト」にも「変数」を設定します。
また新たに「変数」を作成したいので、左側の「変数」から、「変数を作る」を再びクリックします。

「新しい変数」のモーダルが表示されるので、新しい変数名を「スピード」とします。ここの変数名もわかりやすい名前であれば何でも構いません。
次にこの「変数」はこのButterfly 2(蝶)の「スプライト」でしか使わないものなので、ラジオボタンは右側の「このスプライトのみ」にチェックします。
できたら最後に「OK」をクリックします。

「OK」をクリックすると、コード(コードブロック)の画面に戻ります。
ステージを確認すると、スピードが追加されています。

次に先ほど作成した「変数」を設定します。同じく左側の「変数」のところから「〜を〜ずつ変える」をドラッグで「捕まったを受け取ったとき」のすぐ下に挿入します。
挿入できたら、変数名をクリックで「スピード」を選択し、「〜ずつ変える」を「5ずつ変える」に変更します。図のように「スピードを5ずつ変える」になっていれば大丈夫です。

今度は、実際に「メッセージ」を受け取ったタイミングで、Butterfly 2(蝶)の「スプライト」が移動するスピードを「変数」にセットしたスピードになるようにします。また最初の「が押されたとき」のスピードの初期値を設定していきます。

まず最初のスピードとなる初期値を決めたいので、左側の「変数」から「〜を〜にする」をドラッグし、「が押されたとき」の下に挿入します。挿入できたら変数名をクリックし「スピード」を選択、値を「10」に変更します。図のように「スピードを10にする」になっていれば大丈夫です。

次に「変数」にセットされたスピードを変更します。現在「10歩動かす」のところに「変数」から「スピード」をドラッグし、「10」のところを変数の「スピード」に置き換えます。

これで、「ネコ」の「スプライト」から送くられた「メッセージ」をButterfly 2(蝶)の「スプライト」が受け取ったとき、Butterfly 2(蝶)の「スプライト」のスピードが5ずつ上がっていくようになりました。

ステージにスピードの表示がされ、「ネコ」の「スプライト」がButterfly 2(蝶)の「スプライト」に触れる度にスピードの値が増えていっているのが確認できるかと思います。

スピードの変数表示を非表示にする

スピードが増えていくという処理の動作確認でき、スピードが変化しているのがわかりました。スピードの表示自体は不要だと思うので非表示にしたいと思います。
左側の「変数」のところから「変数〜を隠す」ドラッグで「が押されたとき」のすぐ下に挿入します。「〜」の部分を「スピード」に変更し、「変数スピードを隠す」に変更します。これで、プログラムが動くと最初にスピードの表示が非表示になります。

これで完成です。をクリックしスタートします。スピードの表示もなくなっていることがわかりま。
「ネコ」の「スプライト」がButterfly 2(蝶)の「スプライト」に触れる度にButterfly 2(蝶)の「スプライト」に移動速度が早くなっているかと思います。

まとめ

  • スコアや移動速度の動的な数値は、「変数」を使う。
  • スプライト同士の連携は、「メッセージ」を使う。
  • 「メッセージ」を受け取る場合の処理は、別のブロックのかたまりとして作成する。
  • 「変数」は「変数〜を隠す」を使い非表示にすることができる。

「変数」や、メッセージを受け取る処理は、はじめは少々複雑に思えるかもしれません。しかし、この処理を利用することで、動的なプログラムを作ることができます。最初は単純なアニメーションのようなものをゲームのようにすることができるのです。理解できるようになると感覚でできるようになりますが、最初は、「どう言う条件で、どうなるのか?」というのが作っているうちいわからなくなっていき、うまく動作しないという場合に陥ることもあるかと思います。
最初は、メモなどで「どういう状態のときにどうしたいのか?」というものをきちんとまとめて、それをブロックで表現できるようにされてみてはかと思います。

また今回作ったプログラムの「数値」の部分ををいろいろ変更したり、新たな変数を追加したりなど、難易度やスコアを自由にカスタマイズしてみてください。

最初と比べてゲームっぽくなってきましたが、このままでは、延々とスコアが入り、難易度も上がっていくだけで終わりがありません。次回はゲームオーバーする要素や条件を追加していきたいと思います。

次の記事:Scratchでリストを使いセリフを出し分ける。敵のスプライトを追加する