スクラッチコーチキャンプ ゲームクリエイターに、オレはなる!そんなキミを応援(子供も大人も)
  • ALL
  • はじめての方へ
  • スクラッチゲームの作り方

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!
    この記事は スクラッチコーチで掲載されているオリジナル記事 のバックアップです。
    スターター作品
    なし
    今回の完成サンプル
    なし

    準備

    チェックする項目

    これはマリオシリーズのレッスンです

    前回のレッスンがまだの方はこちらをチェックするか、ここから始めたい方は当レッスンのスタータープロジェクトを使ってください。

    https://scratch.coach/lesson/mario009/

    このレッスンのゴールはこちら

    実装を始める前に作業する項目

    プロジェクトのコピー

    「マリオプロジェクト008 敵モブ2」など、分かりやすい名前でコピーしておきます。

    敵モブが襲いかかってきた!

    いよいよ敵モブがプレイヤーにダメージを与えたり、逆にダメージを受けたりするバトルの動きを作ります。といってもマリオなのでシンプルに踏まれたかどうかの判定によってダメージ処理をするだけです。

    ここはマリオと大きく異なる仕様があります。マリオでは敵モブからダメージを受けると残機が減ったり、チビマリオに戻ったりします。

    しかしここでは、ダメージを受けたらコインが減るという仕様にしたいと思います。

    理由としては、いちいちゲームオーバーになってやり直すというのがプレイヤーとして苦手だからです。

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eゲームオーバーになる作品を否定するのではなく、好みの問題です。ゲームオーバーを実装したい方は、全クリアやゴール時の処理を参考に作ってみてください。u003c/pu003e

    戦うプログラミングを作る

    戦うとは、ダメージを受けたのか与えたのか判定する一連の処理です。

    ダメージを受けたならダメージを加算したり倒されたかどうか判断します。

    ダメージを与えたならプレイヤーのコインを減らします。

    見ていきましょう!

    ブロック定義「戦う」を作る

    利用する

    非表示中は無効化する

    非表示中には戦いようがないので、無効化して省エネします。

    バトルの始まりを検知する

    プレイヤーに触れたら、それはバトルの合図です。大切なのは、どう触れたか。そこをこの条件ブロックの中に作っていきます。

    当たり判定のプログラミングを作る

    ブロック定義「当たり判定する」を作る

    利用する

    変数「弱点を攻撃されたかどうか」を作る

    弱点に着替える

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003e前提として、弱点のコスチュームは「モブ名_弱点」という命名規則になっています。これでクローン時にも各敵モブ固有の弱点を設定できます。u003c/pu003e

    弱点のコスを確認する

    弱点はコスチュームで指定します。ブロックでも弱点を作りましたね。ブロックは下側でしたが、敵モブは踏まれるとダメージを受けるので頭のあたりに弱点を用意します。

    弱点に触れたのかどうかを調べる

    コスチュームを弱点に着替えたあとでもプレイヤーに触れた状態かどうかを調べます。

    変数「弱点を攻撃されたかどうか」を設定する

    フラグ変数である「弱点を攻撃されたかどうか」の値を変えます。

    コスチュームを戻す

    弱点から元の移動用コスに戻します。

    ダメージを受けるプログラミングを作る

    ブロック定義「ダメージを受ける」を作る

    利用する

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eスクショが切れてますm(_ _)mu003c/pu003e

    変数「ダメージ」を作る

    初期化する
    利用する

    ダメージを受けたコスに着替える

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003e前提として「モブ名_ダメージ」という命名規則になっている必要があります。u003c/pu003e

    ダメージのコスを確認する

    倒されたかどうか判定する

    ダメージの蓄積が体力以上になったかどうかを調べます。

    後ほど「体力」という部分は変更します。

    倒されたらコインを出す

    敵モブは倒されたときにコインを落とします。そしてクローンを削除して役割を終えます

    コインを1枚以上落とす

    コインを何枚落とすか、それは敵モブごとに変えられるようにしておきます。全員1枚でもいいですし、落とさない敵がいてもいいですし、100枚くらい落とす敵がいてもOKです。

    引数を追加する

    「体力」と「コイン数」は、引数として受け取るようにします。

    ブロック定義「ダメージを受ける」を編集していきます。

    ステップ1
    • 変更前……ダメージを受ける
    • 変更後……ダメージを受ける)体力:
    ステップ2

    引数を追加して「体力」と改名します。

    ステップ3

    ラベルのテキストを追加して「コイン数:」と入力します。

    ステップ4

    引数を追加して「コイン数」と改名します。

    ステップ5

    引数に置き換えます。

    後ほどブロック定義「ダメージを受ける」に引数の値を入力していきますが、いったんプレイヤーにダメージを与える処理に移ります。

    やられたコスにして隠す

    あとはコスチュームを変えて、やられた感を出します。

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eこのスクショには「ダメージ音」のブロックが追加されていますが、これはもう少し記事の下で追加しています。前後してしまいましたm(_ _)mu003c/pu003e

    メッセージ「敵モブを踏みました」を作る

    プレイヤーが敵を踏んだことをメッセージで通達します。

    利用する

    ブロック定義「戦う」内で使います。

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eデバッグ用のログも書いてあります。こういう条件分岐の際にログを打っておくと何かと便利です。ログなのでみなさんはお好みで作っても作らなくても大丈夫です。u003c/pu003e

    ダメージを与えるプログラミングを作る

    メッセージ「プレイヤーがダメージを受けました」を作る

    プレイヤーにダメージを与えたことは、メッセージを通じて伝えます。

    利用する

    攻撃力を設ける

    マリオとは異なる仕様として、敵モブからダメージを受けるとコインが減るようにしたいので、敵モブに攻撃力というパラメータを持たせたいと思います。スライムからダメージを受けたらコインが1枚減るだけでも、クッパみたいなボス級モブからダメージを受けたら一気にコインが10枚減る、みたいなことも可能です。

    自分だけのオリジナル敵モブをカスタマイズして作れます。

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eカスタマイズできると聞くと、ちょっとワクワクしてきませんか?u003c/pu003e

    「攻撃力」は後で変えます。

    戦うプログラミングを編集する

    ブロック定義「戦う」に引数を追加する

    攻撃力、体力、コイン数を追加します。

    ステップ1
    ステップ2

    引数「攻撃力」を追加します。

    ステップ3

    ラベル「体力:」を追加します。

    ステップ4

    引数「体力」を追加します。

    ステップ5

    ラベル「コイン数:」を追加します。

    ステップ6

    引数「コイン数」を追加します。

    ステップ7

    引数を適用します。

    ステップ8

    パラメータを割り振ります。

    これがスライムの能力になります。今後敵モブを増やしたら、このようにパラメータを割り振ることで特徴づけができます。

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eもっと先ですが、レッスンが進めば、より多角的に特徴づけができるようになる予定です。パタパタならジャンプするけど、ノコノコならジャンプはしない、みたいな視点でも柔軟に設定できるようにしていきます。u003c/pu003e

    ダメージを受けるプログラミングを編集する

    たとえば次のように引数を追加するだけでも、新しい視点で敵モブの特徴を変えることができます。

    音がないと味気ない!と後から気づいて引数を追加することにした、という流れだとしましょう。

    ダメージ音を鳴らす

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003eこのスクショには「コスチュームをやられたにする」周りのブロックがありませんが、お気になさらず。前後してしまいましたm(_ _)mu003c/pu003e

    ブロック定義「ダメージを受ける」を編集する

    ブロック定義「ダメージを受ける」を編集して、ダメージ音も敵モブによって分けられるようにします。

    ステップ1

    ラベル「ダメージ音:」を追加します。

    ステップ2

    引数「ダメージ音」を追加します。

    ステップ3

    引数を適用します。

    ブロック定義「戦う」を編集する

    こちらにも同じ引数を追加します。

    ステップ1

    ラベル「ダメージ音:」を追加します。

    ステップ2

    引数「ダメージ音」を追加します。

    ステップ3

    引数を適用します。

    ステップ4

    敵モブごとにダメージ音を変えます。

    動作確認する

    ここまでの動きが出来ていると次のような動画の動きになります。

    スクラッチでマリオのゲームを作る特大レッスン#10 バトル開始!を語るok-scratch ok-scratch

    u003cpu003e動画は無音です。u003c/pu003e

    敵モブと当たるとダメージ音とともに敵モブが消えてコインが現れます。

    しかし、プレイヤーが敵を踏んでも何も反動がないのは不自然ですね。マリオだとピコっと音がなって軽く跳ねますよね。

    そして、今はプレイヤーが敵をすり抜けてしまうので、じつは立ってるだけでも敵モブの弱点に触れるため倒せてしまいます。

    ここからは「敵を踏んだら跳ねる」とか「敵に当たったら弾かれる」というフィードバック周りも修正していきましょう。

    メッセージ関係図

    メッセージの利用状況の関係図を更新しました!

    一番右に「敵モブ」という線が増えました。

    次は明日投稿予定です!

    この記事への質問やコメントをどうぞ

    ただいま実験的に質問を受け付けています。

    コメントは受け付けていません。

    スパム防止のため、 質問をするにはログインが必要 です。ログインはスクラッチのアカウントがあれば誰でもできます。

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