スタータープロジェクト

リミックスしてスタート
ファイルをダウンロード
(Scratchデスクトップ用)

完成サンプル
Scratch公式サイト
難易度

挑戦ちょうせんレベル

アクティビティ数
10件

一番いちばんカンタンな弾幕だんまくシューティングゲームのつくかた 」の解説

PERRY
弾幕シューティングゲームの作り方がわかります

シューティングゲームとは

シューティングゲームはプレイヤーが敵を撃って倒したり、敵の弾を避ける爽快感が楽しいゲームです。ゴールは高いスコアを叩き出すことや、難解なステージをクリアすることでしょう。

Scratchでも最も人気のあるジャンルの1つです。作品もたくさん公開されていますが、共通点は「避けて、撃つ」という2つ。この2つをどうやって作るのかが、作品の特徴になります。

さらに、オプションも作りやすい点もシューティングゲームのいいところです。自分が考えた奇抜なアイデアを盛り込みやすいのです。「避けて、撃つ」という単純なのに多くの人が好む特徴があるので、どんなに奇抜なアイデアを盛り込んでも、シューティングゲームという体裁が崩れることはなかなかありません。そこがいいのです。

Scratchのシューティングゲームには2Dと3Dがあります。今回は2Dのシューティングについて見ていきます。

ちなみに、Scratchの公式サイトで検索するときは次のようなキーワードが有効です。

  • シューティングゲーム
  • shooter game
  • shump
  • 追記)stg(ドイツ語の突撃銃を意味するSturmgewehrの略)

弾幕とは

弾幕というのは敵から発射される多数のミサイルやビームなどの弾のことです。シューティングゲームの醍醐味の1つです。

大量に襲いかかる敵弾をかいくぐって敵を倒す爽快感が生まれるため、シューティングゲームにはなくてはならない要素といっても過言ではありません。(もちろん弾幕がないシューティングゲームもたくさんあります)

Scratch公式サイトで検索する際は以下のキーワードが役立ちます。

  • 弾幕
  • danmaku
  • ballet hell

弾幕の魅力

弾幕に数学的な法則性を持たせて、幾何学模様の美しい模様に惹かれる人もいます。「これは絶対避けられない!」と思うような緻密に襲いかかる弾幕をギリギリ避ける爽快感にハマる人もいます。このステージでこれだけキツかったんだから、次のステージはきっともっとすごい弾幕に出会えるだろうという期待感がたまらないという人もいます。

こういった魅力は弾幕シューティングゲームならではの特徴と言えるでしょう。このサイトでも弾幕の魅力のほんの一端でも皆さんに伝わるようにレッスンを増やしていきます。

弾幕シューティングゲームの名作集

スクラッチではありませんが、弾幕シューティングゲームの有名どころを紹介しておきます。

  • 怒首領蜂どどんぱち:元祖弾幕シューティングゲーム。難しいです。
  • ギガウィング:バリアで弾幕を跳ね返すところが特徴的。
  • サイヴァリア:弾と自機がかするとパワーアップするという特徴が面白い。
  • エスプガルーダ:敵弾をスローにすることで弾幕をかいくぐれるところが面白い。
  • 虫姫むしひめさま:ウルトラモード、ゴッドモードという超高難易度モードが面白い。
  • 東方とうほうプロジェクト:1つ1つの弾幕に名前をつけて重宝するほどの弾幕シューティングゲーム愛がすごい同人ゲーム。
  • プロギアのあらし:横スクロールの弾幕シューティングとして有名な作品。
  • 斑鳩いかるが:白と黒の弾がパズルのように緻密に織り込まれた弾幕が美しいゲーム。
  • グラディウス:一時停止して上上下下左右左右BAというコマンドを押すと最強装備になるという裏技で一世風靡したシューティングゲーム。ちなみに次作では同コマンドで自爆をするようになった点は賛否両論ある。

シューティングゲームの特徴的な要素

シューティングゲームで王道と言われる要素をスプライトに置き換えて整理しておきます。

登場するスプライト

自機

