スクラッチコーチキャンプ スクラッチで使える無料素材集
  • 素材
  • 修行
  • はじめての方へ
  • スクラッチゲームの作り方

    #028 全方向シューティングゲームの作り方|消えないスライムに挑む魔法少女バトル

    #028 全方向シューティングゲームの作り方|消えないスライムに挑む魔法少女バトル
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし
    [soy-series name="はじめてのスクラッチ"]

    さぁ、スクラッチでナニ作る!?

    動画で見てみよう

    [talk]チャンネル登録して応援よろしく!チャンネル登録する[/talk]

    チュートリアルの元になった作品

    [prj-embed prj="1325082501" mini="1" title="プレイしておこう" prj-title="sb3_20260524152128" prj-author="ok-scratch"]今回の[prj-link prj="1325082501" title="sb3_20260524152128" author="ok-scratch"]スクラッチを作る参考作品[/prj-link]です。子スライムが魔法弾に当たっても消えないのがマジでイカす。ふつうのシューティングなら敵弾を撃ち落とせば終わりだけど、この設計だと弾かれてランダムな方向に縮みながら飛んでいくだけ。完全には排除できない脅威がフィールドに漂い続けるから、大スライムを狙いながら子スライムを往なす2ライン思考が常に求められてくる。この緊張感の作り方、見ていこう。参考資料:スクラッチプログラミング事例大全集[/prj-embed]

    今回の目標

    マウスで狙いを定めながらキーボードで移動する、全方向シューティングゲームを作るよ。得点が上がるほどスライムが速く、激しく攻めてくるようになるから、どこまでスコアを伸ばせるかチャレンジしよう。

    スターター作品をリミックスしよう

    このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
    スターター作品をダウンロード

    #1魔法少女の移動①

    [talk class="m-l-n"]ここまでのシリーズでいろんなゲームを作ってきたけど、今回は上下左右に動けるシューティングゲームに挑戦。魔法少女がスライムを倒していく全方向シューティングを作っていくよ。[/talk]

    準備

    スプライト「魔法少女」を開く

    魔法少女魔法少女
    スプライトについて
    プレイヤーが操作する魔法少女。矢印キーまたはWASDで移動し、マウス方向を向く。スペースキーまたはクリックで魔法弾を発射する。魔力が尽きるとゲームオーバー。
    どんな役割か
    プレイヤーキャラの魔法少女を作ろう!キーボードで動かして、スペースやクリックで魔法弾をバンバン飛ばすよ。魔力がなくなったらゲームオーバーだから、スライムにぶつかりすぎちゃダメだよ!

    実装

    step-0

    まず魔法少女の初期設定から。見た目大きさを ( ) %にするでサイズを40%にして、動きx座標を ( ) 、y座標を ( ) にするで画面下部の(0, -140)に配置するんだ。

    制御ずっとループの中で、マウスのポインターに向き続ける処理と移動する処理を入れていく。マウスで照準を合わせながらキーボードで移動する、いわゆるツインスティック操作みたいだね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    旗を押すと魔法少女が画面下に出てきて、常にマウスの方を向いてる。

    #2移動の追加

    step-1

    矢印とW A S Dで移動する処理を追加。動きy座標を ( ) ずつ変えるにマイナスの値を入れると下に動くし、動きx座標を ( ) ずつ変えるにプラスの値で右に動く仕組みなんだ。

    演算( ) または ( )で2つのキー判定をまとめてるから、どっちのキーを使ってもOKだよ。値を変えるだけでスピード調整もカンタンだよね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    矢印とW A S Dキーで動くようになった。ユーザーはマウスで片手がふさがることが予想されるから、W A S Dでも移動できるようにしておくと親切だ

    #3歩行アニメーション

    step-2

    動きに合わせてコスチュームが切り替わるアニメーションを付けよう。別のイベントgreenflag が押されたときからスタートする新しいスクリプトを作るよ。

    制御ずっとの中で見た目次のコスチュームにすると0.2秒の待機を繰り返す。0.2秒間隔だから、1秒で5コマ切り替わる計算で、ゲーム中ずっとパタパタ歩いてるように見えるんだよ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    コスチュームが0.2秒ごとに切り替わる歩行アニメも入った

    #4スコアと魔力の準備

    [talk class="m-l-n"]ここで魔法少女のスプライトに戻ってスコアとライフを管理する変数を用意しよう。[/talk]

    準備

    変数「■倒した数」を追加

    倒したスライムの総数。スコアとしても使用され、スライムの出現速度にも影響する

    変数「■倒した数」を追加

    変数「■魔力」を追加

    プレイヤーの魔力残量。スライムに触れると減少し、0になるとゲームオーバー

    変数「■魔力」を追加

    実装

    step-3

    「■倒した数」を0に、「■魔力」を10にセット。変数変数 ( ) を表示するで「■倒した数」をステージに表示するよ。魔力は10からスタートして、敵に当たるたびに減っていくんだ。

    #5ゲームオーバー判定

    準備

    スプライト「大スライム」を開く

    大スライム
    大スライム

    実装

    step-4

    ゲームオーバーの判定を作っていく。制御ずっとで常時チェックして、魔力が1未満になったら「魔力切れ!」と1秒間言ってから全停止させる。

    ここで演算( ) < ( )で「■魔力 < 1」と判定しているのがポイント。大スライムに当たると魔力が一度に3減るから、10→7→4→1→-2みたいにマイナスになる場合があるんだよ。

    「= 0」だと-2のときに引っかからないけど、「< 1」なら確実にキャッチできるってこと。だから「< 1」にしておくのが安全だよ。

    #6BGMの追加

    step-5

    制御ずっとの中で終わるまで ( ) の音を鳴らすを使って「Dance Magic」をループ再生する。

    #7大スライムの初期設定

    [talk class="m-l-n"]魔法少女の基本操作ができたから、次は敵の大スライムを作っていこう。[/talk]

    準備

    スプライト「大スライム」を開く

    大スライム大スライム
    スプライトについて
    上から落下してくる大型の敵スライム。プレイヤーに触れると魔力を3減らす。魔法弾が当たると明滅エフェクトで反応するが倒せない。
    どんな役割か
    上からゆっくり降ってくる大スライムを作るよ!プレイヤーに当たると魔力がどんどん減る強敵だよ。魔法弾が当たるとぴかっと光るエフェクトも付けよう!

    実装

    step-6

    旗クリックでサイズを100%にして、見た目画像効果をなくすで画像効果をリセット。初期位置はx座標を-230〜230のランダム、y座標は130固定で、画面上部のどこかからスタートするんだ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    大スライムが画面に追加された。大きさ100%で画面上部のランダムなx座標にセットされる初期配置

    #8大スライムの移動

    step-7

    大スライムを表示して、ゆっくり落ちてくる動きを作るよ。制御ずっとの中でy座標を-3ずつ変えると、毎フレーム少しずつ下に降りてくるんだよ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    大スライムが表示されて、毎フレームy座標が-3ずつ下がって移動する。次に衝突時のダメージ処理はこのあとのステップで作り込んでいこうか

    #9衝突ダメージとリスポーン

    [talk class="m-l-n"]魔法少女に触れたら「魔力」を-3して、大スライムは画面上部のランダム位置にワープさせるんだ。[/talk]

    準備

    スプライト「大スライム」を開く

    大スライム
    大スライム

    実装

    step-8

    端に触れた場合も同じくランダム位置にリスポーン。動きx座標を ( ) 、y座標を ( ) にするで-230〜230のランダムなx座標、y座標は130に戻す。大スライムは何度でも上から降ってくるエンドレス仕様だよ。

    [talk]でも魔法少女がダメージを受けたことが分かりづらいね!いいアイデアある?このあと的には被弾エフェクトを作るから、それを参考に魔法少女にも被弾エフェクトを付けるにはどうしたらいいか、余裕がある人はチャレンジしてみて。ブロックを消したり場所を変えたりしてもOKだから、自由に実装することを楽しんでね。[/talk]

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    「倒した数」と「魔力」の変数が画面に表示されて、「魔力」0以下でゲームオーバー。スライムに触れると「魔力」3減る仕組み

    #10魔法弾の初期設定

    [talk class="m-l-n"]敵の動きができたから、次はプレイヤーの攻撃手段。魔法弾スプライトの準備をしよう。[/talk]

    準備

    スプライト「魔法弾」を開く

    魔法弾魔法弾
    スプライトについて
    プレイヤーが発射する魔法弾。スペースキーまたはマウスクリックでクローンが生成され、マウスの方向へ直進する。スライムに当たると消えて倒した数を1増やす。
    どんな役割か
    プレイヤーが撃つ魔法弾を作るよ!スペースかクリックで弾がポンポン飛んでいく仕組みを作ろう。スライムに当たったら消えて、倒した数がカウントされるようにするよ!

    実装

    step-9

    旗クリックで見た目隠すして非表示にして、サイズを20%に設定。本体は「設計図」として画面に出さず、クローンだけが実際に飛んでいく仕組みなんだよ。

    #11魔法弾の発射

    [talk class="m-l-n"]魔法弾の準備ができたから、魔法少女のスプライトに戻って弾の発射処理を作ろう。スペースキーかマウスクリックで魔法弾のクローンを生成するよ。[/talk]

    準備

    スプライト「魔法少女」を開く

    魔法少女
    魔法少女

    実装

    step-10

    制御もし ( ) ならの中で制御( ) のクローンを作るを使って魔法弾のクローンを作り、直後に0.25秒の待機を入れる。この待機が連射間隔の制限になっていて、0.25秒より短い間隔では撃てない。数値を小さくすれば、マシンガンみたいな連射も可能だよ。

    #12魔法弾の飛翔

    準備

    スプライト「魔法弾」を開く

    魔法弾
    魔法弾

    実装

    step-11

    発射のトリガーができたから、魔法弾スプライトに戻ってクローンが生まれたあとの動きを作るよ。制御クローンされたときで始動したら、まず魔法少女の位置に移動してマウスの方向を向く。

    表示したあと制御ずっとで10歩ずつ前進し続ける。発射時点でのマウスの方向がそのまま弾道になるから、一度飛び出したらまっすぐ飛んでいくだけだよ。

    弾の軌道がマウスの位置で決まるから、狙いをつけて撃つ感覚がちゃんと出るのがいいよね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    スペースかクリックで魔法弾がバンバン飛ぶようになった。弾は魔法少女の位置からマウス方向にまっすぐ進んでく

    #13命中判定

    step-12

    飛んでいく弾が大スライムに当たったときの処理を追加するよ。調べる( ) に触れたで大スライムとの接触を検知したら、Pop音を鳴らして「■倒した数」を1増やす。

    0.1秒だけ待ってから制御このクローンを削除するでクローンを削除。命中した弾はちゃんと消さないと、クローンが際限なく増えて処理が重くなるんだ。

    ヒット音+スコア加算+クローン削除っていう一連の流れ、シューティングの当たり判定では定番のパターンだよね。

    #14弾の後片付け

    step-13

    画面の端まで飛んで外れた弾もきちんと消す処理。端に触れたら制御このクローンを削除するで即削除。

    クローンの後片付けは地味だけど大事なんだよ。スクラッチのクローン上限は約300体だから、使い終わったクローンをこまめに消さないと新しい弾が作れなくなったりするんだ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    魔法弾が大スライムに当たるとPop音が鳴って、「倒した数」が1ずつカウントされる。弾はちゃんと消えるね

    #15被弾エフェクト①

    [talk class="m-l-n"]魔法弾の弾道まわりが完成したから、大スライムに戻って被弾時のフィードバック演出を追加しよう。新しいスクリプトで魔法弾との接触を検知するよ。[/talk]

    準備

    スプライト「大スライム」を開く

    大スライム
    大スライム

    実装

    step-14

    制御ずっとの中で調べる( ) に触れたをチェックして、魔法弾に触れたらCrunchの音を鳴らす。音が出ることで「ちゃんと当たった」感がプレイヤーに伝わるんだよね。

    #16被弾フラッシュ

    step-15

    音だけじゃ物足りないから、視覚的なフィードバックも追加していくよ。制御( ) 回繰り返すで3回ループして、「明るさ」効果を100にしてから0.1秒後に0に戻す点滅を繰り返す。

    見た目( ) の効果を ( ) にするで「明るさ」を100にするとスプライトが真っ白に光って、0に戻すと元の色に戻る。この光る→戻るを3回やれば、ゲームでよくあるヒットフラッシュ演出の完成だね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    弾が画面端で消えるクリーンアップと、スライムに弾が当たったときのCrunch音+明るさ点滅の被弾エフェクトがいい感じだね

    #17子スライムの量産

    [talk class="m-l-n"]大スライムの動きが完成したから、次はプレイヤーを追いかけてくる子スライムを作るよ。これが攻撃をどんどん激しくしていくカギになるスプライトなんだ。[/talk]

    準備

    スプライト「子スライム」を開く

    子スライム子スライム
    スプライトについて
    大スライムから生まれるクローンの小型敵スライム。プレイヤーを追いかけて魔力を1減らす。倒した数が増えるほど移動速度が上がる。魔法弾に当たるたびにサイズが縮む。
    どんな役割か
    プレイヤーをぐんぐん追いかける子スライムを作ろう!倒した数が増えるとどんどん速くなるよ。魔法弾を当てるとだんだん小さくなっていく面白い仕組みも実装するよ!

    実装

    step-16

    旗クリックで見た目隠すして本体を隠し、サイズを70%に設定。制御ずっとの中で制御( ) のクローンを作るを回して、自分自身のクローンをひたすら生成し続ける。

    魔法弾と同じで、本体は非表示のまま「量産機」として裏で動く設計だね。

    #18難易度カーブ

    [talk class="m-l-n"]子スライムの出現間隔を「■倒した数」に応じて変えていくのがここのポイント。ゲームの難易度を段階的に上げていくための重要なパートだよ。[/talk] step-17

    2つの制御もし ( ) ならを順番に並べていて、「■倒した数」が20未満なら0.5秒待ち、40未満ならさらに0.2秒待つ。つまり序盤(20未満)は合計0.7秒間隔、中盤(20〜39)は0.2秒間隔、終盤(40以上)は待機なしで最速生成になる仕組みなんだ。

    [talk]この「連続する条件ブロックで待機時間を積み上げる」パターン、地味だけどけっこう面白い仕組み。ふつうなら条件分岐で場合分けするところを、条件ブロックを並べて条件を満たすたびに待機が加算されるから、難易度が3段階に自然と切り替わる。しかも待機時間の組み合わせだけで制御してるから、コードがシンプルなまま複雑な難度曲線が作れるってこと。ゲーム作りでけっこう使えるテク。[/talk]

    #19子スライムの追尾

    step-18

    クローンが生まれたら、大スライムの位置からスタートして魔法少女に向かって飛んでいく動きを作るよ。制御クローンされたときで始動したら、大スライムの場所に移動して魔法少女の方を向く。

    移動速度にも難度変化が入っていて、制御もし ( ) ならでなければで「■倒した数」が60未満なら3歩ずつ、60以上なら5歩ずつ進むよ。

    生成間隔が速くなるだけじゃなく弾速まで上がるから、終盤はかなりの激戦になるんだよね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    子スライムのクローンが大スライムの位置から魔法少女めがけて飛んでくる。「倒した数」60超えると速度アップ

    #20子スライムの衝突処理

    [talk class="m-l-n"]子スライムが魔法少女に当たったら「■魔力」を1減らしてクローン削除。大スライムの-3ダメージと比べると軽いけど、数が多いから累積ダメージがジワジワ効いてくるんだよ。[/talk] step-19

    端に触れたときもクローン削除で後片付けだよ。魔法弾と同じく、画面外に出たクローンはちゃんと消してリソースを解放するのが鉄則。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    子スライムが魔法少女に触れると「魔力」が1減ってクローン消滅。画面端に到達しても同じく消える処理

    #21子スライムの偏向①

    step-20

    ここからが子スライムの面白いところ。もうひとつの制御クローンされたときスクリプトで、魔法弾が当たったときのリアクションを作るよ。

    ふつうのシューティングなら弾に当たった敵は消えるよね。でもこの子スライムは消えないんだ。調べる( ) に触れたで魔法弾との接触を検知したら、まず音を鳴らす

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    子スライムが魔法少女に触れると「魔力」が1減ってクローン消滅。画面端に到達しても同じく消える処理

    #22子スライムの偏向②

    step-21

    音のあと、動き( ) へ向けるでどこかの方向にランダムで向きを変えて、見た目大きさを ( ) ずつ変えるでサイズを-10する。弾が当たるたびにちょっとずつ小さくなっていくんだ。

    [talk]この「倒せないけど弾ける」仕組み、ゲームデザイン的にうまい。スコアは大スライムに直接当てないと増えないから、子スライムを撃つのは防御的なアクション。完全には排除できない脅威がずっと残るから、プレイヤーはつねに緊張感を持ってプレイすることになる。弾の方向がランダムに変わるのも、予測不能な動きが生まれてゲームに変化をつけてくれるとこ。[/talk]

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    子スライムに魔法弾が当たるとPop音で反応する。ただ消えないのがこの作品ならではの面白いとこ

    まとめ

    これで魔法少女シューティングゲームの完成!クローンで弾や敵を管理しながら、得点に応じて難易度が変わる仕組みも作れたね。子スライムが消えずに偏向する独特のゲームデザインも、コードを見てみると意外とシンプルな仕組みで実現できてるんだよ。次回もまた別の作品でスクラッチを楽しんでいこう!

    ブクマよろしくお願いします!という口コミを寄せてくれた方 ブクマよろしくお願いします!
    どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!