※ 当ページには【広告/PR】を含む場合があります。
2020/10/19
【Scratchで簡単なゲーム作成編⑥】クローンの使い方を工夫して、スプライトのプログラミングを効率化してみる
【Scratchで簡単なゲーム作成編⑧】条件を満たした時のスプライトの進化状態を追加する
ゲームオーバーやエンディングなどの演出を機能として盛り込みたい場合、画面やゲームステージと違って走っているプログラムを止めることになります。今回はゲームの終わらせ方をどう組み込むのか具体的なコーディング例をみて考えていきます。ちなみに、今回の内容での改造後のサンプルゲームは以下のようになります。
【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選
エンディング画面を作る
ゲームプログラムが走っている途中でゲームを終了する際には、すべてを止める
ブロックを呼び出すことになります。よって、ゲーム終了自体はこのブロックを使うだけですので、とても単純なことです。別の記事で色々な止め方のパターンを解説したように、ゲームオーバーやゲーム終了をいつ呼び出すかという工夫が今回の課題になってきます。【Scratch入門〜中級編】スクリプトを止め方色々〜止め方を理解してゲームの中断・終了を理解するScratchで、ブロック内のスクリプトを止めたり再開したりする方法を深堀します。
まず初めに終了条件を考えて、設定しなくてはいけません。例えば得点がある一定値以上になったときにエンディング画面になるようにしてみます。ゲームエンドの条件は以下に設定します。今回のプログラムは前回の内容の続きとして、このプログラムから改造していきます。【Scratchで簡単なゲーム作成編⑥】クローンの使い方を工夫して、スプライトのプログラミングを効率化してみるクローンの機能を上手く利用して、必要最低限のスプライトでゲームを作るテクニックを解説します。
ゲームの終了条件を、スプライトのどれか一つに持たせる必要があります。このゲームでいえば、ゲーム中ずっと走っているたこ
かスコア
などのスプライトがありますが、今回は得点を操作しているスコア
スプライトに仕込むのが良いでしょう。以下の図のように、初期化処理(🚩が押されたとき
)に、スコア > 99999
まで処理を待ってから、エンディング
イベントを送るように追加してみます。次にエンディング用の背景を追加します。今回は演出など凝った工夫などは行いませんので無背景とします。背景の名前はエンド
に変えておきます。簡単におわり
の文字を下から上にエンドロールとして動かすためのおわり
スプライトを追加します。このスプライトは他のスクリプトからクローンされた場合に表示され、下から上にスーッと流れるようになります。先程作った背景に戻って、背景のコードに以下を追加します。スコア
スプライトからエンディング
イベントを受け取った時に、背景をエンド
にしてから他のスプライトで走っているスクリプトは全て止めます。そして先程のおわり
スプライトのクローンをここで作成し、エンドロールが流れきる4秒程度待ってからゲームを終了しています。これだけだと、ゲーム中に止められたスクリプトは止まるのですが、スプライトは表示されたままになるので、エンディング画面に表示されては困るスプライトはエンディング
イベントを受け取った時に隠す
、残ってしまったクローンはこのクローンを削除する
を使って見えなくするようにします。よって各関連スプライトにエンディングでは表示しない処理を以下のように施します。これで簡単なエンディングを作ることができました。
【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選
ゲームオーバーの状態を作る
もう一つの終了状態としてゲームオーバーの機能も追加してみます。先ほどのゲームクリア条件とは別に、たこの体力ゲージを作成し、食べ物が食べられない時間が長いとお腹が空いて体力がだんだん下がっていくような機能をつけてみます。ということで、ゲームオーバーの条件としてはということで以降でプログラミングしてみます。体力ゲージの作成
たこの体力を表すゲージをスプライトで作っていきます。以下のようにたいりょく
という名前でスプライトを新規作成し、わく
とたいりょく
の2つのコスチュームを描きます。またこのスプライトではたこの体力を管理するために、新しく以下の3つの変数を追加します。では体力ゲージのブロックコード実装例は以下の図のようになります。ポイントだけかいつまむと、まず図の①ではゲームスタート時の初期化処理になります。先ほど挙げた3つの変数の初期値を与え、ゲージを表示させる座標にくるようにコスチュームをわく
にしたスプライトを表示しています。また今回はタイマーを使って体力の変化を行いますので、スタート時にタイマーをリセットしています。②ではコスチュームをたいりょく
にしたクローンを使ってゲージを表現しています。変数たいりょく
が満タンの10のときには10個のクローンを全て表示させ、体力がゼロになったときに全てのクローンが非表示になるようにしています。なお、クローンの識別番号ばんごう_
を割り当てるテクニックは以前の記事で特集しています。【Scratch入門〜中級編】少しだけ難しいスプライトのクローンの高度な利用法Scratchの中級者向けのテクニックとして、クローンの特殊な使い方を解説します。
次に図の③の箇所ですが、ここがゲームオーバーかどうかを判断させる処理になっています。今回はタイマーで5秒たったら、体力が1ずつ減っていきます。ゼロになった時点でゲームオーバーです。ただし、食べ物を食べることで体力は1ずつ回復しますので、ゲームオーバーにならないようにするためには食べ物を与え続ける必要があります。タイマーの使い方に関しては、以前のこちらの記事も参考になりますので、タイマーに使い慣れていなければ一読ください。【Scratch入門】タイマーの基本と使い方のポイントScratchプログラミングの「タイマー」の基本的な使い方を解説します。
最後に④の箇所で、ゲームオーバー
イベントを送ってゲームオーバーの処理に移行します。このたいりょく
スプライトの各イベント処理は以下のようになります。上の内容で述べたように、エンディングやゲームオーバーのときには全て隠れるようにしています。また、たべた○
イベントでは、食べ物を食べたことを判別するフラグたいりょくへんか_
を1にすることで、体力を1つ増やすことができるようになります。ゲームオーバー時の非表示処理
ゲームオーバーの時に画面に表示されたまま残ってしまわないように、ゲームオーバー
イベント時に余計なスプライト全てを隠す・クローンを削除する必要があります。おわりスプライト
エンディング用のおわり
スプライトに新しくゲームオーバー
のコスチュームを追加します。コスチュームを追加しただけではプログラムがエンディング
なのかゲームオーバー
なのか区別がつきません。終了処理の区別のためにローカル変数おわりかた_
を追加して、0の時にはエンディング、1の時にはゲームオーバーに割りあてて、それぞれ違う演出にしてみます。これでこのゲームにエンディングとゲームオーバーの2つの機能を実装できたことになります。
【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選
まとめ
今回は、ゲームの終わらせ方を実際の例を見ながら解説しました。やはりエンディングやゲームオーバーがあることで、より一層ゲームらしくなったと思います。