レッツ!スクラッチ (13) インベーダーゲームをつくろう ― 爆発させよう!
このインベーダーゲームでは、たまをうって敵に当たったときに点数が入ったり、敵が自分の陣地まで来たときにゲームオーバーになったりする処理を入れてきましたが、いずれももう一味ほしいと思いませんか?
そう、たまが当たったら爆発してほしいし、ゲームオーバーになったらプレイヤーも爆発したほうが、それっぽくなりますよね?
敵を爆発させる
まずは、そう、爆発のスプライトを用意しましょう。
スプライトペインから爆発っぽいイラストを選びます。
ここではSunを選びました。
Sun(サン)とは太陽のことなので、爆発のイラストではないようですが、見た目には爆発にしても問題なさそうなので、このイラストを使います。
「Sun」スプライトのコード画面で、「旗マークが押されたとき」ブロックを配置します。初期設定ですね。
最初から爆発が表示されていたらおかしいので、「旗マークが押されたとき」ブロックの下に「隠す」ブロックをつけます。
これで初期設定では爆発は表示されなくなりました。
次に、「Ghost」スプライトを表示しましょう。
敵がたまに当たったときに、爆発の表示をするので、Ghostスプライトのコードに設定していきます。
「あたり判定を受け取ったとき」ブロックの、「敵の出現を送る」ブロックの上に「(メッセージ)を送る」ブロックを入れて、新しいメッセージ「敵の爆発」をつくり、「敵の爆発を送る」ブロックにします。
再度、「Sun」スクリプトを表示してください。
今度は、「敵の爆発を受け取ったとき」ブロックを配置します。
その下に「自分自身のクローンを作る」ブロックをくっつけます。
「クローンされたとき」ブロックを配置します。
その下に「表示する」ブロックをつけます。
爆発がすぐに消えてしまっては見えないので、「1秒待つ」ブロックをその下にくっつけます。
その下に「このクローンを削除する」ブロックをくっつけます。
これで、旗アイコンをクリックしてみてください。
敵にたまが当たると爆発イラストが出てきたでしょうか?
でも…あれ?
爆発イラストが敵の場所に表示されませんね?
いつも同じところに表示されてしまいます。
こんなときはどうすればよかったのでしょうか?
そう、「Ghost」スプライトのあったところに「Sun」スプライトを持っていけばいいのでした!
「クローンされたとき」ブロックの下に「Ghostへ行く」ブロックをくっつけてみましょう。
さあ、旗アイコンをクリックして再スタートしてみてください。
今度はどうでしょうか?
…やっぱり、敵に当たった場所に爆発は表示されず、同じ場所に出てきてしまいますね?
これはなぜでしょうか?
実は、「Ghostへ行く」ブロックは、Ghostスプライト本体の場所に行く、という意味であり、クローンの場所に行く、という意味になっていないのです。
「Ghostへ行く」だと、Ghostスプライトの初期設定である、X座標が0、Y座標が130の場所に行く、という意味になってしまうため、いつも同じ場所に爆発が表示されてしまうのです。
では、どうすればよいでしょうか?
ここでも使うのは変数なのです。
たまが当たったときに、クローンがいたX座標とY座標を、それぞれ変数に入れて、その変数の場所に爆発を表示させればよいのです。
具体的にやっていきましょう!
「Ghost」スプライトを表示させます。
「変数を作る」で、「敵のX座標」と「敵のY座標」という変数を作ります。
「クローンされたとき」ブロックの、「ずっと」ブロックの一番下に、「敵のX座標を0」にするブロックをくっつけます。
0の部分を「x座標」ブロックに変えて、「敵のX座標をx座標にする」にします。
その下に、「敵のY座標を0にする」ブロックをくっつけて、0の部分を「y座標」にします。
「Sun」スプライトを表示します。
「クローンされたとき」ブロックの「Ghostへ行く」ブロックをどかして、代わりに「x座標を0、y座標を0にする」ブロックを入れます。
「敵のX座標」ブロックと「敵のY座標」ブロックを入れて、「x座標を敵のX座標、y座標を敵のY座標にする」にします。
旗アイコンをクリックして再スタートしてみてください。
これで敵にたまが当たると、1秒間爆発表示されるようになりました。
爆発をアニメーションしてみる
でも、まだ物足りませんよね?
なんだか、爆発表示なんだけど、爆発っぽくないですね。
やっぱり、ボカーン!と爆発に動きがないと、爆発した感じが出ませんね。
ということで、爆発に動きをつけてみましょう。
具体的には、爆発のスプライトの大きさを変えて、爆発が徐々に大きくなり、最後は小さくなって消えるという動きにして、爆発している感じを出してみます。
「Sun」スプライトでコードをつくっていきます。
まず、変数で「爆発の大きさ」という変数を作りましょう。
爆発は徐々に大きくなっていくので、最初の大きさは0にします。
「クローンされたとき」ブロックの「表示する」ブロックの下に「爆発の大きさを0にする」ブロックをくっつけます。
「爆発の大きさを0にする」ブロックの下に「まで繰り返す」ブロックを置きます。
「まで繰り返す」ブロックの穴に「 =50 」ブロックを入れます。
「 =50 」の左側に「爆発の大きさ」ブロックを入れます。
「 =50 」の右側には「5」と入力しましょう。
これで、爆発の大きさは5段階で表示されることになります。
次に、「爆発の大きさ=5まで繰り返す」ブロックの中に、「爆発の大きさを1ずつ変える」ブロックを入れます。
その下に「大きさを100%にする」ブロックをくっつけます。
「大きさを100%にする」ブロックの100を、「 * 」ブロックにします。
「 * 」の左側に「爆発の大きさ」ブロックを入れ、右側に「20」と入力します。
これで、爆発は、0~5 × 20%ずつ大きくなっていきます。
つまり、
0 × 20 = 0%
1 × 20 = 20%
2 × 20 = 40%
3 × 20 = 60%
4 × 20 = 80%
5 × 20 = 100%
ということです。
さらに、爆発が大きくなったあと、小さくしぼんで消える、というようにしたいので、もう一つ、「まで繰り返す」ブロックを置きましょう。
今度は、「爆発の大きさ=0まで繰り返す」にします。
その中に「爆発の大きさを-1ずつ変える」ブロックを入れます。
爆発が小さくなっていくので、数字は「1」ではなく、「-1」です。
さらに「大きさを爆発の大きさ*20%にする」ブロックをくっつけます。
「1秒待つ」ブロックを削除して、「このクローンを削除する」ブロックを最後にくっつけます。
さあ、旗アイコンをクリックしてゲームスタートしてみてください。
たまが敵に当たると、爆発するようになりましたね?
これでグッとゲームっぽい演出になりました。
ゲームオーバーになったら自分が爆発する
今度は、敵が自分の陣地まで攻めてきたら、自分も爆発するようにします。
まずは、ゲームオーバー時に自分を消すために、「スプライト1」スプライトを開きます。
「ゲームオーバーを受け取ったとき」ブロックを空白の場所に置きます。
その下に「隠す」ブロックをくっつけます。
これで、ゲームオーバーになったらロケットが消えるようになりました。
しかし、うっかり初期設定で「表示する」ブロックを入れ忘れていました。
「旗マークが押されたとき」ブロックの下に「表示する」ブロックを入れておきましょう。
次に爆発表示をします。
まずは「ゲームオーバー」スプライトを開きます。
新しい変数「ゲームオーバー」をつくります。
「ゲームオーバーを受け取ったとき」ブロックの下に「ゲームオーバーを1にする」ブロックを入れます。
「Sun」スプライトを開きましょう。
「クローンされたとき」ブロック内の、「x座標を敵のX座標、y座標を敵のY座標」ブロックをいったん外します。このブロックは後で使うので消さないでおきましょう。
そして、「表示する」ブロックと、「爆発の大きさを0にする」ブロックは「クローンされたとき」ブロックの下につけておきます。
そこに、「もし なら でなければ」ブロックを入れます。
「もし なら」の穴には、「 =50 」ブロックを入れます。
「 =50 」ブロックの左側には「ゲームオーバー」ブロックを入れ、右側の数字は「1」にします。
「もしゲームオーバー=1なら」の中には「スプライト1へ行く」ブロックを置きます。
「でなければ」の中には「x座標を敵のX座標、y座標を敵のY座標にする」ブロックを入れます。
そして、「もしゲームオーバー=1なら でなければ」ブロックの下に、「爆発の大きさ=5まで繰り返す」ブロックと「爆発の大きさ=0」まで繰り返す」ブロックと「このクローンを削除する」ブロックをくっつけなおします。
「ゲームオーバー」スプライトを表示します。
「ゲームオーバーを受け取ったとき」ブロックの「ゲームオーバーを1にする」ブロックの下に、「0.5秒待つ」ブロックを置きます。
「旗マークが押されたとき」ブロックに「ゲームオーバーを0にする」ブロックを入れます。
「ゲームオーバーを受け取ったとき」ブロックを置き、「自分自身のクローンを作る」ブロックをつけます。
これで、敵が一番下まで来たら自分が爆発して終わります。
ここでつくったプログラムの意味は、爆発スプライトがクローンされたときは、
もし、ゲームオーバー変数が1ならば、爆発クローンの位置はロケットの位置に移動し、そうでなければ爆発クローンの位置は敵のクローンの位置に移動する。
その後、爆発の大きさを0~100%に5段階で大きくしながら表示してから、100~0%の5段階で小さくして表示する。
全て終わったら爆発クローンを削除する。
というものです。
爆発スプライトがクローンされるとき、というのは、敵にたまが当たったときか、敵が自分の陣地まで下りてきたときです。敵が自分の陣地まで下りてきたらゲームオーバーになるので、ゲームオーバー変数が1というのは、敵が自分の陣地まで下りてきた、ということになります。そのときは、自分が爆発するので、爆発クローンの位置は自分のところ(スプライト1)に移動します。
ゲームオーバー以外で爆発スプライトがクローンされるのは、たまが敵に当たったときなので、ゲームオーバー変数が1ではないときに爆発スプライトがクローンされた場合には、たまが敵に当たったとき、ということになります。そのときには、爆発クローンの位置は敵がいた場所(Ghost)になります。
ロケットの爆発用のスプライトを別に用意する、という方法もあります。その方が設定としては簡単かもしれませんが、今回は同じ爆発スプライト内で敵の爆発と自分の爆発の両方の処理をしてみました。
ゲームオーバーになってもたまがうててしまう
さて、ここでゲームオーバーになったときにスペースキーを押してみましょう。
ゲームオーバーになって自分が爆発したのにたまがうててしまいますね?
これではおかしいので、ゲームオーバーになったらたまをうてなくしましょう。
「Ball」スプライトを開きます。
「スペースキーが押されたとき」ブロックの、「もしたまの存在=0なら」ブロックの、「たまの存在=0」ブロックをいったん外に出します。
また使うので消さないでくださいね。
そして、「 かつ 」ブロックを入れます。
「 かつ 」ブロックの左側に「たまの存在=0」ブロックを入れます。
「たまの存在=0かつ 」の右側に、「 ではない」ブロックを入れます。
「 ではない」ブロックの穴に「 =50 」ブロックを入れます。
「 =50 」ブロックの左側を「ゲームオーバー」ブロックにして、50を1にします。
これで、ゲームオーバーになったら、たまをうつことはできなくなります。
この意味は、スペースキーを押したときに、「ゲームオーバー」変数が1でなければたまのクローンを作る、という意味です。
ゲームオ ーバーになったときに、「ゲームオーバー」変数を1にすることで、スペースキーを押しても、たまのクローンが作られなくなります。
ちょっと長かったですか?
今回はここまでです。
これでようやく爆発のアニメーションも入って、ゲームも本格的になってきましたね?
でも、まだ物足りませんね?
次回は、敵が攻撃してくるようにしてみましょう!
→「レッツ!スクラッチ」コンテンツリスト
関連記事