Scratchから始めるシューティングゲームの作り方①〜最初のプロジェクトを作成
※ 当ページには【広告/PR】を含む場合があります。
2022/07/22
2022/08/02

Scratchプログラミング学習の最初の題材として良く取り上げられる定番はなんといっても、
Scratchでプログラミングを勉強する上で、シューティングゲームのプログラミングコードは様々なテクニックをバランス良く含んでいるので、一通り自分の手で簡単なゲームを作れるようになるころには、かなりの実力が付いていることでしょう。
今回から数回に分けて、簡単なシューティングゲームの作り方を解説していきます。
初回となる今回は、以下のようなシンプルなシューティングゲームを、Scratchで作るにはどうするかの手順をじっくり考えてみます。
この記事にて、シューティングゲームの土台となるプロジェクトの作成手順を自分の手で作り上げていきましょう。
新規プロジェクトの作成〜プレーヤーと敵と弾を配置する
ではScratch(ウェブ版)で、シューティングゲームで必須となる、
新規作成するプロジェクトを「シューティングゲーム①」にして、空のScratchプロジェクトを作成します。
1278x663

プレーヤー(ゲームで操作するスプライト)は元からあるネコ(スプライト1)をそのまま利用するとして、打ち出す弾となるスプライトと、敵として出てくるスプライトの他2つを適当に追加します。
画面右下のスプライトパレットから、スプライトライブラリーを呼び出して、好きなものを2つ選択してScratchプロジェクトに配置してみます。
981x747

スプライト画像を呼び出してそのままのサイズだと、ちょっと大きいので、画像の大きさと場所を調整します。
スプライトパレットからネコを選択し、プログラミングブロック画面で、以下のようなブロックコマンドを作成してみます。
410x502

これで一旦プログラムを実行してみます。
🚩
492x414

プレーヤーのゲーム開始の際の、最初の位置と大きさを指定することができます。
同じように、敵と弾の位置と大きさも調整してみましょう。
ボールと敵のスプライトのそれぞれのプログラミングブロックを以下のようにしてみます。
666x341

再び
🚩
493x412

スプライトの画面を左右反転させる
このシューティングゲームでは、画面左側にプレーヤーを置き、横スクロール方式で画面右側から敵が出てくるようにするのが狙いです。
このままだと敵はプレーヤーと向き合うような画像になっていないので、左右反転を行う必要があります。
敵のスプライトを選択して、
[コスチューム]
左右反転
1054x724

すると、敵の画像がプレーヤーに向かう方向へ切り替わったことが分かります。
キーボードからプレーヤーを動かす
次にプレーヤーをキーボードから上下左右に動かすことを考えていきましょう。
このブログでは、最終的に作り上げたシューティングゲームを
ネコのスプライトを選択して、プログラミングブロックを追加します。
キーボードの方向キーである4つの
↑
↓
←
→
[イベント]
●●キーが押されたとき
1025x488

これでプレーヤーがキーボードから動かせるようになります。
プレーヤーから弾を発射させる
プレーヤーが動かせるようになったので、今度はプレーヤーから弾が発射できるようにしてみましょう。
キーボードから弾を発射するときのキーは基本的にどれでも選ぶことができますが、他のシューティングゲームを見ても、細長くて大きい
スペースキー
ここでもスペースキーを押すと弾が発射されるようにしてみましょう。
まずば弾のスプライトを選択して、弾のコードブロックを追加していきます。
基本的に、弾は撃たなければ消えているのが通常ですので、ゲームスタート時は
非表示
275x272

弾はゲーム中に基本的に何度も同じスプライトを生じさせる必要があります。
なので、スペースキーが押される度にクローンがコピーされるように使うのがポイントです。
また非表示になっている弾のスプライトがクローンされるので、クローンされたときのコードは
表示する
533x321

クローンされたとき、
スプライト1へ行く
435x354

クリックを押すたびに弾は端に当たるまで消滅することなく画面右側へ飛び続けます。
敵に動きをつける
シューティングゲームですので、敵が動かないとゲームとしてつまらないので、敵にも動きをつけてみます。
敵も先程説明したクローン弾のテクニックと一緒で、クローンすることで複数の敵をゲーム画面に出すことができます。
敵は画面の右端から現れて、プレーヤーにまっすぐ迫ってくるような動きにしてみます。
またここでは、敵の出現頻度は、三秒間隔で1体で出てくるようにします。
敵のスプライトのブロックコードを以下のように変更しましょう。
947x608

