今回は、キーボードでスプライトを操作する、少しゲーム調のプログラムを作成します。練習のテーマはもちろん変数です。
ステップ1
- スクラッチの画面で新しいプロジェクトを作成し、プロジェクト名として「フグとサメ」を入力します。
- ネコのスプライトを削除し、フグ(Pufferfish)とサメ(Shark2)をプロジェクトに読み込みます。
- フグとサメのスプライトをステージの下図の位置に置きます。
ステップ2
まずはフグのスクリプトを作成しましょう。
- Pufferfishスプライトを選択し、Pufferfishのコードエリアを開きます。
- [緑の旗が押されたら]イベントブロックをドラッグ&ドロップします。
- フグの位置を(-172, -82)にします。そのためには[動き]->[x座標を(-172)、y座標を(-82)にする]を使います。
ステップ3
フグの移動スピードに使う変数speedを作成します。
- [変数]->[変数を作る]ボタンをクリックします。
- [新しい変数]ボックスの[]新しい変数名]にspeedと入力して、[OK]をクリックします。
- [(speed)を(0)にする]をドラッグ&ドロップします。


これで変数speedには数値の0が入ります。これを、変数speedを0で初期化した、と言います。
ステップ4
では、フグを動かしていきましょう。フグを動かすには、Pufferfishスプライトに[動き]->[(10)歩動かす]ブロックを使用します。この歩数は移動量で、大きいほど速く動き、小さいほどゆっくり動いているように見えます。
10歩動かすと10歩分移動するだけで、連続して動いているようには見えません。連続して動いているように見せるには、[ずっと]ブロックの中に入れて、[ずっと][(10)歩動かす]ようにします。

[緑の旗]ボタンをクリックしてプログラムを実行します。ふぐはスタート位置(-172,-82)から右に連続して移動し、ステージ右端に消えます。赤丸の[停止]ボタンをクリックして、プログラムを停止します。
今度は歩数の10を5に変更します。半角です。[緑の旗]ボタンをクリックしてプログラムを実行すると、フグは前と同じようにスタート位置に移動した後、右に移動を開始しますが、スピードが前より遅くなっていることが分かります。[停止]ボタンをクリックします。
ステップ5
フグは今、10か5という決め打ちをした、実際の数値で動いていますが、変数を使っても動かすことができます。
- [変数]-[(speed)]をドラッグして、[( )歩動かす]の( )の上でドロップします。
- プログラムを実行します。今度は右に移動します。
- speedを10にしてプログラムを実行します。今度はもっと速く移動します。
プログラムを実行します。フグはスタート位置に移動しますが、その後動きません。なぜでしょう?
今speedの値は0で、動かすブロックが[(0)歩動かす]になっているからです。
[(5)歩動かす]ようにするには、speedに5を入れる必要があります。

フグのスプライトは、[ずっと]ブロック内の[(speed)歩動かす]ブロックを実行するとき、変数speedを見つけると、毎回その中を調べます。すると毎回、中には数値の5が入っているので、変数をその値に置き換えて[(5)歩動かす]を実行します。
ステップ6
キーボードの右矢印キーをプログラムに組み込みます。ここから少しゲームっぽくなっていきます。
- [(speed)を(10)にする]の10を0に戻します。数値は必ず半角で入力します。
- [イベント]-[(スペース)キーが押されたとき]をドラッグ&ドロップして、新しいスクリプトを開始します。
- (スペース)の右の下向き三角をクリックして、[右向き矢印]を選択します。
ここは重要なポイントです。上に[緑の旗が押されたとき]があるスクリプト(ブロックのひとかたまり)は、ステージ左上の[緑の旗]ボタンがクリックされたら実行されます。これに対し、上に[(右向き矢印)キーが押されたとき]があるスクリプトは、キーボードの右矢印キーが押されたときに実行されます。つまり2つのスクリプトはそれぞれ開始のきっかけが異なり、押されなければずっと実行されません。
[緑の旗が押されたとき]と[(右向き矢印)キーが押されたとき]コードブロックの形を見ると分かりますが、両方とも他のブロックの下には吸着しない形状になっていて、スクリプトの一番上にしか来ません。
ステップ7
右矢印キーで右に動くようにしましょう。
- [変数]-[(speed)を(0)にする]をドラッグして、[(右向き矢印)キーが押されたとき]に吸着させます。
- [(speed)を(0)にする]の0を5に変更します。
- [緑の旗]をクリックします。ステージ左上の[speed]は(0)になっていて、フグは動きません。
- 気ボードの右矢印キーを押します。するとフグは右に移動します。[speed]は(5)になります。
なぜフグは、[緑の旗]のクリックで動かず、右矢印キーの押し下げで動くのか、理由を考えてみましょう。
[緑の旗]のクリックでは、speedが0なので、[ずっと]ブロックの中で何回[(speed)歩動かす]を実行しても、[(0)歩動かす]なので、動きません。
しかし、右矢印キーの押し下げでspeedは5になります。すると、[ずっと]ブロックの中の(speed)が5になるので、[(5)歩動かす]が実行されることになって、右に移動します。
では、[緑の旗]をクリックせず、右矢印キーを押すとフグは移動しません。これはなぜでしょう? 考えてみてください。
speedの値は[変数]-[(speed)を1ずつ変える]でも変更することができます。このブロックを使うと、変数の値が1ずつ大きくなるので、今の場合で言うと、0,1,2,…と変化し、フグはスピードアップすることになります。具体的に言うと、speedは最初0でフグは動きませんが、1回右矢印キーを押すとspeedは1になるので右にゆっくりのスピードで動きます。もう一度右矢印キーを押すとspeedは2になるので、倍のスピードになります。