プレイヤーが操作するスプライトです。飛行機や宇宙船、ロボットや人、戦闘機がよく使われます。

パワーアップすると自機スプライトのコスチュームが変わるパターンもあります。ゲーム開始時に自機の色や形を選べるスクラッチプロジェクトもあります。

自機と敵が撃つショットのことです。ミサイルだったりビームだったり、様々です。

スクラッチでは弾スプライトを作るパターンと、自身のクローンに弾コスチュームを割り当てるパターンがよく使われます。

弾を破壊できるかどうかはゲーム次第ですが、一般的には弾の破壊はできないゲームが多いでしょう。

カンタンに倒せる敵を「ザコ」と呼び、ステージのラストに登場する強力な敵を「ボス」と呼ぶことが一般的です。ときどき中ボスと呼ばれる存在もいます。

実は弾幕シューティングゲームの場合は敵は必ずしも必要ではありません。弾幕だけあれば十分楽しいと言う人もいます。

それでも敵が弾幕を撃ってくる、その敵が左右上下に動くことで弾幕にも動きが生まれる、敵を倒せば弾幕が止まるといった動きはゲームの幅を広げてくれます。どれだけプレイヤーの心に響く敵を作れるかもシューティングゲームの醍醐味でしょう。

背景

ゲームの雰囲気・世界観を作るのにかかせないのがステージ背景です。スクラッチではデフォルトで宇宙空間や月面、空や街などの背景が用意されています。これらを使うだけでも十分に世界観が出せるでしょう。

武器・アイテム

弾ではなく、弾を発射するための武器もこだわっている作品が多くあります。武器に合わせて弾の種類も変わります。ビームやミサイルやボムといった特殊な弾を発射させる武器を作ることも、もちろん可能です。

自分が考える最もクールな武器を実装しましょう。

また、パワーアップアイテムもよく見かけられます。バリアやファンネルやヒットポイント回復(機数アップ)など。

スコア

ハイスコアを叩き出す、という点もシューティングゲームでは見どころです。特にスクラッチでは「クラウド変数」というゲームを終了しても残る変数があり、これを使って誰々が何点だったというランキングを作っているプロジェクトも多く見かけられます。

当たり判定

シューティングゲームでは「当たり判定」を独自に実装するパターンもあります。

スクラッチでは「(自機の色である)赤に触れたら」や「(自機の)スプライトに触れたら」といった判定方法が用意されていますが、あえてこれを使わずに当たり判定を狭く・小さくするという工夫をしている人もいます。

理由は、弾幕シューティングゲームの場合は特に、避けることの爽快感を感じてほしいという製作者の願いがあるからです。当たり判定を小さくして、絶対かいくぐれなそうに見える弾幕を避けて敵を倒してほしい。まるで映画のワンシーンのようなヒロイックなシーンを当事者としてプレイしてほしい。そういった切なる願いを込めて作られるのが「当たり判定」なのです。

とはいえ、最初は無難に「自機に触れたら」「赤に触れたら」といったスクラッチの基本ブロックを「もし〜なら」ブロックで作る判定方法を使いましょう。慣れてきたら色々試してください。

下の表は一般的な当たり判定の早見表です。参考にしてください。

当たり判定早見表自機自弾敵弾
自機自機ダメージ自機にダメージ
自弾
(相殺も可)
敵にダメージ
敵弾自機にダメージ
(相殺も可)
自機にダメージ敵にダメージ

シューティングゲームの基本的な動きを作る手順

ここまではシューティングゲームの基本知識をまとめました。

ここからは、いよいよ弾幕シューティングゲームの具体的な作り方が始まります。

こちらの「緑の旗」をクリックすると、今回作るシューティングゲームのサンプルを実行できます。ためしにクリックしてみてください。

はじめてのシューティングゲームを作ろう 入門レベルのカンタンなシューティングゲームもあります

今回作る弾幕シューティングよりもシンプルでカンタンなレッスンも公開されています。こちらのレッスンでもシューティングゲームの基本が身につきます。今回のゲームが難しそうだなと思ったら、こちらの入門版を先に試してみてください。