変更・追加のブロックは赤枠で囲った箇所です。
まず①は敵のスプライトのオリジナルは画面に表示せず、クローンだけを使うための処置です。
②のブロックでは、プログラムが実行されたらずっと三秒待ってから、クローンを生成するようなループになります。
③のブロックが、クローンで生成された敵の動きを決めている箇所です。
最初に敵クローンが出現する位置を右端のランダムなところからポッと出すようにしたいので、y座標を
-130から130までの乱数
乱数で与えるy座標はおおよそ画面の上下を決める、
-160 〜 +160
y座標を+160以上(または-160以下)の範囲にしてしまうと、クローンしていきなり端(上下)に当たってしまって、表示されない敵クローンもあります。 スプライトの画像の大きさも考えて、+130(-130)程度にするのが妥当です。
他は弾のスプライトで行ったように、x座標をマイナス方向に変えるループを使って、敵をプレーヤー側へ迫るようにしています。
480x365

これで三秒に1体の割合で、敵がプレーヤーに攻めてくるようなエフェクトをつけることが出来ました。
当たり判定①〜敵が弾をあたると消える
シューティングゲームですので、打った弾が敵にヒットすると、敵と弾は同時に消える必要があります。
まずは弾のスプライトのほうに、
335x474

上の図で、赤枠で囲った部分が、新しく追加したブロック部分になります。
弾のクローンと敵のクローンがお互いに衝突すると、両方が消える必要あります。
そのため、敵のスプライトの方にも、
452x495

この処理の中で、もっとも重要なことが、お互いのクローンを削除する前に
これがないと、衝突してもどちらか一方が消えないということが起こります。
これは、Scratchの衝突判定の事情で、お互いに当たったときに、最初に当たったと判断された方のクローンが消されてしまうと、数ミリ〜数十ミリ秒遅れて、次にクローンの当たり判定を行っても、既に前のクローンが消去されてしまうので、何事もなかったかのように生き残ってしまうためです。
このようなどちらか一方が生き残ってしまうことを避けるために、当たったと判断された時から、お互い0.1秒ほど待てば、確実に両方が当たった、という処理にすることが可能です。
これを実行してみると、弾を受けた敵は、当たった弾と相打ちになってどちらも消滅させることができます。
608x226

当たり判定②〜プレーヤーが敵にあたるとダメージを受ける
シューティングゲームで、敵が敵と呼ばれるのは、プレーヤーにダメージを与えるキャラクターだからです。
定番のシューティングゲームの場合、プレーヤーがダメージを受ける回数の上限が決まっていて、いわゆる
とりあえずここでのゲーム開始時の残機数を3にして、プレーヤーが敵に当たるたびに、1づつ減っていくような仕組みを追加します。
プレーヤー(ネコ)のスプライトを選択して、
[変数] > [変数を作る] > [残り]
731x576

この
残り
プレーヤーのブロックコードを以下のように修正します。
527x790

まずは①の箇所によって、ゲーム開始時点で変数・
残り
②はプレーヤーのスプライトに処理させたい動きをブロックとして追加したものです。
このブロックでは、ゲーム中にずっと処理されるプレーヤーの処理ループの中で、敵と衝突するまで待ってから、衝突したら
残り
そして、
残り
一方で、プレーヤーと敵が衝突したときの処理として、敵のクローンのブロックコードに以下を追加します。
504x704

ここでは、
敵にヒット
ユーザー定義イベントは、ブロックパレットから
[イベント] > イベント定義ブロックのどれか > [新しいメッセージ]
594x518

これで、敵が消滅する間際に、
敵をヒット
この
敵をヒット
残機数を数値でなくてハートのライフで置き換える
ここまでの内容で、もっとも簡単なシューティングゲームが完成しているだろうと思います。
Scratchの変数表示は割とダサく感じるので、ハートのスプライトを残りの数だけ並べて分かりやすく画面に表示させてみます。
新たにハートのスプライトをサンプルから読み込んみます。
498x475

Scratchの変数表示はチェックを外して非表示にします。
395x393

プレーヤーのスプライト側には、もう
残り
602x434

さて、数字の分だけ画像を繰り返す処理は、
スタンプ
余談ですが、スタンプ以外で同じようなことをするためには、
「スタンプ」は、
またスタンプとして書き込んだスプライトはそれ以降動かすこともできませんので、描いた後は消すことしかできないことに注意が必要になります。
スタンプは後付けで利用できる
拡張機能
1416x640

ハートのスプライトのブロックコードを以下のように組みます。
557x546

ここでは
〇〇回繰り返す
また、
敵がヒット
このブロックコードを見ると、同じ作用をするブロックパートが存在するので、より効果的にプログラミングをするために、
1000x513

ブロックパレットの
[ブロック定義]
ハートを描く
この
ハートを描く
568x513

まとめ
ということで以上、今回までの手順で作成したシューティングゲームのプログラミングでは、Scratchゲームとして以下のようなものになるでしょう。
もっと楽しくプレーできるゲームするためには、これからいろんな機能を継ぎ足していかないといけませんが、最も簡単なシューティングゲームの作り方としては、大体この記事で説明したテクニックで作成できるということを理解してもらうと良いと思います。