※ 当ページには【広告/PR】を含む場合があります。
2022/08/23
Scratchから始めるシューティングゲームの作り方⑥〜ステージに敵を配置する・高度な当たり判定を設定する
Scratchから始めるシューティングゲームの作り方⑧〜ステージボスを追加する
Scratchで本格的なシューティングゲームを作成することを目指すシリーズ記事も今回で第7回目になります。前回までで、敵をステージ(フィールド)に柔軟に配置するパターンを作成できました。ということで、特定の敵がドロップするアイテムも追加し、プレーヤーのパワーアップするような仕組みをこの記事で考えていきます。なお、Scratchシューティングゲームの作り方のシリーズ最初の記事は以下のリンクを参考にしてください。Scratchから始めるシューティングゲームの作り方①〜最初のプロジェクトを作成シューティングゲーム作成を通じてScratchでプログラミングを学習していきましょう。
今回も前回までと同様に、直前まで開発途中のプロジェクトを改造しながら解説していきます。参考|シューティングゲーム⑥
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
敵の出現リストにドロップアイテムも追加する
前回の敵の出現パターンのリストを作成したときと同じ要領で、新しい定義ブロック・「ドロップアイテムの初期化」
を作成するところから始めましょう。さらに、背景
のスプライトに新しいリストとして、ローカルリスト・「_ドロップアイテム」
を追加します。_ドロップアイテム
のリストは、フィールドに配置した特定の敵がドロップするアイテムの番号を記録していくリストになります。ひとまず敵は何もアイテムを落とすことが無いという意味を、「0」として、この_ドロップアイテム
リストを以下のようにしておきます。赤枠で囲ったリストを初期化する部分が、背景
のスプライトのブロックコードに追加した箇所です。もちろんここでも、他の敵の出現リストと同数の要素数が必要です。既にこの時点で、初期化すべきリストが3つもあると、1.5秒ほど待機を強いられてしまいます。できるだけゲーム開始の初期に、リストの初期化を持ってくるほうがその他の処理の邪魔にならずに済みます。この時点では、まだアイテムのドロップは実装していませんので、以降の項目でアイテムを一つずつ追加していきます。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
残りライフを回復させるアイテム
まずは定番のプレーヤーの残機を1つ回復させるアイテムから作成してみましょう。このアイテムの識別番号は「1」にします。まずは、「アイテム」
という名前で、新しいスプライトをScratchプロジェクトに追加しましょう。アイテムとして表示されるコスチュームも適当に描いておきましょう。アイテムは小さいのでさほどデザインにこだわる必要はないので、他のスプライトのコスチュームからコピーしてきた画像を貼り付けるだけでもOKです。このスプライトは、敵スプライトのクローンが生成される直前に、ローカル変数・「_ドロップアイテム」
をクローン初期化に読み込むことで、そのクローン消滅時にドロップするアイテムの種類を内部で選択できるようにさせてみます。クローンを外部から呼び出すため、敵のクローンのローカル変数の「_ドロップアイテム」
を初期化するには、プログラムが共通で使えるグローバル変数・「ドロップアイテム」
が必要になります。この2つの変数を上手く使うことで、各敵のクローンが個別にどのアイテムをドロップするのかを割り振ることができるようになります。まずは背景
のブロックコード側では、グローバル変数のドロップアイテム
を使って、以下のように修正します。ドロップアイテム
の値を、敵のクローンよりも手前に持ってくることがここでのミソです。次に、敵
のスプライトのクローンの処理を以下のように修正しましょう。少し敵
のブロックコードが長くなってきたので、ドロップアイテムの処理を先に定義ブロック化をして分割しておきます。敵が倒れる際に、ドロップするアイテムの位置と種類の情報を、アイテムのクローン側に渡すために、以下のような3つのグローバル変数・「アイテムの番号」
、「アイテムのx座標」
、「アイテムのy座標」
、を追加しておきましょう。弾に当たって敵が消える処理の手前に、これらのグローバル変数をクローン内部で更新されるように、ドロップアイテムの処理を挿入します。ではここからアイテム
のスプライトのコードも実装します。アイテムは一つ一つ作用が違うので、その作用を他のスプライトへ共有するためのイベントをそれぞれのアイテムに作る必要があります。例えば、「ライフを一つ回復させる」ためのイベントは、以下のように「ライフを回復」
イベントとして追加します。アイテム
のスプライトは、以下のようなブロックコードに編集します。各ドロップアイテムは、クローン直後にローカル変数・_ドロップアイテム
に、撃破した敵から受け取ったグローバル変数・アイテムの番号
を保持しています。さらにクローンごとに_ドロップアイテム
の識別番号で、処理の挙動を条件で分けることができます。例えば[_ドロップアイテム] = 1
のときに、回復アイテム(ハートのコスチューム)を設定し、プレーヤーがそのアイテムに触れたときに、アイテム効果がイベントを通して、他のスプライトへ共有されます。ここでは、ライフを回復するので、ライフを回復
イベントは、ライフ
のスプライトで受け取り、イベントの処理をさらに実装しないといけません。ということで、ライフ
のスプライトにイベントの処理を以下のようなブロックコードを追加しましょう。このブロックコードの処理を理解するは、Scratchの初心者〜中級者のレベルかなり難しいかもしれません。おそらく、Scratchプログラミングでも最難関に難しいテクニックの一つでしょう。ポイントだけ解説しますと、まずScratchのイベント
は、プログラムに存在する全てのスプライトと背景、クローンに発信されます。ライフ
のスプライトは、クローンが既に複数存在しているので、イベントを何も処理しないままつかうと、全てのクローンが、同じ処理を同時にやってしまう恐れがあります。そこでここでは、クローンの識別番号を使って、一つのクローンだけにイベントが適用されるように、もし [_残り] = [残り - 2]なら
ブロックで、一番右端のハートのクローンだけをターゲットとしています。さらに注意が必要なのが、Scratchの「クローンから別のクローンを呼び出す」ときの暗黙的な独自ルールの存在です。クローンは「自分自身」のクローンを複製したときに、「自分自身」は自己消滅してしまうというものです。ここではライフのクローンを右に1つ増やしたいだけですが、クローンを呼び出したクローンも消えてしまうので、対策として、「自分のクローン」を同じ位置に複製して、更にもう一つ「自分のクローン」を複製して使う、ということをやっています。これで、アイテムの番号が1に割り振られたクローンが、敵が倒された際に、ライフが1つ回復するアイテムをドロップできるようになります。テストとして、背景
のスプライトの_ドロップアイテム
のリストで、ドロップアイテムの番号を1に変えてみます。これでプログラムを走らせると、というように、敵がアイテムを落として、ライフを回復させることができるようになりました。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
打てる弾をパワーアップする
前の記事で、弾のバリエーション強化に関して先行して解説していたことがありました。Scratchから始めるシューティングゲームの作り方②〜弾の連射を自在にカスタマイズするScratchのシューティングゲームで、弾をより高度に作り込んでみましょう。
ここでようやく弾のバリエーションを作っていた内容と合流することになります。とりあえず弾を強化するアイテムを以下のアイテム番号に割り振ります。弾を変える実装はとても簡単で、グローバル変数・「弾の種類」
の番号を切り替えるだけになります。アイテム
のスプライトに以下のブロックコードに修正しましょう。あとは背景
のスプライトの_ドロップアイテム
のリストを以下のように変更してテストをしましょう。ちゃんとドロップアイテムを拾うことで、弾の種類が切り替えられたらOKです。ようやく弾を切り替えられるようになり、よりシューティングゲーム感が増しました。
【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ
まとめ
以上、今回のScratchシューティングゲームの改造内容をひとまとめにしたものは以下のようになります。※最初にゲームをスタートすると、スペースキーを押しても弾が出ない場合があります(...バグ?)。そんなときは、お手数ですが、一旦プログラムをストップして、もう一度スタートしてみてください。アイテムはアイデア次第で、いろんなパターンが考えられますので、面白いアイデアが思いついたらぜひともご自分の手で実装してみてください。