【Scratchで簡単なゲーム作成編⑥】クローンの使い方を工夫して、スプライトのプログラミングを効率化してみる
※ 当ページには【広告/PR】を含む場合があります。
2020/09/25
ここまでのゲームの作り込みで、アイテム・敵のスプライトの数・文字表示の位置の数が増えていくにつれて、何が何の役割をもったスプライトなのか分かりにくくなってきます。
そこで、今回はクローンの機能を上手く利用して、スプライトの数を減らし、最小の数のスプライトでゲームを作るテクニックを解説します。
はじめに
まずベースとなる効率化前のプロジェクトはスクラッチのオンラインページの
今回はこのプログラムを修正しながら以降の内容の解説を進めていきます。
また、
一度、以降の内容に進む前に、そちらをよく読んでからまた戻ってきていただくと理解がすすむのではないかと思います。
効率化前と後でコーディングブロックがどのように変わったのか比較してもらえるように、効率化後のプロジェクトも
おきばしょスプライト
まずは
おきばしょ
リストを使った座標の取り出し
ローカル変数
おきばしょ_
ローカルリストとして
ヨコリスト_
タテリスト_
試しにエサ置き場を5回クローンするだけのブロックを実行してみると、

裏番号を持ったクローンが狙い通り作成されています。
さて、それでは一つのクローンごとの処理をさせるにはどうしたら良いのでしょうか。
答えは、
クローンされたとき

イベントをまとめる
ここからブロックを大きく手直しするので、少々内容が複雑になってきます。
まずは、ローカル変数
せんたくされた?_

上の図の②、③、④の部分は一続きに書くと縦に長くなるので、ひとまず3つに分解してます。
③のブロックでクローンの裏番号(
おきばしょ_
④のブロックでは、
たべもの1?
たべもの5?
ここでの重要なポイントは②のブロックのはたらきです。
このスプライトが押されたとき
そこで
たべものモード
せんたくされた?_
たこスプライトとの接触判定
スプライトとクローンの当たり判定のお話は

このテクニックの解説に関しては以前詳しく取り上げたので、ここでは割愛します。
スコアボードスプライト
スコアボード

これで
〇〇みえる?
たべものスプライト
次に選択画面に表示されるスプライトも1つにまとめて
たべもの

ここではクローンに裏番号を割り振るためにローカル変数
たべもの_
クローンする位置をリストを使うことでより効率的に管理できるようになります。 ここでもローカルリスト・
ヨコリスト_
タテリスト_

条件を満たしたときに特定のクローンを表示させるようにするためには、その条件を
クローンしたとき
あとはどのクローンが選択されたかを調べるためには、
このスプライトが押されたとき
たべもの_
また、先程スコアボードのスプライトで作成していたアイテム表示フラグ
〇〇みえる?

スコアスプライト
最後にスコアボードにスコアを表示させるスプライトを一つにまとめようと思いますが、こちらは既にクローン機能を利用してスコアを表示させていたため、これを統合しようとなるといささかトリッキーかも知れません。
この節の内容を理解できればクローンがかなり理解できていることになりますが、すこし難しいと感じられたら、今のままのプログラムでも十分機能しているので、無理にスプライトの集約化をする必要はありません。
まずは
スコア

元のプログラムのままブロックをまとめただけでは、スコアのスプライトにループが多数存在して処理が混線してくるので、スコアが変わったときだけ描画するようにプログラムを見直します。
まずは
スコア
まずは、アイテムの画像を貼り付けるクローンが7個、スコアには最大8桁までの数字が表示できるとして8個、アイテム全6種類として各アイテム取得数が最大3桁までの数字が表示できるように18個、計33個のクローンを必要とします。

ということで、ゲームが開始したら33回のクローンを生成しておきます。
まずはアイテムの画像を貼り付ける7つのクローン(裏番号は0から6)ですが、引数付きの定義ブロック
スコアみえかた

また、現在のスコアの表示と各アイテム取得数を表示するプログラムですが、たとえば
スコア
りんご

ここではそれぞれ定義ブロックを定義し、
スコアひょうじ
りんごひょうじ
これらのクローンはゲーム中ずっとスコアを監視して、変化したときに表示を変える必要があります。 なので最終的に、
クローンされたとき
ずっと

以上、ゲームの効率化のお話でしたが実はまだまだ効率化できそうではあります。
プログラミングの効率化・最適化はやればやるほどきりがなくなってくる話になりますので、程々にしておきましょう。
まとめ
今回の修正で、修正前にこれだけあったスプライトの数がぎゅっと圧縮されてスッキリしました。

同じような機能をもつスプライトをクローンでまとめ上げることで、すっきりとキレイなプロジェクトに仕上げることができました。
ただし良い事ばかりではなく、スプライトの数が最適化されたことでゲームの拡張はやりやすくなった反面、ひとつあたりのスプライトのコーディング量も大きくなり複雑化してしまうため、機能の集約化やブロックを読み解くには高度なプログラミング知識が必要になってきます。
プログラミング上級者になることは、良いプログラムを書けるようになることと言い換えてもいいように、なかなか一朝一夕では習得できないものです。
今回説明した内容が難しいと感じたらコーディングの集約化にこだわらず、ご自分の今のプログラミング習得レベルにあわせたゲームを作ることを心がけましょう。