#01 作り込むプログラムの設計を確認する

今回作るスプライトやステージの仕様(設計や操作のこと)は次のとおりです。レッスンが進むと仕様が追加されることがあります。

プレイヤー

条件結果備考
左右上下の矢印キーを押したら左右上下に動く
スペースキーを押したら弾が出るx座標をプラス方向に進む。スペースキーを押しっぱなしでも連射されない。

プレイヤーの弾

条件結果備考
クローンされたらプレイヤーから弾が発射される

ボス

条件結果備考
表示されたら上下に不規則に動く
一定間隔で弾幕を発射する自身のクローンを作る

#02 プレイヤーの動きを作ろう

上矢印キーを押したらY座標をプラスします。ここでプラスする数値を大きくすればスピードが上がります。あまり早すぎても動かしづらくなるので、何度か試して調整してみてください。

上以外の右・左・下も同じように作ります。

左右上下でスピードは合わせておくとよいでしょう。

#03 プレイヤーの弾を作ろう

弾はクローンを使って実装します。

弾のスプライトを作ろう

まずは弾のスプライトを作ります。スタータープロジェクトであれば、すでにコスチュームまで作成済みです。ここではただの黒い丸を描いています。

スペースキーで弾を発射しよう

次にクローンを作る処理です。これは分かりやすくプレイヤーのスプライトにコードを追加します。

以下はスペースキーが押されたタイミングで、弾のクローンを作る処理の例です。

  1. Tipsという口コミを寄せてくれた方 Tips

    弾のスプライトに発射のコードを追加すると、どうなるでしょう?「スペースキーを押したら自分自身のクローンを作る」というコードだとします。スペースを一回押すだけなら本体からクローンが作られて飛び出すでしょう。成功したように見えます。しかし、すぐにもう一回押すと本体がクローンを作るのと合わせて、さらにクローンもクローンを作ってしまいます

    これを防止するには変数を使って「自分がクローンなのか本体なのか」を判別できるようにしなくてはなりません。この方法も時には有用です。後々この方法でのクローン作成も実装しますが、ここでは「クローンする処理」と「クローンされたときの処理」を分けておきます。

#04 ボスの動きを作ろう

ボスは上下に動くだけにします。変則的な動きを作るために、ランダムに-100から+100を行ったり来たりするようにします。

ここで「1秒でx座標を○、y座標を○に変える」ブロックを使うことで、スムーズに、かつスピードを変則的にできます。

#05 ボスの弾幕を作ろう

いよいよ弾幕です。

弾幕には様々なパターンがありますが、今回は弾幕の入門編として、シンプルな弾幕を作ります。

コードの実装方法は、「クローンを作る▶角度を変える▶一定速度で左方向に動かす」ようにします。

こうすることで弾が拡散していくように発射されます。これを一定間隔で繰り返します。こういう弾幕をn-way弾幕と呼んでいます。

n-way弾幕以外にも、いろいろな弾幕を作ってみたい人は下記リンクもチェックしてみてください。

弾幕マスターを目指せ!Scratchでの弾幕の作り方

ボスのクローンを作ろう

プレイヤーの弾は新たにスプライトを作りました。しかしボスの弾はボス自身のクローンを使って作ってみます。

この実装で重要なのは弾の角度です。角度を設定し、その方向に進むようにコードを組みます。

このとき「x座標を○ずつ変える」や「y座標を○ずつ変える」ブロックは使わずに「○歩動かす」ブロックを使います。そのために角度が大切になるのです。

そしてこの角度の指定には変数を使います。

クローンを作る前に変数の値を指定して、それからクローンを作れば、クローンは変数の値を引き継ぎます。ここでは−30度ずつ変えてクローンを作ります。

クローン角度
クローン1-30度
クローン2-60度
クローン3-90度
クローン4-120度

クローンされたときの処理を作ろう

また、クローンのコスチュームを変えることを忘れずに。弾となるコスチュームに変更しておきます。

#06 雰囲気を作ろう

