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

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

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

子どもでもわかるSCRATCH入門

21.インベーダーゲームを作ろう その3

[ 20.インベーダーゲームを作ろう その2 ] の続きです。
敵を並べて表示して、左右に動くようにしました。しかし、その仕組みには
バグがあったのでその対処から始めます。

 

1. 反転処理のバグを取ろう

現在、敵が右端まで来ない内に反転するバグがあります
どうして反転してしまうのでしょうか?
実は右端まで敵は来ているのです。

見えないようにしているオリジナルの Gobo を見えるようにします。

ゲームにあるバグを取る

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

バグの探し方入門

右下にオリジナルの Gobo がいました。
この敵もクローンと同じ処理をしていたので、この敵が右端に来たとき
反転指示変数を1にしていたのです。

対処方法は、処理内容をオリジナルとクローンで区別するようにします。
後のことも考えて、
隠すもの (オリジナル)と表示するもの (クローン)で区別するようにします。

 

区別をする為に敵の表示という変数を作ります。

バグの探し方

変数名は敵の表示
スプライト1つ1つに対応する必要があるためこのスプライトのみを指定します。
それから、表示チェックを外してステージから消します。

 

区別する為のスクリプトは次のようになります。

オリジナルとクローンでの処理を区別する

変更点は3つです。

まず、初期化処理です。
50回繰り返すの前に敵の表示を0にするを追加します。

表示するものを指定します。
クローンされたときの表示するの後に敵の表示を1にするを追加します。

隠すものの場合、移動処理を止めます。
移動を受け取ったときもし敵の表示が0ならスクリプトを止めるを追加します。

 

正常に動くか確認しましょう。
もしオリジナルを表示したままなら隠すように戻して下さい。
では、実行しましょう。
ステージの端から端まで敵が移動するようになったら成功です。

 

 

2. スクリプトを短くしてみよう

スクリプトの書き方 (プログラミング) はいろいろあると思います。
どんな書き方でも、思い通りの結果が得られるならそれは正しい書き方です。

ただ、スクリプトが多くなる (長くなる) と後で見たとき分かり難くなるのも事実です。
これはメンテナンス性の悪いプログラミングと言えます。
バグが発生したときに対応しにくい、新しい仕様を追加しにくい
などの欠点があります。

 

例を1つ見てみましょう。

スクリプトを短くしてメンテナンス性を上げる

これは進行方向を切り替える処理です。
進行方向変数が0なら1へ、1なら0にしています。

もし~なら、でなければを使って切り替えるスクリプトを1つにしています。

進行方向を1-進行方向にするを見てみると
進行方向が0なら、1-0=1で1が代入されます。
進行方向が1なら、1-1=0で0が代入されます。

 

このような感じで、プログラミングに余裕が出てきたら意識するようにしましょう。

 

 

3. 敵を進攻させよう

敵がステージの端に来たとき、反転処理といっしょに下の方向に進める「進攻」の
仕組みを作ります。

敵のオリジナルが移動メッセージを出して敵全体を動かすように、
進攻メッセージを出して下に動かすようにします。

メッセージのやり取りで同期を取る

 

反転指示の中に進攻を送るを追加します。

進攻メッセージは新しく作ります。

メッセージを新しく作る

 

進攻を受け取ったときの処理はy座標を-15ずつ変えるだけです。
ただし、移動の時と同様に敵の表示が0のときはスクリプトを止めます
これでオリジナルの敵は動きません。

 

 

4. スペースキーを押したらビームを撃つ

スペースキーが押されたら自機からビームを発射する仕組みを作ります。

まず、ビームのスプライトを用意します。
リミックスした人は beam というスプライトを使います。

自機からビームを発射する方法

beam スプライトの中には、発射したときのビームの絵と爆発の絵があります。
今回はビームの絵を使います。

 

beam スプライトのスクリプトです。

自機から弾を撃つプログラム

スペースキーが押されたときのイベントを使います。

自機のx座標とy座標を取得して、beam スプライトの座標に入れます。
100層下げるとは、表示する順番を下げています。
これを入れないと、自機や敵の上をビームが移動するなんてこともありえます。
表示する優先順位は、重要なものほど上に表示されるよう作りましょう。

他のスプライトの座標などを取得したいときには、
調べるカテゴリにある調べるスクリプトを使います。
取得内容 (取得対象)
という構成になっていて、それぞれ指定します。

他のスプライト情報などを調べる方法

 

実行してみましょう。

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

スペースキーを押してビームがステージの上部まで届くかチェックしましょう。
だんだんインベーダーゲームっぽくなってきましたね。

 

次回に続きます。