【Scratchで簡単なゲーム作成編⑥】クローンの使い方を工夫して、スプライトのプログラミングを効率化してみる


※ 当ページには【広告/PR】を含む場合があります。
2020/09/25
【Scratchで簡単なゲーム作成編⑤】ゲームの状態を伝えるセリフ枠を作成する
【Scratchで簡単なゲーム作成編⑦】ゲーム終了画面を実装する




ここまでのゲームの作り込みで、アイテム・敵のスプライトの数・文字表示の位置の数が増えていくにつれて、何が何の役割をもったスプライトなのか分かりにくくなってきます。
そこで、今回はクローンの機能を上手く利用して、スプライトの数を減らし、最小の数のスプライトでゲームを作るテクニックを解説します。


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

はじめに



まずベースとなる効率化前のプロジェクトはスクラッチのオンラインページの
ここ においております。
今回はこのプログラムを修正しながら以降の内容の解説を進めていきます。
また、
以前の内容・スプライト・クローンの利用法〜中級者編 で説明した内容をよく理解していないと、今回の記事の内容が分かりにくいかもしれません。
一度、以降の内容に進む前に、そちらをよく読んでからまた戻ってきていただくと理解がすすむのではないかと思います。

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

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



効率化前と後でコーディングブロックがどのように変わったのか比較してもらえるように、効率化後のプロジェクトも
ここ でアップロードして公開しております。


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

おきばしょスプライト



まずは
おきばしょ というスプライト名にして、他は全て消します。

リストを使った座標の取り出し



ローカル変数
おきばしょ_ を使って、クローンに裏番号を割り振りましょう。
ローカルリストとして
ヨコリスト_タテリスト_ にエサ置き場の座標を登録しておきます。
試しにエサ置き場を5回クローンするだけのブロックを実行してみると、

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


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

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

イベントをまとめる



ここからブロックを大きく手直しするので、少々内容が複雑になってきます。
まずは、ローカル変数
せんたくされた?_ をスプライトに追加します。 この変数で、食べ物がセットされた時にはゼロ以外の数になるようにしています。 (下の図の①の部分)

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


上の図の②、③、④の部分は一続きに書くと縦に長くなるので、ひとまず3つに分解してます。
③のブロックでクローンの裏番号(
おきばしょ_ )ごとに、何か食べ物が置かれていた場合に捨てる処理をしています。
④のブロックでは、
たべもの1?たべもの5? のどれかで指定された食べ物の名前からコスチュームを設定するブロックです。
ここでの重要なポイントは②のブロックのはたらきです。
このスプライトが押されたとき イベントの中でしかクローンの裏番号が識別出来ないので、各クローンのコスチュームを個別に変えるには、このブロック内で行うしかありません。
そこで
たべものモード に飛んで食べ物を選んでる最中は、変数 せんたくされた?_ が変わるまでスクリプトじっと待機し、この変数が変わってから処理が再開されるようにしています。

たこスプライトとの接触判定



スプライトとクローンの当たり判定のお話は
こちら で解説したことがありますので、このテクニックを用います。

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


このテクニックの解説に関しては以前詳しく取り上げたので、ここでは割愛します。


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

スコアボードスプライト

スコアや食べたアイテム数で、表示できるアイテムを増やす機能を前回 変数で管理するのが良いやり方です。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratchで簡単なゲーム作成編④】条件を満たすとアイテムの種類を変化する機能をつける

今回はScratchゲームで、条件の設定からアイテムの種類を変化させる方法を深堀してみましょう。

スコアボード スプライトのプログラムは以下のようなブロックを追加します。

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


これで
〇〇みえる? がゼロでないときに、ゲームの状態を変更し、アイテムを見せる/見せないというフラグを切り替えることができるようになります。


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

たべものスプライト



次に選択画面に表示されるスプライトも1つにまとめて
たべもの スプライト1つにします。 コスチュームもすべてまとめています。

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


ここではクローンに裏番号を割り振るためにローカル変数
たべもの_ を使って以下のようにクローンを作成します。
クローンする位置をリストを使うことでより効率的に管理できるようになります。 ここでもローカルリスト・
ヨコリスト_タテリスト_ の2つを定義して、縦と横の値を順序良く読み出しして使っています。

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


条件を満たしたときに特定のクローンを表示させるようにするためには、その条件を
クローンしたとき イベントに定義する必要があります。
あとはどのクローンが選択されたかを調べるためには、
このスプライトが押されたとき イベント内で、 たべもの_ を利用して裏番号から条件分岐を作ることで実現できます。
また、先程スコアボードのスプライトで作成していたアイテム表示フラグ
〇〇みえる? を使って、ある条件を満たした時点で表示に切り替えができるようにすることも効率化の大きなポイントとなっています。

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

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

スコアスプライト



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

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


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

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


ということで、ゲームが開始したら33回のクローンを生成しておきます。
まずはアイテムの画像を貼り付ける7つのクローン(裏番号は0から6)ですが、引数付きの定義ブロック
スコアみえかた を利用して効率よく配置・表示/非表示を設定しています。 共通部分をくくり出して、引数付きの定義ブロックにしているゲームは頻繁に目にするので、積極的に使って身に付けるとよいと思います。

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


また、現在のスコアの表示と各アイテム取得数を表示するプログラムですが、たとえば
スコア の現在の得点と りんご の取得数の表示プログラムは以下のようになります。

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


ここではそれぞれ定義ブロックを定義し、
スコアひょうじ では8桁の得点の表示に使うクローンの裏番号が7から14ですのでその範囲に絞った使い方をしています。

りんごひょうじ では、取得したりんごの数を3桁で表すので、15から17の裏番号のクローンを使う...というロジックで処理が繰り返えされています。
これらのクローンはゲーム中ずっとスコアを監視して、変化したときに表示を変える必要があります。 なので最終的に、
クローンされたとき にブロックに ずっと ブロックの中でこれらの処理を入れて使わないと正しく動作しないことも覚えておいてください。

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


以上、ゲームの効率化のお話でしたが実はまだまだ効率化できそうではあります。
プログラミングの効率化・最適化はやればやるほどきりがなくなってくる話になりますので、程々にしておきましょう。


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

まとめ



今回の修正で、修正前にこれだけあったスプライトの数がぎゅっと圧縮されてスッキリしました。

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


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