条件結果備考
緑の旗が押されたら雲を右端から左端に流す左端で消える。大きさはランダム。大きさに合わせてスピードを変えることで、擬似的に遠近法を演出する。
緑の旗がおされたら音楽を流すずっとループする

雰囲気を出すために雲を流します。じつは雲を流すことで、まるで画面が横スクロールしているような錯覚を生み出すことができます。

雲は左端で消えるようにします。単純に「端に触れたら」という条件では、出現するタイミングで右端に触れているため、流れる前に消えてしまいます。そのため、左端で消える工夫をします。

また、音楽も用意しましょう。これはステージにコードを追加しておくとよいでしょう。

これだけでだいぶ世界観がしっかりしてきます。

#07 プレイヤーの当たり判定を作ろう

ボスの弾がプレイヤーに当たったらダメージを受ける、いわゆる当たり判定を作ります。

弾幕シューティングの当たり判定は小さくして弾を避けやすくするほうがゲームが面白くなりますが、その場合コードが複雑になります。

今回はカンタンに「○に触れたら」を使うのでシンプルに作れます。

メッセージイベントを使おう

緑の旗が押されたらこの監視コードを実行します。

ボスの弾はボスのクローンなので、このコードを使うことで「ボスの弾」と「ボス本体」に触れたときに「プレイヤーにダメージ発生」メッセージが送られます。

メッセージを受け取ったら、変数「当たった回数」に1をプラスします。今回はヒットポイントが減らしたり残機を減らしたりするのではなく、当たった回数が増えるというルールで行こうと思います。

もう少し後半でゲームをクリアできるようにしたときは、当たった回数でゲームのクリア達成度を測ろうと思います。この方法の良いところは、ゲームオーバーがないので最後までゲームをプレイしてもらえる点です。

  1. Tipsという口コミを寄せてくれた方 Tips

    このままだとボスの弾がプレイヤーを貫くので、弾がプレイヤーに触れている間ずっと加算処理が走ります。これを防ぐ方法の1つに、プレイヤーに弾が当たったら弾を消すという方法があります。または、プレイヤーが弾に当たったら数秒間だけ無敵状態にする方法もあります。動画では弾を消す方法を紹介しています。

#08 ボスの当たり判定を作ろう

ボスにダメージを与えられるようにします。ここでも今回はヒットポイントを減らす方法ではなく、当てた回数を加算していくようにします。

  1. Tipsという口コミを寄せてくれた方 Tips

    ヒットポイントを減らす手法でも、残機を減らす手法でも、全く問題ありません。正解はないので、特に理由がなければ好きな手法で実装しましょう。のちのち変える必要が出ることもあります。そういう必要性が見えてきたら、変えれば十分です。最初から完璧なプログラミングをする必要はありません。

メッセージを使っておきます。「ボスにダメージ発生」メッセージを受け取ったら、色を変えたり音を鳴らしたりします。

#09 ボスに当たったショットを消そう

先ほど作成した「ボスにダメージ発生」メッセージを利用して、プレイヤーのショットを消します。

  1. Tipsという口コミを寄せてくれた方 Tips

    メッセージを受け取って「このクローンを削除」を実行するだけだと、当たっていないショットも消えてしまいます。これを防止する場合は変数を利用します。ボスに触れたショットだけ変数を1にしておき、変数が1のショットだけクローンを削除します。

    ちなみにボスの弾幕も同じようにプレイヤーに当たった弾幕だけを消すようにできます。

#10 クリア処理を作ろう

ここでもメッセージが役に立ちます。ボスに十分ダメージを与えたら、クリア!というメッセージをおくりましょう。

クリアを受け取ったら、ひとまずはボスを消す処理を実装しましょう。

ここからは、各スプライトで次のステージに進むための処理を行います。いよいよ次のステージの実装も見えてきました。

(続きを作成中)

改訂履歴

2020.02.02
レッスンを公開こうかいしました
2020.02.03
雲と音楽を追加するアクティビティを追加しました
2020.02.04
プレイヤーの当たり判定を追加しました
2020.02.05
ボスの当たり判定&クリア処理を追加しました
2020.02.07
シューティングゲームの基本知識を追記しました