Scratchでシューティングゲームを作る(3)

Scratch

こんにちは ECF Techブログ
担当 Michiharu.Tです。

間が空いてしまいましたが、Scratchでのシューティングゲーム作成の第3弾です。

Scratchプログラミングのコツや、他のプログラムにも応用できる考え方をなるべく掲載していくつもりです。よろしくお願いします。

シューティングゲームのサンプルは、下のScratch共有ページからご覧いただけます。ぜひ試しに遊んでみてください。

https://scratch.mit.edu/projects/337602775/

また、過去の連載はこちらになります。

Scratchでシューティングゲームを作る(2)
こんにちは、ECF Techブログ 担当 Michiです。 今回はシューティングゲームの作り方の第2弾です。 Scratchプログラミングのコツや、他のプログラムにも応用できる考え方をなるべく掲載していくつもりです。よろしくお願いします。 ...

あたり判定を行う

前回は敵キャラの作成までで終わっていますので、敵キャラとのあたり判定から作っていきましょう。

あたり判定とは、「プレイヤーの弾が敵キャラに当たった」とか「敵キャラがプレイヤーにぶつかった」などの判定を行なうプログラムを総称して指す言葉です。

本シューティングゲームでは、つぎのパターンのあたり判定の処理を作成する必要があります。

  • 敵キャラがプレイヤー(まほう使い)に当たったとき
  • 敵の弾がプレイヤー(まほう使い)に当たったとき
  • プレイヤー(まほう使い)の弾が敵に当たったとき

敵キャラがプレイヤーに当たったとき

簡単なプログラムから見ていきましょう。まずは、敵キャラがプレイヤーに当たったときです。

まずはこうもりのプログラムです。作成済みのプログラムに、次の赤い囲み部分のブロックを追加します。

まほう使いに触れたら、ゲームオーバーのメッセージを送るシンプルな内容です。

メッセージを受け取るプレイヤー(まほう使い)の方のプログラムです。次のかたまりを追加します。

これで、こうもりがまほう使いにぶつかると、まほう使いが画面から消えます。

おばけにも同じくプログラムを追加します。作成済みのプログラムの赤い囲み部分を追加します。

敵の弾がプレイヤーに当たったとき

敵の弾がプレイヤーに当たったときについても、プログラムは同様です。おばけのたまスプライトの作成済みプログラムに、次の赤囲みのブロックを追加します。

プレイヤーの再表示

敵や敵の弾によってプレイヤーが消えるようになったので、スタートボタンを押したときにプレイヤーが表示されるようにプログラムを修正します。

プレイヤーの弾が敵に当たったとき

この判定がScratchではかなり難しくなります。これまでのあたり判定処理との大きな違いは、対象(敵キャラ)は複数いるということです。

このあたり判定方法については、下のサイトを参考にさせて頂いております。

