プログラミング入門

Scratchで弾幕を作ろう

プログラミング初心者の子供に何を教えたらいいの?とお悩みの保護者のためのScratch(スクラッチ)の入門講座。
Scratchで猫の動かし方はわかったけど・・・次にどんなことをしたらいいの?という疑問にお答えするシリーズです。
Scratchといえば、ゲーム作り。

ゲームと言われてすぐに思いつくものの中にシューティングゲーム(STG)は必ず入ってくるのではないでしょうか。
今回はちょっとレベルアップしてSTGで使う弾幕にフォーカスしてみたいと思います。

1. シューティングゲームと弾幕

1-1. シューティングゲームって何?

レーザーや玉などの飛び道具で敵を破壊するゲームです。ものすごく古いものではインベーダーゲームなどがシューティングゲームになります。
画面は縦スクロールか横スクロールどちらかに自動的にスクロールしていくものが一般的です。
シューティングゲームの初期には、敵機を破壊するものが主流でした。しかし1990年代後半には敵機が弾幕と呼ばれる大量の弾を発射し、弾幕を避けることを主体とするゲームへの発展していきました。

1-2. 弾幕って何?

弾幕とは、シューティングゲームにおいて同時に大量に発射される弾のことです。弾の連なる様子を幕に例えて弾幕と言います。
弾幕系シューティングゲームで有名なものとして「東方Project」という作品群があります。
この東方Projectの作品中のゲームに出てくる弾幕を「東方弾幕風」といい、Scratchでも「東方弾幕風」作品がたくさん公開されています。

1-3. Scratchでの弾幕

上でも述べたようにScratchではたくさんの弾幕作品が公開されています。
シューティングゲームの素材としての弾幕だけではなく、弾幕単体だけをつくってアート作品のようにしているものもありますのでぜひ他の人の作品も参考にしてみてくださいね。
以下に弾幕の代表的なスタジオのリンクを掲載しておきます。
▼スペカのような弾幕を作る
https://scratch.mit.edu/studios/1294936/
▼弾幕のみスタジオ
https://scratch.mit.edu/studios/4237946/

2. シンプルな弾幕を作ってみよう

まず最初にシンプルな弾幕を作ってみたいと思います。横スクロールのシューティングゲームにおいて、前方向に放射状に弾が発射されるイメージです。

2-1. スプライトと変数の準備

まず、スプライトを準備しましょう。敵のスプライトはScratch内にある素材を使い、弾のスプライトは自分で描きました。また、敵のスプライトの場所と大きさを設定するプログラムを最初に作っておきます。

そして、「弾」のスプライトを選択した状態で、「このスプライトのみ」を選択して変数を作ります。変数名は「弾の角度」です。なぜ「このスプライトのみ」にするかというと、クローンごとに変数を使い分けたいからです。

2-2. 弾を発射させよう

まずは、敵キャラをx座標-170、y座標0に固定した状態で弾を発射させてみましょう。弾はクローンごとに30度づつ角度を変えて発射されるようにします。
角度を維持して弾を飛ばす方法については以下の記事で解説していますので、そちらも参考にしてみてください。
<Scratchで学ぶ三角関数>

弾のプログラムは以下のようになります。

「弾の角度」をクローンする前に30度づつ変えています。そのため、クローンごとに変数の値には違う値が格納されています。

クローンの番号 クローン1 クローン2 クローン3 クローン4 クローン5
「弾の角度」の
変数の値
-60 -30 0 30  60

そうすると、クローンごとに異なる変数値を持たせてプログラムを動かすことが可能になります。
このプログラムを実行すると・・・敵キャラから弾が異なる角度でクローンされて発射されました!

2-3. もっと難しくしよう

実際のシューティングゲームでは敵キャラが動いています。まずは敵キャラを動かしてみましょう。敵キャラの動きをつぎのようにしてみました。
▼敵キャラのプログラム

こうすると、敵キャラが上下にランダムに動くようになります。
弾も一発限りではなく、間を開けてずっと発射しづづけるようにしたいですね。先ほどのプログラムに「ずっと」と「1秒待つ」ブロックを追加してみました。
▼弾のプログラム

変更したプログラムを実行してみましょう。1秒ごとに敵キャラから弾が発射されるようになりました。

作品のリンクはこちらになります。弾幕の角度や個数を変えて遊んでみてください。

3. 複雑な弾幕

3-1. 円形の弾幕を作ろう

先ほどのシンプルな弾幕を応用して複雑な弾幕を作ってみましょう。うずまき状に弾幕を発射させてみたいと思います。まずは、敵キャラと弾のスプライトを用意します。敵キャラの位置は画面中央にします。

そして、弾のプログラムはこちらです。シンプルな弾幕とほとんど同じです。弾の個数(クローンの個数)とスピードだけ変えています。

この状態でプログラムを動かすと、円形に弾幕が生成されます。

3-2. うずまき状の弾幕を作ろう

上で作った円形の弾幕をさらに応用してうずまき状の弾幕を作ります。考え方は「発射の角度を少しずらして連続発射」するだけです。角度をずらすために新しい変数「角度の変化」を作っておきます。
弾幕を1周分打ち終わったら、10度ずらして再度ぐるりと1周弾幕を発射するプログラムを作りました。

すると・・・角度をずらしながら発射されるので、弾幕がうずまき状に見えます。

うずまき状の弾幕の作品はこちらです。

4. まとめ

今回は、シューティングゲームの弾幕を作ってみました。これに味方のスプライト(自機)などを追加すれば、シューティングゲームが出来上がります。弾幕を避けるゲームや、敵キャラを撃ち落とすゲームなどに使ってみてください。

弾幕づくりのポイントは、「発射するときの角度」をクローンごとに変数を持たせておくということです。
あとは、発射の角度とタイミングで弾幕の形は調整できますのでいろいろためしてみてくださいね。これは、「このスプライトのみ」の変数を使うことで実現できます。
クローンごとの変数については、以下の記事でも紹介していますのでこちらの記事も参考にしてみてくださいね。
<Scratchでクローンごとに変数を使い分けたい>

伴野悠佳 / YUKA TOMONO
この記事の著者伴野悠佳 / YUKA TOMONO
教育ヲタクの1児の母。自称ニコニコキッズクリエーター。東京理科大学大学院卒。元SE。小学生の頃から教育書を読んでいた教育ヲタク。大学では、電池の素材の性質について実験とコンピューターシミュレーションを比較する研究を行っていたことがきっかけでSEになる。出産&育休後、子ども向けプログラミング教室講師、子どもたちの考える力を育てるオンライン塾の講師。