ステップ8
止まる機能をフグに加えます。下矢印キーが押されたらspeedを0にする、というイベントブロックを新たに加えます。
- [イベント]-[(スペース)キーが押されたとき]をドラッグ&ドロップして、新しいスクリプトを開始します。
- (スペース)の右の下向き三角をクリックして、[下向き矢印]を選択します。
- [変数]->[(speed)を(0)にする]をドラッグ&ドロップします。
- プログラムを実行してテストします。右矢印キーを押すとフグは右に移動し、下矢印キーを押すと止まります。
フグのスプライトの[ずっと]ブロック内の[(speed)歩動かす]コードブロックによって、フグはずっとspeedの影響を受けることになります。たとえば右向き矢印キーを1回押すとspeedは1になるので、[(1)歩動かす]ブロックによってフグはゆっくり右に移動します。右向き矢印キーをもう1回押すとspeedは1大きくなり2になるので、[(2)歩動かす]ブロックによって加速して右に移動します。そして下向き矢印キーを押すとspeedは0になるので、[(0)歩動かす]ブロックによって、動きが止まります。
変数の値をあるイベントブロックで変えると、その効果か別のイベントブロックで現れるのが、変数の面白いところです。これは、各イベントブロックのコードが変数を含む命令を実行するとき、同じ変数の箱の中身(値)を見に行っているからです。

ステップ9
サメにスクリプトを設定して、フグの方を向くようにしましょう。
- [Shark2]スプライトをクリックし、Shark2のコードエディタに移ります。
- [緑の旗が押されたとき]イベントブロックをドラッグ&ドロップします。
- [動き]->[回転方法を[左右のみ]にする]をドラッグして(2)に吸着させます。
- [動き]->[(90)度に向ける]をドラッグして(3)に吸着させ、90を-90に変更します。
[回転方法を[左右のみ]にする]は、[スプライトリスト]でShark2を選択し、[スプライト]の[向き]のクリックで表示される回転方法の真ん中の[左右のみ]をクリックして選択するのと同じです。また[(-90)度に向ける]は、回転のボタンの上にある円の真左に向けることです。

ステップ10
サメがふぐをずっと見ていたら、ふぐは通り抜けられそうにないので、サメが時々姿を消すようにしましょう。
- [制御]->[ずっと]をドラッグして、[(-90)度に向ける]の下にドロップします。
- [ずっと]のへこみの中に、[見た目]-[表示する]と[制御]-[(1)秒待つ]をドラッグします。
- その下に、[見た目]-[隠す]と[制御]-[(1)秒待つ]をドラッグします。
- 最後に、[変数]にある(speed)ブロックのチェックマークをクリックして外します。これにより、ステージ左上にある変数speedの表示が消えます。

このコードブロックを実行するとどうなるか想像できますか? [ずっと]内に入れた4つのブロックの働きを考えながら、想像してみてください。
変数の値は、プログラムがスタートするときに値を入れるようにします(初期化と言います)。変数の初期値は数値の0である必要はありません。プログラムによって変わります。
今回のプログラムのコードはこのリンクからダウンロードできます。