
シューティングゲームでは自機の攻撃だけでなく敵キャラクターからの攻撃も必ず必要になります。
そこで敵キャラクターの攻撃パターンについて、いくつか記事に分けて紹介しています。最後はパターンその5として敵ボスの攻撃パターンを作っていきます。
この記事を読んでいただくと、シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方が分かります。
なお、この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
シューティングゲームとは、戦闘機・宇宙船・ロボットなどを操作して、レーザー・ミサイル・銃などの武器を用いて敵を射撃(シューティング)しながら進んでいくゲームの総称(国内での略称は「STG」)。画面上に大量の弾丸が飛び交うものは「弾幕シューティング」と呼ぶ。
スクリプトの作り方
完成した動き
敵ボスが画面上から降りてきて、左右に往復運動しながら3パターンの攻撃を打ち分けます。
1つ目は弾丸の乱れ打ち、2つ目は大きな弾丸を左右半円形に弾幕、3つ目はレーザーを円形に回転させる攻撃です。

完成したスクリプト
完成したスクリプトの全体です。スプライトは「背景」「敵ボス」「敵ボスの弾」の3つです。
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
【スプライト】
シューティングゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のspace-shooter」を使っています。
背景 敵ボス 敵ボスの弾
【背景のスクリプト】
背景のスクリプトはありません。大きさを150%または160%に拡大して使用しています。
【敵ボスのスクリプト】
「緑の旗でスタート」ブロックを3つに分けてつくっています。それぞれ役割を分けていて「変数の値を変更する部分」「X座標・Y座標の動きを決める部分」「弾丸のクローンを作る部分」です。
さらに攻撃パターンを3つ作る必要があるので、パターン別に3つの定義ブロックにまとめました。
また、色んな所で「変数=0, 1, 2」とプログラムを分けていますが、0の時は弾丸を乱れ打ちするパターン、1の時は大きめの弾丸を左右半円形に弾幕を打つパターン、2の時はレーザーを発射しながら回転するパターンとなっています。
- 変数:このスプライトのみ
- 敵の弾5cs:すべてのスプライト用
- 敵の弾5x:すべてのスプライト用
- 敵の弾5y:すべてのスプライト用
- 敵の弾5dr:すべてのスプライト用
- 敵の弾5dl:すべてのスプライト用
- 敵の弾5sw:すべてのスプライト用


【敵ボスの弾のスクリプト】
今回も前回の記事「シューティングゲーム 敵の攻撃をつくる方法④」と同様に弾丸の向きを変えて動かすパターンを含むので「回転方法を(自由に回転)にする」にします。
「敵ボスの弾」のクローンは、敵ボスのスプライト本体からつくられます。弾丸のX座標とY座標と向きの初期値は敵ボスのプログラムの中で設定します。
さいごに使い終わったクローンを削除します。

スクリプトの説明
プログラムを作っていく中でポイントとなる部分を説明します。(背景スプライトの説明は省略します)
ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
(ここは「敵の攻撃をつくる①~④」の記事で何度も説明しているので簡単に記載します)
今回は敵ボスは回転しませんが弾丸は回転させる必要があります。
このように回転させる必要のあるスプライトのコスチュームの向きは右真横(90度)に向けてつくることに注意してください。これはスプライトは作成した時点で90度を向いた状態でつくられるためです。

また、プログラムの中でスプライト(コスチューム)の向きを自由に変えるためにはスクリプトの方でも気を付ける箇所があります。
それは「回転方法を(自由に回転)にする」ブロックを配置しておくことです。こうすることでどの方向にも向きを変えられるようになります。
今回でいうと「敵ボス」では「回転しない」ブロックを配置して、「敵ボスの弾」では「自由に回転」ブロックを配置しています。

ポイント②:敵の動きをつくる
Y座標の初期値はステージ上端の外側にセットしていて、少しずつ下に降りてくる動きにしています。これ以外でY座標を変化させるスクリプトはないので、この処理が動いたらY座標の値は確定します。
X軸の動きは、変数=0のときに左右に動かしていて変数=1または2のときにX=0で固定(停止)しています。
なお、左右に動いている間に変数の値が1や2に変わる可能性があるので、左右に移動中の処理に「変数=1または2なら」の条件ブロックを追加しています。
【敵ボスのスクリプト】

ポイント③:機体から弾丸のクローンをつくる
敵ボスは3つの攻撃パターンを持っているので、それぞれで異なるパラメータを弾丸クローンに与えなければいけません。
そのために、それら攻撃パターン別に「弾丸クローン小作成」「弾丸クローン大作成」「弾丸クローンレーザー作成」定義ブロックにまとめましたので個別に説明していきます
【敵ボスのスクリプト】

