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

    #030 ドローン配達フライトゲームの作り方|カラスを避けてスコアで難易度アップ

    #030 ドローン配達フライトゲームの作り方|カラスを避けてスコアで難易度アップ
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし
    [soy-series name="はじめてのスクラッチ"]

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

    動画で見てみよう

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

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

    [prj-embed prj="1326468005" mini="1" title="プレイしておこう" prj-title="はじめてのスクラッチ #030" prj-author="ok-scratch"]今回の[prj-link prj="1326468005" title="はじめてのスクラッチ #030" author="ok-scratch"]スクラッチを作る参考作品[/prj-link]です。自分のスコアがそのままゲームの凶悪さに直結してくるフライトゲームがマジでクセになる。荷物を1個集めるたびに速度が上がって、カラスの揺れ幅まで拡大していく——変数を数式に直接埋め込むだけで、if文の固定ステップじゃなく連続的に難化する坂道バランスが実現できるって発想がキレッキレ。どうやって作ってるか、見ていこう。参考資料:スクラッチプログラミング事例大全集[/prj-embed]

    今回の目標

    スペースキーでドローンを上下に操作して、右から流れてくる荷物を集めよう。カラスに当たるとゲームオーバー。配達数が増えると荷物が速くなり、カラスの動きも激しくなるフライトゲームを作るよ。

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

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

    #1ドローンの初期化

    [talk class="m-l-n"]これまでもいろいろ作ってきたけど、今回はスペースキーでドローンを操作して荷物を集めるフライトゲーム。まずはドローンの初期設定から始めよう。[/talk]

    準備

    スプライト「ドローン」を開く

    ドローンドローン
    スプライトについて
    プレイヤーが操作するドローン。スペースキーで上昇し、放すと降下する
    どんな役割か
    プレイヤーが操作するドローンを作るよ!スペースキーを押すと上に動いて、離すと下に落ちる。荷物を集めてスコアを稼ごう!

    変数「★配達数」を追加

    荷物を受け取った回数(スコア)。カラスの出現頻度や移動速度にも影響する

    変数「★配達数」を追加

    実装

    step-0

    イベントgreenflag が押されたときでスタートしたら、スコアとなる「★配達数」を0にリセットしてステージに表示する。ドローンの大きさは30%にセットするよ。

    スコアを常に画面に出しておくと、プレイヤーが「あと何個で記録更新だ」って意識するようになるんだ。ゲームのモチベーション設計としてけっこう効いてくる。

    #2ドローンの操作

    [talk class="m-l-n"]ドローンをスペースキーで上下に動かせるようにしよう。[/talk] step-1

    制御ずっとの中で制御もし ( ) ならでなければを使って、スペースキーが押されていればY座標を+10、離していれば-10。常に落下する力が働いていてスペースキーで浮上する、Flappy Bird型の操作感覚だよ。

    このタイプの操作は押すタイミングと長さがすべて。シンプルだけど、ちょうどいい高さをキープするのがだんだん難しくなっていく仕組み。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    旗を押すとドローンが画面左端に出てきて、「配達数」がゼロにリセット。スペースキーで上昇、離すと落ちてくやつ

    #3BGMの設定

    [talk class="m-l-n"]BGMを追加しよう。ドローンスプライトに新しいスクリプトを作るよ。[/talk] step-2

    音量を ( ) %にするで音量を20に下げてから、終わるまで ( ) の音を鳴らすで「Eggs」をずっとループ再生するよ。音量が控えめなのは回収音やゲームオーバー音とかぶらないようにする配慮。これで配達ドローンフライトの完成!

    BGMはループ再生だから曲の切れ目がなくて、プレイ中ずっと一定のテンションを保てるよ。ゲームの空気感を作る縁の下の力持ちだね。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    カラスが右から飛んできて、ドローンに当たるとゲームオーバー。「配達数」が増えるほどカラスの揺れ幅がデカくなって避けにくい。BGMも追加

    #4画面端のワープ

    [talk class="m-l-n"]ドローンが画面の上下端を突き抜けたときの処理を作るよ。このゲームでは端に到達すると反対側にワープする仕組み。[/talk] step-3

    Y座標が175を超えたら動き( ) 秒でx座標を ( ) に、y座標を ( ) に変えるで0.3秒かけて下(y:-130)へ、-175を下回ったら上(y:130)へ滑らかに移動させる。瞬間移動じゃなくてグライドだから、ワープしたことがプレイヤーにちゃんと伝わるよ。

    瞬間ワープにすると「今どこに飛ばされた?」って混乱しがちだけど、グライドを挟むことで移動の過程が見えるんだ。ちょっとした演出で操作の気持ちよさが変わってくるよ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    ドローンが画面の端に触れたらワープするようになった。画面外に飛び出さないための安全装置みたいな感じ

    #5雲の生成

    [talk class="m-l-n"]ドローンの基本操作ができたから、次は背景の雲を作っていこう。クローンで複数の雲を画面に流す仕組み。[/talk]

    準備

    スプライト「雲」を開く

    雲
    スプライトについて
    背景をスクロールする雲。クローンを生成して画面右から左へ流れる
    どんな役割か
    流れる雲の背景を作るよ!大きさと透明度がバラバラな雲が右から左へ流れていって、空らしい雰囲気を演出するよ!

    実装

    step-4

    本体は見た目隠すで隠して、制御ずっとでクローンを生成し続ける。間隔は0.5〜3秒のランダムで、雲がまばらに現れる自然な空を演出するよ。

    #6雲の初期配置

    step-5

    制御クローンされたときでクローンが生まれたら、画面右端(x:240)のランダムな高さに配置して最前面に移動させるよ。

    ここで大きさを70〜150%のランダムにするのが重要。この大きさの値が次のステップで透明度と速度の計算にそのまま使われるんだ。ただの見た目のバラつきじゃなくて、雲の「距離感」を1つの数値で表現する準備。

    1つの数値から複数の性質を導き出すって、ゲーム制作でよく使われる考え方だよ。次のステップでこの値がどう活きるか見てみよう。

    #7雲の透明度

    [talk class="m-l-n"]ここがこの作品のテクニカルなポイントなんだ。雲の大きさからmod(割り算の余り)を使って透明度と移動速度を自動計算するよ。[/talk] step-6

    見た目( ) の効果を ( ) にするで「幽霊」効果を「大きさ mod 100」にセットする。大きさ130%なら幽霊30で少し透けて、80%なら80でかなり薄くなる。

    #8雲の移動速度

    [talk class="m-l-n"]移動速度も「0 - (大きさ mod 5)」で、大きい雲ほど速く動くんだ。(modは「割った余り」の計算のこと)[/talk] step-7

    [talk]この仕組みは「パラレックス(視差効果)」って呼ばれるやつで、近くのものは速く、遠くのものはゆっくり動く現実の見え方を再現してるんだ。ふつうはクローンごとに速度と透明度を個別にランダム設定するけど、この作品ではmod演算で大きさから両方を自動導出してる。1つの値から複数パラメータが連動するから、変数管理がシンプルなまま奥行き感のある背景が作れるよ。[/talk]

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    雲の本体を隠して、0.5〜3秒のランダム間隔でクローンを量産。

    #9荷物の初期設定

    [talk class="m-l-n"]背景の雲が完成したから、次はドローンが回収する荷物を作っていこう。[/talk]

    準備

    スプライト「荷物」を開く

    荷物荷物
    スプライトについて
    ドローンが回収する荷物。右から流れてきて、ドローンに触れると回収される
    どんな役割か
    画面右から流れてくる荷物を作るよ!ドローンに当たったら回収されてスコアが増えるよ。配達数が増えると荷物のスピードも上がるよ!

    実装

    step-8

    イベントgreenflag が押されたときで本体を隠して大きさ30%にセット。最初に0.5〜1秒のランダム待機を入れて、ゲーム開始直後にいきなり荷物が出ないようにしてるよ。プレイヤーが操作に慣れる猶予を作ってる、地味だけどけっこう効くんだ。

    #10荷物の生成ループ

    step-9

    初期設定の後、制御ずっとループで荷物クローンを生成し続ける。間隔は0.3〜0.5秒のランダムだよ。

    雲(0.5〜3秒)と比べてかなり短い間隔だから、画面に常に複数の荷物が流れてる状態になるよ。「回収チャンスがたくさんある」って感覚を出してるんだ。

    #11荷物クローンの初期化

    [talk class="m-l-n"]荷物のクローンが生まれたら、音量を50にセットして画面右端(x:240)のランダムな高さに配置、そして表示するよ。[/talk] step-10

    音量を先にセットしてるのは、この後の回収時に効果音を鳴らすため。クローンごとに音量が独立してるから、生成時にセットしておけば統一されるんだ。

    ゲーム中にクローンの音量がバラバラだと、プレイ体験がチグハグになりがち。こういう細かい統一がゲーム全体の完成度につながるよ。

    #12荷物の移動と回収

    [talk class="m-l-n"]荷物の動きと回収の仕組みを作るよ。ここにゲームデザインの核心が詰まってるんだ。[/talk] step-11

    移動速度は動きx座標を ( ) ずつ変えるで「-5 - ★配達数」。最初は-5でゆったりだけど、20個配達すると-25、50個なら-55になる。スコアが上がるほど荷物が速く飛んでくる仕組みで、もしこの加速がなかったら序盤も終盤も同じテンポで単調になってしまうから、回収の難易度がどんどん上がっていくよ。

    調べる( ) に触れたでドローンとの接触を判定して、触れたら効果音→「★配達数」を+1→クローン削除っていう流れ。左端を超えた荷物も消えるよ。回収するたびゲームが加速する——自分で自分の首を絞めていく感じがクセになるんだ。

    確認プレビューしておこうという口コミを寄せてくれた方 確認プレビューしておこう
    クローンが右から左に流れてる。「配達数」に応じて移動速度が変わるから、ためしに変数の値を大きくしてみたら爆速で移動するぞw

    #13カラスの初期設定

    [talk class="m-l-n"]荷物の仕組みが完成したから、次はゲームオーバーの原因になるカラスを作るよ。[/talk]

    準備

    スプライト「カラス」を開く

    カラスカラス
    スプライトについて
    障害物として右から飛んでくる鳥。ドローンに触れるとゲームオーバー
    どんな役割か
    ドローンの邪魔をするカラスを作るよ!右から飛んできて、ドローンに当たるとゲームオーバー。配達数が増えると出現間隔が短くなって、どんどん難しくなるよ!

    実装

    step-12

    動き回転方法を ( ) にするで回転方法を「左右のみ」に。カラスは右から左に飛んでくるから、逆さまにならないようにする設定。本体を隠して大きさ40%にして、0.5〜1秒待ってから出現開始するよ。

    #14カラスの出現間隔

    step-13

    制御もし ( ) ならでなければで「★配達数」が40未満なら1〜5秒、40以上なら0〜3秒の間隔でカラスのクローンを生成するよ。

    荷物のスピードが「1点ごとに連続的に」上がるのに対して、カラスの出現頻度は40をしきい値にしたステップ変化。2種類の難易度カーブが重なることで、ゲーム中盤に「急に忙しくなった」と感じるタイミングが生まれる。

    ゲーム全体で見ると、序盤はゆるくて中盤からグッと難しくなるカーブになってるよ。この「いつの間にか難しくなってた」って感覚がリプレイ欲につながるんだ。

    #15カラスの初期配置

    step-14

    カラスのクローンが生まれたら、画面右端のランダムな高さに配置して動き( ) 度に向けるで向きを-90度(左向き)にするよ。

    荷物は向きの概念がないけど、カラスは明確に左を向いて飛んでくる。向きがあるだけで「こっちに向かってくる敵」感がぐっと増すんだ。

    #16カラスの移動とゲームオーバー

    [talk class="m-l-n"]カラスは毎フレームX座標を-5ずつ変えて左に移動する。荷物と違って「★配達数」の影響を受けない固定速度だよ。[/talk] step-15

    調べる( ) に触れたでドローンに触れたら効果音→制御 で全停止、これがゲームオーバーの瞬間だね。左端を超えたクローンは削除する。荷物が「触れたらスコア+1」なのに対してカラスは「触れたら即終了」——この対比がゲームの緊張感を生んでる。

    回収アイテムと障害物で「触れたら」の結果が真逆になることで、1個多く取ろうと前に出るほどカラスのリスクも上がるっていうジレンマが生まれるんだ。

    #17カラスの揺れと羽ばたき

    [talk class="m-l-n"]カラスに羽ばたきアニメーションと上下の揺れを追加しよう。これが難易度設計の最後のピースだよ。[/talk] step-16

    別の制御クローンされたときスクリプトで、動きy座標を ( ) ずつ変えるに「-★配達数」から「★配達数」のランダム値を入れる。配達数0なら揺れなし、10なら上下10pxずつ、30なら上下30pxずつ。スコアが上がるほどカラスの軌道が読めなくなるよ。

    [talk]この作品では「★配達数」っていう1つの変数が、荷物の速度・カラスの出現頻度・カラスの揺れ幅と3つの難易度パラメータを同時にコントロールしてるんだ。ふつうのゲームだとif文で「10点なら中級、20点なら上級」みたいに段階を切り替えるけど、変数を数式に直接組み込むことで1点ごとに滑らかに難しくなる。離散的な階段じゃなくて連続的な坂道になるから、プレイしてて「いつの間にかムズくなってる」って感じるバランスを実現できるよ。[/talk]

    まとめ

    配達ドローンフライトゲームの完成!クローンを使った複数オブジェクト管理と、スコア変数を数式に直接埋め込む難易度設計が今回の核心だったね。mod演算で1つの値から複数パラメータを導き出す雲のパラレックスも、シンプルだけどかっこいいテクニック。ゲームが難しくなる仕組みを自分で設計できるようになったら、アレンジも楽しくなるよ!

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