BLOG

未来工作BLOG

2018.03.27

よーだのプログラミング講座 [Scratchで弾幕シューティング!]

こんにちは。
未来工作ゼミのハカセ。よーだです。
不定期連載スクラッチ講座です。
今回はリクエストを受けて、弾幕シューティングの作り方を解説したいと思います。
難易度はちょっと高め、中級者以上を対象としています。

準備はできているかな?

Scratch
このプログラミング講座では基本的にScratchを使います。
Scratchってなに?どうやって使うの?ということが知りたい場合は、まずScratch講座の最初から読んでもらえると良いと思います。

弾幕を作ろう!

Season2_2
今回目指す完成形はこんな感じです。
よーだが用意したデータを使うので、ここをクリックして、Scratchのオンラインエディタを開きましょう。
図1
エディターを開くと気づくと思いますが、すでにいくつかのスプライトにはプログラムがされています。
自機、敵機はそれぞれプログラム済みです。試しに動かしてみても良いでしょう。自機は上下左右キーで移動でき、敵機はランダムに出現してきます。
弾幕シューティングなので、弾幕がないのは寂しいですね。スプライト敵弾にプログラムして弾幕が撃てるようにしてみましょう。

敵弾にプログラム

図2
敵弾のスクリプトを見ると、こちらも未完成のものが少しだけ書いてあります。
緑の旗がクリックされた時に変数の初期化。敵ショット1、2、3のメッセージを受け取ったときのイベントがあります。
クローンを使うので、クローンがメッセージを受け取ってイベントが動いてしまわないよう、クローンか?を「もし~なら」で判断して、クローンではないときのみ処理するようになっています。
敵ショット1、2、3とあるように、今回の講座では、敵の弾、敵弾のスプライトを1つだけで別々の動きをさせてみたいと思います。こうすることで当たり判定の条件が簡単になる利点があります。
図3
敵弾にこのようにスクリプトを追加してみましょう。
完成したら動かしてみます。
Season2_2_2
敵機が1種類の弾幕を撃つようになりました。
※まだ当たり判定がないため、自機に当たっても何も起こりません。
Season2_2_3
完成したら動かしてみましょう。
これで3種類のショットを撃つ敵機が出現するようになりました。

今作ったスクリプトのポイントを確認

図4
敵ショット1のメッセージを受け取ったあと、クローンでなければX座標とY座標をそれぞれ変数の位置に変えています。
敵ショット1のメッセージは敵機のスプライトが送っていますが、実はこのとき、敵機の位置を敵弾Xと敵弾Yという変数に代入しているのです。

敵機のスクリプトの一部

図5
クローンやメッセージを送る前にすべてのスプライト対象の変数に値を保存して受け渡しています。
「~へ行く」のブロックより手間がかかりますが、複数のクローン間で値を渡せるために、複数の敵が複数の弾を打つような場合で有効です。
図6
敵弾がクローンされたあとは、「クローンか?」の変数に「はい」と代入しておきます。※クローンがメッセージを処理しないように。
図7
クローン後の動きは、「このスプライトのみ」に設定されている「敵ショット速度」と「敵ショット回転」という変数に沿って動くようにしています。クローン前にこの値を変えておけば、クローンしたあとの処理が同じでも、変数によって動きを変えることができるのです。

その他の弾幕を作る

敵弾にプログラム

図8
敵ショット2、敵ショット3のスクリプトをこのように作りましょう。複雑に見えますが、基本は1と同じです。
すでに用意されているブロックをうまく使ってください。
Season2_2_3
完成したら動かしてみましょう。ショット1は周囲に攻撃、2は前方範囲に攻撃、3は敵弾が回転しながら進みます。これで3種類のショットを撃つ敵機が出現するようになりました。

弾幕シューティングの当たり判定

弾幕シューティングやアクションゲームでは、自機全体に当たり判定があると敵の攻撃を回避しづらくなります。とくに弾幕シューティングは敵の弾幕をギリギリで回避することが楽しいので、攻撃に当たりにくい方が面白くなります。
図9
自機を小さくすればよいですが、今度は見づらくなってしまいます。今回は自機とは別に”自機の当たり判定のスプライト”を作って、こちらに当たったらミス。というようにしてみたいと思います。
図の青い丸が当たり判定です。スプライト自機判定に次の通りプログラムしてみましょう。

自機判定にプログラム

図10
このプログラムでは、常に自機と同じ場所に行きます。
幽霊の効果を100にすると透明感が100%になります。幽霊の効果100は「隠す」と違って当たり判定は有効なままです。
敵機か敵弾に当たったらヒットのメッセージが送られ、受け取った自機がミスの処理を行います。敵機か敵弾に当たったことを判断すればいいので、条件が簡単ですね。
Season2_2_4
こうすることで、自機にちょっとだけ当たってもミスにならず、ギリギリで避けられるようになりました。

自機のショットを完成させる

これでほとんど弾幕シューティングになりました。
最後に自機のショットを撃てるようにして完成させましょう。

自弾にプログラム

図11
自弾はクローンされたら表示されて真っ直ぐ進むだけです。クローンしているのは自機のスクリプトです。
Season2_2
ショットはスペースキーで発射できます。何点スコアを取れるか試してみましょう。
完成版のゲームはここにあります。

むすび

今回は変数を使って1つのスプライトのクローンに別々の動きをさせて複数の弾幕を作るプログラミングの手法と、当たり判定が大きくなりすぎないように、専用のスプライトを用意して当たり判定を行うゲーム的な手法を解説しました。
”このスプライトのみ”に設定した変数は、クローンした時に値をコピーして、それぞれ個別の数字を持つことができます。今回は敵弾の動きの数値に使いましたが、敵のHPなんかにも活用できます。
当たり判定専用スクリプトは、特別な弱点をつくる。というような仕組みにも使えます。
いろいろ応用してみてください。
それではまた次回お会いしましょう。

この記事をシェアする

一覧へ戻る

TOP