なお、登場する変数はそれぞれ以下の意味で使用しています。
- 変数:移動パターンを制御します(0のときは左右移動、1,2のときは移動停止)
- 敵の弾5x:クローンを生成するX座標
- 敵の弾5y:クローンを生成するY座標
- 敵の弾5dr:クローンを発射する向き(X=0,2のとき)、またはクローンを右半円形に発射する向き(X=1のとき)
- 敵の弾5dl:クローンを左半円形に発射する向き(X=1のとき)
- 敵の弾5cs:クローンのコスチューム名
- 敵の弾5sw:クローンを右半円形または左半円形に打ち合わけるスイッチ
※「変数」だけは「このスプライト用」で作成し、その他の変数は「すべてのスプライト用」で作成しています。
パターン①:弾丸クローン(小)をつくる
変数の値が0の時に「弾丸クローン小作成」定義ブロックが実行されます。
「敵ボスの弾のクローンを作る」ブロックの手前で、その瞬間の「敵ボス」のX座標とY座標と向き、弾丸のコスチューム名をそれぞれ別々の変数に格納します。
格納された座標と向きやコスチューム名は、あとで「敵ボスの弾」スプライトのクローンの中で読み取ります。
※コンピュータの処理はとても速いので変数への格納と格納した値の読み取りは一瞬で行われます。
向きは「90から270までの乱数」で指定しているのでランダムな向きが設定され、乱れ打ちさせることができます。
【敵ボスのスクリプト】

パターン②:弾丸クローン(大)をつくる
変数の値が1の時に「弾丸クローン大作成」定義ブロックが実行されます。
基本はパターン①と同様ですが、左右に打ち分けるために向きを設定する変数を2つ用意しています。
「敵の弾5sw」変数の値に応じて「敵の弾5dr」と「敵の弾5dl」変数に向きが異なる値を設定してそれぞれクローンを生成していますが、その向きを10度ずつ変化させながら連続的に左右12発ずつ半円形をつくるようにクローンを生成しています。
【敵ボスのスクリプト】

パターン③:弾丸クローン(レーザー)をつくる
変数の値が2の時に「弾丸クローンレーザー作成」定義ブロックが実行されます。
基本はパターン①と同様です。
ここではレーザーの初期位置だけ設定していて、レーザーを回転させる動きは生成されたクローンの中で実行しています。
【敵ボスのスクリプト】

ポイント④:変数を介して機体から弾丸クローンに座標と向きの情報を渡して動かす
パターン①:弾丸クローン(小)の動き
弾丸クローンが敵ボススプライトで設定された変数の値を読み取って座標と向きを設定します。
向きは「90から270までの乱数」にしているので方向がランダムになり、乱れ打ちしているような表現ができます。
【敵ボスの弾のスクリプト】

「コスチューム名=0」は下図の絵柄です。

パターン②:弾丸クローン(大)の動き
弾丸クローンが敵ボススプライトで設定された変数の値を読み取って座標と向きを設定します。
「敵の弾5sw」変数の値が0なら敵ボススプライトの右側に半円形に弾幕を打ち、変数の値が1なら左側に半円形に弾幕を打ちます。
半円形の形を形成しているのは、向きを指定する変数「敵の弾5dr」と「敵の弾5dl」の値を±10度ずつ変化させながらクローンをつくっているためです。
前者は「180度から60度まで」、後者は「-180度から-60度まで」角度が変化することになります。
【敵ボスの弾のスクリプト】

「コスチューム名=1」は下図の絵柄です。

パターン③:弾丸クローン(レーザー)の動き
弾丸クローンが敵ボススプライトで設定された変数の値を読み取って座標と向きを設定します。
向きは初期値として10度が設定されますが、その後クローンの中で10度ずつプラスしていって最終的に340度までクローンを回転させる動きをつくっています。

【敵ボスの弾のスクリプト】

「コスチューム名=2」は下図の絵柄です。

ポイント⑤:クローンは使い終わったら削除する
(ここは「敵の攻撃をつくる①~④」の記事で何度も説明しているので簡単に記載します)
Scratch3.0の仕様ではステージ上に存在できるクローンの上限数は300個までと決められているので、クローンは使い終わったら削除しておきます。
特に弾丸は短時間で300個以上のクローンが生成される可能性が高いのでこのことは忘れないようにしましょう。制限を超えるとそれ以上クローンが生成されなくなります。

ここまでのポイントを押さえてスクリプトを組むことが出来たら、シューティングゲームで敵キャラクターが攻撃するプログラムの5パターン目は完成です!
失敗しやすいポイント
失敗しやすいポイントはこちらの記事に記載した内容と同じなので省略します。
【Scratch 3.0】シューティングゲーム 敵の攻撃をつくる方法①(Tips)
【Scratch 3.0】シューティングゲーム 敵の攻撃をつくる方法②(Tips)
応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『シューティングゲームで敵キャラクターが攻撃するスクリプトの作り方5パターン目』のポイントをまとめます。
- ポイント①:向きを自由に変えるスプライトは右真横(90度)に向けてつくる
- ポイント②:敵の動きをつくる
- ポイント③:機体から弾丸のクローンをつくる(3パターンを分けて定義ブロックに)
- ポイント④:変数を介して機体から弾丸クローンに座標と向きの情報を渡して動かす(3パターンを分けて定義ブロックに)
- ポイント⑤:クローンは使い終わったら削除する
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)