【Scratchで簡単なゲーム作成編⑦】ゲーム終了画面を実装する


※ 当ページには【広告/PR】を含む場合があります。
2020/10/19
【Scratchで簡単なゲーム作成編⑥】クローンの使い方を工夫して、スプライトのプログラミングを効率化してみる
【Scratchで簡単なゲーム作成編⑧】条件を満たした時のスプライトの進化状態を追加する




ゲームオーバーやエンディングなどの演出を機能として盛り込みたい場合、画面やゲームステージと違って走っているプログラムを止めることになります。
今回はゲームの終わらせ方をどう組み込むのか具体的なコーディング例をみて考えていきます。
ちなみに、今回の内容での
改造後のサンプルゲーム は以下のようになります。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

エンディング画面を作る



ゲームプログラムが走っている途中でゲームを終了する際には、
すべてを止める ブロックを呼び出すことになります。
よって、ゲーム終了自体はこのブロックを使うだけですので、とても単純なことです。

別の記事 で色々な止め方のパターンを解説したように、ゲームオーバーやゲーム終了をいつ呼び出すかという工夫が今回の課題になってきます。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門〜中級編】スクリプトを止め方色々〜止め方を理解してゲームの中断・終了を理解する

Scratchで、ブロック内のスクリプトを止めたり再開したりする方法を深堀します。



まず初めに終了条件を考えて、設定しなくてはいけません。
例えば得点がある一定値以上になったときにエンディング画面になるようにしてみます。 ゲームエンドの条件は以下に設定します。

            ゲームエンドの条件:
    スコアが100,000に達したとき

        

今回のプログラムは
前回の内容 から改造していきます。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratchで簡単なゲーム作成編⑥】クローンの使い方を工夫して、スプライトのプログラミングを効率化してみる

クローンの機能を上手く利用して、必要最低限のスプライトでゲームを作るテクニックを解説します。



ゲームの終了条件を、スプライトのどれか一つに持たせる必要があります。 このゲームでいえば、ゲーム中ずっと走っている
たこスコア などのスプライトがありますが、今回は得点を操作している スコア スプライトに仕込むのが良いでしょう。
以下の図のように、初期化処理(
🚩が押されたとき )に、 スコア > 99999 まで処理を待ってから、 エンディング イベントを送るように追加してみます。

合同会社タコスキングダム|蛸壺の技術ブログ


次にエンディング用の背景を追加します。 今回は演出など凝った工夫などは行いませんので無背景とします。 背景の名前は
エンド に変えておきます。

合同会社タコスキングダム|蛸壺の技術ブログ


簡単に
おわり の文字を下から上にエンドロールとして動かすための おわり スプライトを追加します。

合同会社タコスキングダム|蛸壺の技術ブログ


このスプライトは他のスクリプトからクローンされた場合に表示され、下から上にスーッと流れるようになります。
先程作った背景に戻って、背景のコードに以下を追加します。

合同会社タコスキングダム|蛸壺の技術ブログ
スコア スプライトから エンディング イベントを受け取った時に、背景を エンド にしてから他のスプライトで走っているスクリプトは全て止めます。 そして先程の おわり スプライトのクローンをここで作成し、エンドロールが流れきる4秒程度待ってからゲームを終了しています。
これだけだと、ゲーム中に止められたスクリプトは止まるのですが、スプライトは表示されたままになるので、エンディング画面に表示されては困るスプライトは
エンディング イベントを受け取った時に 隠す 、残ってしまったクローンは このクローンを削除する を使って見えなくするようにします。
よって各関連スプライトにエンディングでは表示しない処理を以下のように施します。

合同会社タコスキングダム|蛸壺の技術ブログ


これで簡単なエンディングを作ることができました。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

ゲームオーバーの状態を作る



もう一つの終了状態としてゲームオーバーの機能も追加してみます。
先ほどのゲームクリア条件とは別に、たこの体力ゲージを作成し、食べ物が食べられない時間が長いとお腹が空いて体力がだんだん下がっていくような機能をつけてみます。
ということで、ゲームオーバーの条件としては

            たこの体力がゼロになったらゲームオーバー

        