複数のクローンされたスプライト同士のあたり判定 - 大西Scratch日記
Scratchでシューティングゲームを作る時に、あたり判定が難しいな、といつも思いますので自分なりのベストプラクティスを考えてみました。クローンを使わずに「単発の弾」と「単機の敵」の場合は問題ないのですが、クローンを使って複数対複数を考えると難しいんですよね。 目次 目次 複数の弾をクローンで扱う より高度な弾の処理(...

では早速プログラムを見ていきましょう。まほう使いの弾となるアメ玉のプログラムからです。作成済みのプログラムに次の赤い囲み部分を追加します。

次にメッセージを受け取るこうもりのプログラムです。なお、事前にとくてんという変数を用意しています。

この2つのプログラムは次のように動作します。

まずアメ玉のプログラムにより、あたりチェックのメッセージがすべてのこうもりに送られます。「もしこうもりに触れたなら」という条件なので、この時点ではどのこうもりに触れているかはわかりません。

メッセージを受け取った、それぞれのこうもりは自分がアメ玉に当たっているかを検証します。当たっていると判断したコウモリだけが消えます。

この当たり判定のしくみをおばけにもプログラムします。

とくてんの数値を変えれば、こうもりとおばけで違う得点をセットできます。

ボスの作成

では次にボスを作成していきます。ボスは次の仕様で動作するものとします。

  • ゲーム開始25秒後に登場
  • 目をチカチカ光らせながら、左右に傾く動きをする
  • 登場したら画面右端で上下移動
  • アメ玉を30発当てるとたおせる

こちらの2つの画像を使用します。

スプライトの作成

上の2つの画像をコスチュームとしてもつスプライトを作成します。

また、ボスのたまも新しいスプライトとして準備します。使っているのはおばけのたまと同じ下のスプライトです。

色はコスチュームで選べるので、好きなものを使いましょう。大きさはすこし大きめの50としています。

変数の準備

ボスの動作のためにたくさんの変数をつかっています。次の変数を準備します。

プログラム

それでは、プログラムをブロックごとに見ていきましょう。

ボスのうごき

ボスの動きに関するプログラムはつぎのようになります。
うごきのプログラム(1)

  • ずっとループの前部分は、ボス登場の演出です。3秒かけて画面にせり出してきます。
  • その後は左右にかたむくをくり返します。

ボスの動きにはもうひとつ次のプログラムを使っています。
うごきのプログラム(2)

こちらは、ボス登場後の移動とたまを出すタイミングについてのプログラムです。

  • ある程度上(Y座標が40)までいったら、また下に移動を始めます
  • ある程度↓(Y座標が-40)までいったら、また上に移動を始めます
  • 変数ボス方向は、Y座標の移動方向を表します。1ならプラス方向(上)へ移動し、-1ならマイナス方向(下)へ移動します。
  • ボス方向を切り替えるタイミングでついでにたまを出します。

ずっとのプログラムを2つ作るのには理由があります。このプログラムを1つにまとめてしまうと、うごきのプログラム(1)の「0.5秒待つ」によって、ボスの上下移動がストップしてしまうためです。

コスチュームによるアニメーションのプログラム動作のプログラムは、このように2つに分けてことでプログラミングがしやすくなります。

ボスがたまを出す

ボスがたまを出すためのプログラムです。ブロック定義を使っています。

  • X座標Y座標という2つの青いブロックは、動きのグループにあります。これにより、たまの最初の位置をボスの中心にしています。
  • 3回くりかえすを使って、同時に3発出します。

ボスが出すたまのプログラム

つづいて、ボスが出すたまのプログラムです。あらかじめ次の変数をこのスプライトのみの変数として作成しておきます。

それではプログラムです。

  • ボスたまXとYは、ボスの今の位置を表す変数です。たまの最初の位置としてセットします。
  • 向きYはずっとループの中でのYの変化量です。
    • 0は左にまっすぐ飛びます
    • 正の値の場合はななめ上に飛びます
    • 負の値の場合はななめ下に飛びます
  • あたり判定はおばけのたまとあまり変わりません。

このような動きをするたまを、ボスは1度に3発発射しますので、それぞれ方向の違う3つの弾が発射されます。
※ただし向きはランダムにきまるため、同じ方向に発射されてしまう可能性はあります。

ボスのあたり判定

次はプレイヤーがボスにアメ玉を当てられるようにします。まずはアメ玉のプログラムに次の赤囲みのプログラムを追加します。

ここは普通の敵キャラクターと同じ考え方です。

つづいてボスがアメ玉に当たったときのプログラム。ボスのプログラムとして書いていきます。

こちらも基本は他の敵キャラクターと同じです。ただし、HPの数だけアメ玉を当てないと倒すことができません。

ボス登場のシナリオ

通常、シューティングゲームにおいていきなりボスが登場することはほとんどないでしょう。しばらくは弱い敵キャラをたおしながら進み、時にちょっと強い敵を倒しながらボスにたどりつくというストーリーがあるわけです。

これをシナリオと呼ぶことにします。今回は単純ではありますが、「25秒後にボス登場!」というシナリオをプログラムしていきます。

ボスのスプライトに次のプログラムを追加します。

ということで長かったですが、これでボスに関するプログラムはすべて完成になります。

おわりに

長くなりましたが、今日はここまでとさせていただきます。最後までありがとうございました。

ここまででも基本的なゲームを楽しむことができますが、次回は背景スクロールやタイトル画面、ゲームオーバーの画面などの演出を加えて、ゲームを仕上げていきたいと思います。ひきつづき、よろしくお願いします。


合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。

ECFエデュケーション
タイトルとURLをコピーしました