1.2. 基本編#

本節では、Scratch を使って実際にゲームを作っていきます。ゲームを作ることで、プログラミングの基本的な仕組みや考え方を、楽しみながら自然に身につけることができます。ここでは、「キャラクターを動かす」ことを体験してみます。Scratch の世界では、キャラクターに命令を与えて、動いたり、しゃべったり、音を鳴らしたりすることができます。

1.2.1. 孤独な旅路を刻むネコの足音#

見果てぬ道の先に歩き続けるネコの物語をプログラムしてみましょう。Scratch には最初からネコのキャラクターが用意されているので、それを使って進めていきます。

まず、動きカテゴリーの中から10 歩動かすブロックを見つけて、スクリプトエリアにドラッグしてみてください。

../_images/scratch-ex01-001.png

次に、そのブロックをクリックしてみましょう。すると、ネコが少しだけ右に動くのが確認できるはずです。続いて、ブロックの中にある 10 の数字を 100 に書き換えて、もう一度クリックしてみてください。今度はネコがより長い距離を移動するのがわかります。このように、ブロックの中の数値を自由に変えることで、動作の内容も変化させることができます。

次は、ネコが 1 回だけ動くだけでなく、「ずっと前に歩き続ける」ようにしてみましょう。そのためには、制御カテゴリーの中からずっとブロックを取り出します。そして、先ほどの10 歩動かすブロックをこのずっとブロックの中に入れてください。

../_images/scratch-ex01-002.png

できあがったスクリプトをクリックすると、ネコがステージの右方向に歩き続けるようになります。途中でネコをステージ左側にドラッグしても、すぐに右へ向かって移動を再開します。動作を停止するには、プログラムをもう一度クリックします。

さらに、よりプログラムらしく整えてみましょう。イベントカテゴリーの中から(旗)が押されたときブロックを取り出し、先ほど作ったずっとブロックの上にくっつけてください。

../_images/scratch-ex01-003.png

これで、ステージ上部にある開始ボタン(緑の旗アイコン)をクリックすると、プログラムが実行されるようになります。また、停止ボタン(赤の八角形アイコン)を押すとプログラムが中断されます。

このように、Scratch ではほんの数個のブロックを組み合わせるだけで、キャラクターを動かすプログラムを作ることができます。

1.2.2. 翼なき日々に蒼空を求めて#

羽ばたく心、飛べぬ夢。青空を夢見る一羽のペンギン。その物語を Scratch でプログラムしてみましょう。ただジャンプし続けるだけの単純なプログラムですが。

今回の主役はペンギンです。まずはキャラクターの変更から始めましょう。画面右下のネコのアイコンをクリックし、続けて虫眼鏡アイコンを選びます。検索ウィンドウが表示されたら、「penguin」と入力して好きなキャラクターを選びましょう。キャラクターが追加されたら、スプライトリストに戻り、ネコの右上にあるゴミ箱マークをクリックして、ネコを削除します。夢見るペンギンに、ネコのしがらみは不要です。

キャラクターの準備ができたら、次はプログラムです。まずは、飛んで落ちるという基本的な動作を組み立てます。

  1. イベントカテゴリーから、(旗)が押されたときブロックをスクリプトエリアに置きます。

  2. 動きカテゴリーから y 座標を 10 ずつ変えるブロックを追加し、数値を 100 に変更して(旗)が押されたときに接続します。

  3. さらに同じブロックを追加し、数値を -100 に変更して続けて接続します。

../_images/scratch-ex02-001.png

これで開始ボタンをクリックすると、ペンギンは上に 100px 移動した後、下に 100px 戻るというプログラムの出来上がりです。

しかし、実際に開始ボタンをクリックするとペンギンが動いていないように見えます。これは、移動があまりに速すぎて目で追えないためです。ペンギンが光速でジャンプした、と思っても構いませんが、ここは冷静に、上昇と下降の間「待ち時間」を入れましょう。制御カテゴリーから 1 秒待つブロックを取り出し、上下移動の間に差し込みます。

