子どもでもわかる Scratch 入門
20.インベーダーゲームを作ろう その2
[ 19.インベーダーゲームを作ろう その1 ] の続きです。
プロジェクトをリミックスして背景を黒く塗り、自機をカーソルキーで左右に動かす仕組みを作りました。
敵を並べて表示しよう
Gobo を敵として使います。可愛くて私の一番好きなキャラです。
まず敵を数えるための変数を作ります。変数名は敵の数にします。
すべてのスプライト用を選択して、OKをクリックします。
たくさんの敵はクローンで作ります。まずは10個作ってみましょう。
オリジナルはステージに表示しないので隠します。
大きさは 28%ぐらいがちょうど良いでしょう。
10回繰り返すを使ってクローンを作ります。
クローン側の処理を追加します。
演算は重ねて使うので、画像をよく見てやりましょう。
クローンされたとき、座標を計算しています。
y座標は 0です。これは後で修正します。
x座標は (敵の数)*30-155 の位置に表示します。
敵の数に 30 を掛けて間隔をあけます。
実行すると次のようになります。
縦と横に並べて表示しよう
縦 5 × 横 10 の形で並べる仕組みを作ります。
このようになります。インベーダーっぽいですね。
縦横に並べるプログラムを作ります。
座標計算がすごいことになっています。
まずは x 座標を見てみましょう。
敵の数から1を引いて10で割った余りは、0 から 9 という結果になります。
これに横の間隔を空けるため 30 を掛けています。
-155 はx軸の基準点です。
つぎは y 座標です。
敵の数から1を引き 10で割った値に切り下げを使います。
切り下げとは小数点以下を無くすために使ってます。
例えば、2.8 を切り下げると結果は 2 になります。
この計算から 0 から 4 という結果になります。
これに縦の間隔を空けるため 37 を掛けています。
-30 はy軸の基準点です。
表示位置はクローンされたときの敵の数によって決まります。
それぞれがどのあたりなのか表示してみます。
この画像では、偶数のみを表示しています。
左下から始まり、最後に右上の表示となっています。
プログラムの理解がむずかしいとき、このように表示すると処理の動きがイメージし易くなります。
ちなみに敵の数から1を引かないで実行すると次のようになります。
上に飛び出た敵は 50 番目です。50÷5=5 なので6段目に表示されます。
それから、ここの計算式が理解できなくても、あまり悩まず先に進んで下さい。
いつか余裕のあるときにゆっくり見直してみましょう。
敵を動かしてみよう
インベーダーゲームの敵の動きには特徴があります。
すべての敵が一斉に1歩動いては止まる、これを繰り返しています。
50個の敵がそれぞれ勝手に動いていては、何かあればすぐバラバラに動くようになります。
ここは司令塔を作り、その司令塔から移動の指示を出すようにします。
司令塔はオリジナルの Gobo にやってもらいましょう。
指示を出すために移動指示という新しいメッセージを作ります。
ずっとと移動指示を受け取ったときの処理を追加します。
実行してみましょう。
50個の敵が1秒ごとに右へ移動します。
反転処理を入れよう
右へ移動する敵が端まできたら、敵全体が左へ移動するという処理を入れます。
その準備として、進行方向と反転を指示するフラグが必要になります。
まず、2つの変数を作ります。
50個のクローンに対して使うので、どちらもすべてのスプライト用にします。
司令塔側の処理です。
反転指示は0、進行方向は10で初期化します。
反転指示が1のとき、進行方向の正負を逆転させます。
進行方向が10ならば−10に、−10ならば10になります。
移動側の処理です。
移動指示を受け取ったときの処理を大きく変更します。
x座標の移動は進行方向の値を使います。
10なら右へ、-10なら左へ移動します。
端まで来たかチェックをしています。
右へ移動しているとき(進行方向10)x座標が210以上なら反転指示を1にします。
とりあえず、実行してみて下さい。
上手くいけば、左右の端から端まで移動を繰り返すと思います。
実行結果をよく見ると、右端に来る前に反転しています。
そうです。この反転処理にはバグ(不具合)があります。
次回、このバグを取る所から始めます。