初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

子どもでもわかる Scratch 入門

20.インベーダーゲームを作ろう その2

 

[ 19.インベーダーゲームを作ろう その1 ] の続きです。

プロジェクトをリミックスして背景を黒く塗り、自機をカーソルキーで左右に動かす仕組みを作りました。

 

 

敵を並べて表示しよう

Gobo を敵として使います。可愛くて私の一番好きなキャラです。

Goboを敵として使う

 

まず敵を数えるための変数を作ります。変数名は敵の数にします。

すべてのスプライト用を選択して、OKをクリックします。

敵を数えるための変数を作る

 

たくさんの敵はクローンで作ります。まずは10個作ってみましょう。

敵のクローンを10個作る

オリジナルはステージに表示しないので隠します。
大きさは 28%ぐらいがちょうど良いでしょう。
10回繰り返すを使ってクローンを作ります。

 

クローン側の処理を追加します。
演算は重ねて使うので、画像をよく見てやりましょう。

クローンを作り間隔をあけて表示する

クローンされたとき、座標を計算しています。
y座標は 0です。これは後で修正します。
x座標は (敵の数)*30-155 の位置に表示します。

敵の数に 30 を掛けて間隔をあけます。

 

実行すると次のようになります。

Goboを10個、並べて表示する

 

 

縦と横に並べて表示しよう

5 × 横 10 の形で並べる仕組みを作ります。
このようになります。インベーダーっぽいですね。

Goboを5x10に並べて表示する

 

縦横に並べるプログラムを作ります。

Goboを5x10に並べるプログラム

 

座標計算がすごいことになっています。
まずは x 座標を見てみましょう。

x座標の計算

敵の数から1を引いて10で割った余りは、0 から 9 という結果になります。
これに横の間隔を空けるため 30 を掛けています。
-155 はx軸の基準点です。

 

つぎは y 座標です。

y座標の計算

敵の数から1を引き 10で割った値に切り下げを使います。
切り下げとは小数点以下を無くすために使ってます。
例えば、2.8 を切り下げると結果は 2 になります。
この計算から 0 から 4 という結果になります。

これに縦の間隔を空けるため 37 を掛けています。
-30 はy軸の基準点です。

 

表示位置はクローンされたときの敵の数によって決まります。
それぞれがどのあたりなのか表示してみます。

敵の並び順を表示する

この画像では、偶数のみを表示しています。
左下から始まり、最後に右上の表示となっています。
プログラムの理解がむずかしいとき、このように表示すると処理の動きがイメージし易くなります。

 

ちなみに敵の数から1を引かないで実行すると次のようになります。

敵の数から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にします。

 

とりあえず、実行してみて下さい。
上手くいけば、左右の端から端まで移動を繰り返すと思います。

画面が表示されないときはここをクリック

 

実行結果をよく見ると、右端に来る前に反転しています。
そうです。この反転処理にはバグ(不具合)があります。

次回、このバグを取る所から始めます。