../_images/scratch-ex02-002.png

こうすると、開始ボタンを押すたびに「飛んで落ちる」という動作が確認できるようになります。

次に、この動きを延々と繰り返すプログラムにしてみましょう。制御カテゴリーからずっとブロックを取り出し、上下移動と待機の一連の処理を中に入れます。

../_images/scratch-ex02-003.png

これでペンギンは、空に飛び上がっては落ちる、という繰り返しになります。試しに開始ボタンをクリックしてみてください。動きはまだぎこちないかもしれませんが、ペンギンは確かに空を目指して跳ねています。

動きをもっと自然にしたいときは、もうひと工夫が必要です。たとえば、ペンギンの位置 \(y\)

\[ y = v_{0}t - \frac{1}{2}gt^{2} \]

に基づいて調整すれば、かなりリアルな動きになるかもしれません。ただし、これではペンギンは空を目指して飛びますが、読者の心は地面に叩きつけられる可能性があります。

そこで今回は、もっと平和的なアプローチをとりましょう。空中にいる時間を 1 秒から 0.5 秒に短くして、さらに地面にいる時間を長めに追加してみてください。例えば、次のようにプログラムできます。

../_images/scratch-ex02-004.png

さらに、着地後に左右に少し動くようなブロックを加えると、「飛ぼうか、やめようか」と迷っているような、ペンギンの繊細な心の揺れまで表現できるかもしれません。こうした小さな調整が、キャラクターに命を吹き込む第一歩です。

1.2.3. 羽ばたけぬ翼と夢の彼方#

空を飛ぶことを夢見るペンギン。そのひたむきな思いに、もう少し動きを加えてみましょう。今回は、10 回跳ねるごとにペンギンが「飛べないのは私の宿命なのか」とつぶやくような演出をつけてみます。そんなちょっと切ないプログラムを作ってみましょう。

まず、ペンギンが何回跳ねたかを数えるための変数を用意します。変数カテゴリーからmy variable 0 にするブロックを選びます。(旗)が押されたときブロックのすぐ下に追加しましょう。そして、my variable の右にある小さな三角をクリックし、「変数名を変更」を選びます。ここでは、飛ぶ回数と名づけてください。

続けて、この飛ぶ回数変数を、ペンギンが 1 回跳ねるたびに 1 増やす処理を加えます。たとえば、跳ねて落ちてくる一連の動作の終わりである1 秒待つブロックのすぐ後に、変数カテゴリーから飛ぶ回数を 1 ずつ変えるブロックを追加します。

../_images/scratch-ex03-001.png

次に、「10 回ごとにメッセージを出す」ための条件を作ります。「10 回飛んだとき」を「飛ぶ回数を 10 で割った余りが 0 のとき」のように読み替えて条件を作ります。

  • 制御カテゴリーからもし<>ならブロックをスクリプトエリアの空いている場所に置きます。

  • <>の部分に、演算カテゴリーの = 50 ブロックをはめ込みます。

  • = 50 の右側の 500 に変更し、左側にある演算カテゴリーの◯を◯で割った余りブロックを入れます。

  • ◯を◯で割った余りの最初の変数カテゴリーの飛ぶ回数ブロックを、2 つ目のには 10 を入力します。

../_images/scratch-ex03-002.png

そして、もし<>ならブロックの中に、見た目カテゴリーのこんにちは!と言うブロックを入れ、台詞を「飛べないのは私の宿命なのか?」変更してみましょう。最後に、ここで作ったもし<>ならブロックを、ペンギンの飛びプログラムの飛ぶ回数を 1 ずつ変えるブロックの直後に追加します。

../_images/scratch-ex03-003.png

試しに動かしてみてください。10 回ごとに生き方を見つめ直すペンギンは、今日もあきらめずに空を目指して跳び続けます。でも、まあ、やっぱり落ちるんですけどね。そして、気づくのです。どこかにバグがあることに。徹夜して直すか、それとも見なかったことにするかは、お任せします。