ということで以降でプログラミングしてみます。

体力ゲージの作成



たこの体力を表すゲージをスプライトで作っていきます。
以下のように
たいりょく という名前でスプライトを新規作成し、 わくたいりょく の2つのコスチュームを描きます。

合同会社タコスキングダム|蛸壺の技術ブログ


またこのスプライトではたこの体力を管理するために、新しく以下の3つの変数を追加します。

            + グローバル変数: たいりょく
    たこの体力を数値化したもの。
    0 ~ 10までの数
- ローカル変数: ばんごう_
    クローンの識別番号。
    10個のクローンで体力ゲージを作る。
- ローカル変数: たいりょくへんか_
    食べ物を食べたときに回復させる場合に使うフラグ。
    0で何もしない状態、1になったとき体力を1増やす。

        

では体力ゲージのブロックコード実装例は以下の図のようになります。

合同会社タコスキングダム|蛸壺の技術ブログ


ポイントだけかいつまむと、まず図の①ではゲームスタート時の初期化処理になります。
先ほど挙げた3つの変数の初期値を与え、ゲージを表示させる座標にくるようにコスチュームを
わく にしたスプライトを表示しています。 また今回はタイマーを使って体力の変化を行いますので、スタート時にタイマーをリセットしています。
②ではコスチュームを
たいりょく にしたクローンを使ってゲージを表現しています。 変数 たいりょく が満タンの10のときには10個のクローンを全て表示させ、体力がゼロになったときに全てのクローンが非表示になるようにしています。
なお、クローンの識別番号
ばんごう_ を割り当てるテクニックは 以前の記事 で特集しています。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法

Scratchの中級者向けのテクニックとして、クローンの特殊な使い方を解説します。



次に図の③の箇所ですが、ここがゲームオーバーかどうかを判断させる処理になっています。
今回はタイマーで5秒たったら、体力が1ずつ減っていきます。 ゼロになった時点でゲームオーバーです。
ただし、食べ物を食べることで体力は1ずつ回復しますので、ゲームオーバーにならないようにするためには食べ物を与え続ける必要があります。
タイマーの使い方に関しては、
以前のこちらの記事 も参考になりますので、タイマーに使い慣れていなければ一読ください。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratch入門】タイマーの基本と使い方のポイント

Scratchプログラミングの「タイマー」の基本的な使い方を解説します。



最後に④の箇所で、
ゲームオーバー イベントを送ってゲームオーバーの処理に移行します。
この
たいりょく スプライトの各イベント処理は以下のようになります。

合同会社タコスキングダム|蛸壺の技術ブログ


上の内容で述べたように、エンディングやゲームオーバーのときには全て隠れるようにしています。
また、
たべた○ イベントでは、食べ物を食べたことを判別するフラグ たいりょくへんか_ を1にすることで、体力を1つ増やすことができるようになります。

ゲームオーバー時の非表示処理



ゲームオーバーの時に画面に表示されたまま残ってしまわないように、
ゲームオーバー イベント時に余計なスプライト全てを隠す・クローンを削除する必要があります。

合同会社タコスキングダム|蛸壺の技術ブログ

おわりスプライト



エンディング用の
おわり スプライトに新しく ゲームオーバー のコスチュームを追加します。

合同会社タコスキングダム|蛸壺の技術ブログ


コスチュームを追加しただけではプログラムが
エンディング なのか ゲームオーバー なのか区別がつきません。
終了処理の区別のためにローカル変数
おわりかた_ を追加して、0の時にはエンディング、1の時にはゲームオーバーに割りあてて、それぞれ違う演出にしてみます。

合同会社タコスキングダム|蛸壺の技術ブログ


これでこのゲームにエンディングとゲームオーバーの2つの機能を実装できたことになります。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

まとめ



今回は、ゲームの終わらせ方を実際の例を見ながら解説しました。
やはりエンディングやゲームオーバーがあることで、より一層ゲームらしくなったと思います。