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

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

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

子どもでもわかるSCRATCH入門

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

[ 19.インベーダーゲームを作ろう その1 ] の続きです。
プロジェクトを作成して背景を黒く塗り、自機をカーソルキーで左右に動かす仕組みを
作りました。

 

1. 敵を並べて表示する

今回の敵役として Gobo を使います。

scratch インベーダーゲームを作ろう

縦5×横10で合計50の敵を並べて表示します。

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

スクラッチで簡単ゲーム作成

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

 

複数の敵はクローンで作ります。試しに10個作ってみましょう。
クローンを作るオリジナル側の処理です。

オリジナルを元にクローンで複製を作る

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

 

クローン側の処理です。

クローンで敵を複製する

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

敵の数に 30 を掛けている理由は、敵の数が1つ増えるごとに
30 ずつ右にずれた座標に表示するためです。

 

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

敵を等間隔で綺麗に並べる方法

 

 

2. 縦と横に並べて表示する

5×横10の形で並べる仕組みを作ります。
まず、実行結果とスクリプトを見て下さい。

敵を綺麗に並べるにはどうするか

 

敵の数によって表示位置が決定するわけですが、どのように並んでいるかを調べてみると
次のようになっています。

初級ゲーム制作
(この画像は偶数の番号のみ表示しています)

一番下の段が1から 10。一番上の段が 41 から 50 になってます。
これを踏まえた上で計算方法を見ていきましょう。

 

x座標の式は、次のように組み合わせています。

割り算の余りを使って並べる

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

 

y座標の式は、次のように組み合わせています。

割り算の整数部分と余りで並べる

敵の数から1を引いて10で割った商 (整数部)は、0 から 4 という結果が得られます。
これに縦の間隔を空けるため 37 を掛けています。
-30 はy軸の基準点です。
なお、切り下げとは小数点以下を無くす為に使ってます。(ここでは商を得るため)
切り下げ (2.8) なら結果は2となります。

 

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

割り算の商と余りを使って行列を作る

上に飛び出た敵は 50 番目です。50÷5=5 なので6段目に表示されます。

それから、ここでの計算式が理解できなくても、あまり悩まず先に進んで下さい
いつか余裕のあるときにゆっくり見直してみましょう。

 

 

3. 敵を動かしてみよう

インベーダーゲームの敵の動き方は特徴があります。
すべての敵が一斉に1歩動いては止まる、これを繰り返しています。

50個の敵がそれぞれ勝手に動いていては、何かあればすぐバラバラに動くようになります。
ここは司令塔を作り、その司令塔から移動の指示を出すようにします
司令塔はオリジナルの Gobo にやってもらいましょう。

司令塔から移動の命令を出す

 

実行してみて下さい。
50個の敵が勢ぞろいした1秒後に、ちょっとずつ右へ移動する動作が確認できるはずです。

 

 

4. 反転処理を入れよう

一番右端にいる敵が壁際まできたら、敵全体が左へ移動し始める
という処理を入れるためには、進行方向と反転を指示するフラグが必要になります。
まず、この2つの変数を作ります。

進行方向と変転を支持する変数を作る

どちらもすべてのスプライト用にします。
このスプライトのみを指定すると、クローン1つ1つ独立で変数を持つようになってしまい、
全体を統制するための変数として役に立たなくなってしまいます。

 

2つの変数を登録したらステージから消す為にチェックを外しましょう。

変数の前のチェックを外してステージから消す

 

司令塔側の処理です。今までは移動処理だけ発行していたのを
反転指示変数が1だったら、進行方向変数を変更 (0と1の切り替え) します。

反転処理は司令塔が行う

 

移動処理部分です。
進行方向変数により、ならに進み、ならに進むようにしています。

移動処理に反転処理を追加する

進行方向=0 (つまり右に進んでいる)のとき、x座標が210以上なら反転指示を1にします。

 

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

画面が表示されない場合はここをクリック

 

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

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