1.2.4. 彷徨える動物たちの庭#

乱数を使って、さまよい歩く動物たちのプログラムを作ってみましょう。まずは画面右下のネコのアイコンをクリックし、続いて虫眼鏡アイコン(スプライトを選ぶ)をクリックします。表示されたスプライトの中から好きな動物を選びましょう。この作業を繰り返して、いくつかの動物を追加してください。

次に、スプライトリストからネコをクリックします。必要に応じて「大きさ」を調整してください。ネコのスプライトが選ばれた状態で、スクリプトエリアにブロックを配置してプログラムを作っていきます。

まずは、簡単に、開始ボタンが押されたらネコが歩き始め、ステージの端に着いたら反対方向に向きを変える ようにしてみましょう。

../_images/scratch-ex04-001.png

プログラムができたら、試しに開始ボタンをクリックしてみましょう。ネコが歩き出し、ステージの端まで来ると反対方向に向きを変えるようになります。

基本の動きができたので、次は乱数を使って、いろいろな方向に歩くようにしてみましょう。10 歩動かすブロックの下に、動きカテゴリーの 90 度に向けるブロックをつなげます。さらに 90 の部分に、演算カテゴリーの 0 から 10 までの乱数ブロックを入れます。そして 010 をそれぞれ -180180 に書きかえます。

../_images/scratch-ex04-002.png

このプログラムを実行してみると、ネコは気まぐれに世界を歩き続けます。けれども、このネコ、生きた心地がしていないかもしれません。

次に、歩く距離も 10 歩ではなく、乱数にしてみます。

../_images/scratch-ex04-003.png

今度は、ネコが高速回転ではなく、瞬間移動していることが問題になってきました。これはずっとブロックの中の処理が一定の速さで繰り返されるため、同じ時間内に「10 歩」や「100 歩」を動いてしまい、結果的に一部では瞬間移動になってしまうからです。そこで、「1 回の処理で 1 歩ずつ進む」という形に変えれば、10 歩進む場合と 100 歩進む場合で時間に差が出て、動きが自然になります。

具体的には、-180 から 180 までの乱数歩動かすブロックを外し、その代わりに10 回繰り返すブロックを入れます。そして 10 の部分に-180 から 180 までの乱数ブロックを入れます。最後に、その中に 10 歩動かすもし端に着いたら、跳ね返るブロックを入れます。これで完成です。

../_images/scratch-ex04-004.png

続けて、この動作を他のスプライト(動物)にも適用していきます。それぞれのスプライトに対して、同じ作業を繰り返してプログラムを作っていくこともできますが、ここではネコので作った機能を誰でも使えるように関数化します。

ブロックエリアの定義カテゴリーにある「ブロックを作る」ボタンをクリックします。次に、ブロック作成ウィンドウが表示されるので、ブロック名を「さまよう」に変更して、他の設定をそのままで「OK」ボタンをクリックします。ブロックエリアに定義さまようブロックが表示されるので、ネコで作ったプログラムのうち、ずっとブロック以降をすべてこの定義さまように移動します。最後に、定義カテゴリーのさまようブロックを、(旗)が押されたときの直下に追加します。

../_images/scratch-ex04-005.png

ネコでの動作確認を行ってから、定義さまよう(旗)が押されたときのスクリプトを一つずつ、スプライトリストにある他のスプライトにドラッグ&ドロップします。これで、開始ボタンをクリックすると、すべての動物がさまよいはじめます。

ネコスプライトで定義したブロックを他の動物スプライトでそのまま呼び出せないの?と思ったあなた、それはできません。もし鳥で定義した「飛ぶ」という動作をペンギンにそのまま適用できてしまったら、生態系がくずれてしまいます!そのため、Scratch ではスプライトごとに動作を定義するルールを設け、さまざまな生き物の暮らしを守っているのです。これを「スプライト指向」と呼ぶことにしましょう。