Scratchで画面切り替えを作る方法|クローンと変数で3つの画面を管理する【Grow a Garden①】

Robloxで大人気の農園ゲーム「Grow a Garden」を、Scratchでゼロから作っていく全5回シリーズ。第1回は、ゲーム全体の土台になる「画面の切り替え」を作ります。
タネ屋さん・庭・売り場の3つの画面を、変数ひとつで自由に行き来できるようにします。クローンでボタンを3つ並べる方法、そして「ポーリング」という考え方まで、上級者向けの本格的な作り方を解説します。

【Scratch上級 1/5】Robloxの人気ゲーム「Grow a Garden」を作る!画面切り替えのしくみ【授業まるごと公開】

KIDSPROのオンライン授業を、そのまま公開!実際にスクール生と一緒に作った1時間の授業を、ほぼ編集なしでお届けします。

━━━━━━━━━━━━━━━━━━
▼ 目次
━━━━━━━━━━━━━━━━━━
00:00 完成版Grow a Gardenの紹介
02:30 テンプレートの紹介
05:47 Button(ボタン)を3つ生成
10:40 ボタンのホバー(マウスを乗せると拡大)
17:05 画面切り替えのしくみ:ポーリング
20:55 Garden(庭)のコーディング
23:04 ステージで変数を初期化
25:08 Seeds(種)のコーディング
30:05 Sell(売る)のコーディング
32:02 Slot(スロット)のコーディング
33:38 Button(ボタン)のコード修正(タイトル中は隠す)
35:15 Title(タイトル)のコーディング
36:32 まとめ:クローンはクラスとインスタンス

【上級編1/5】Roblox: Grow a Garden再現してみた(にんじんとイチゴの農園)

https://scratch.mit.edu/projects/1383976207/

ゲームのやり方

ステージ上の3つのボタンを押すと、画面が切り替わります。

・Seeds … タネを買う画面
・Garden … 作物を育てる庭
・Sell … 収穫した作物を売る画面

この回では、この3つを行き来するしくみを作ります。
タネを買う処理や作物を育てる処理は、第2回以降で追加していきます。

▼ この回で使うテンプレート
https://scratch.mit.edu/projects/1383989437/

▼ 第1回の完成版
https://scratch.mit.edu/projects/1383976207/

★全5回を作りきった「フル機能版」はこちら↓
https://scratch.mit.edu/projects/1310372588/

Button(ボタン)

Button(ボタン)のコスチューム

コスチューム名:Seeds

コスチューム名:Garden

コスチューム名:Sell

 

Button(ボタン)のスクリプト

3つのボタン(クローン)を生成するコード
  1. 旗をクリックしたら、スプライト本体はステージから姿を消します。
  2. 続いて「ボタン生成」を実行します。これは「ブロック定義」で自分で作ったブロックです。
  3. 「ボタン生成」が実行されると、ButtonのスプライトはX座標=-100、Y座標=150に瞬間移動し、コスチュームを「Seeds」にします。次に自分自身のクローンを生成し、次のコスチュームに変更してからX座標を100ずつ変える処理を3回繰り返します。
  4. これにより、「Seeds」「Garden」「Sell」の3つのボタンがステージ上部に100ピクセル間隔で生成されます。しかし、本体が隠れている状態でクローンを作ったので、クローン自体もステージから隠れた状態で生まれます。このコードだけでは、まだボタンは見えません。

クローンされた時に実行するコード
  1. Buttonがクローンされたとき、最前面へ移動します。
  2. 生成されたクローン(Button)は、次の処理をずっと繰り返します。
  3. もしも、変数「現在の画面」の値が「Title」ならば、ステージから姿を消します。
  4. 「Title」以外ならば、ステージに姿を現します。
  5. さらに、マウスポインターが触れると少しずつ大きくなり(約110%)、離れると少しずつ元の大きさ(100%)に戻ります(ホバー効果)。

Button(クローン)がクリックされたときのコード
  1. Button(クローン)がクリックされたとき、もしも変数「現在の画面」の値が、クリックされたButton(クローン)のコスチューム名と異なる場合には、以下の処理を実行する。
  2. 変数「現在の画面」に、クリックされたButton(クローン)のコスチューム名を代入し、「Correct音」のメッセージを送信してCorrect音を鳴らします。
    これにより、3つのButton(クローン):「Seeds」「Garden」「Sell」をクリックしたとき、クリックしたボタンのコスチューム名が変数「現在の画面」に格納されます。
Buttonのクローンは「クラス」と「インスタンス」そのもの

「Button」スプライトでは、Seeds・Garden・Sell という3つのコスチュームを用意し、本体は隠したまま、3つのクローンをボタンとして並べました。
それぞれのクローンは、マウスが触れると少し大きくなり、クリックされると変数「現在の画面」に自分のコスチューム名を入れます。

これは、PythonやJavaScriptの考え方と同じ構造をしています。

  • Buttonスプライト本体 → クラス(設計図)。画面には出さない
  • 3つのクローン → インスタンス(実体)
  • コスチューム名・座標・大きさ → プロパティ(クローンごとに持つ自分の値)
  • ホバーやクリックのときの処理 → メソッド

3つのボタンはまったく同じスクリプトを持っています。それなのに Seeds を押せば Seeds 画面に、Sell を押せば Sell 画面に切り替わります。
理由は、それぞれが「自分の」コスチューム名を見ているからで、Pythonの self.name、JavaScriptの this.name と同じ考え方です。

Scratchでプログラミングするときも、こうしたオブジェクト指向の概念を意識しておくと、PythonやJavaScriptなどのテキスト言語を学ぶ際の理解がスムーズになります。

Garden(庭)

Garden(庭)のコスチューム

コスチューム名:CarrotGarden

コスチューム名:StrawberryGarden

Garden(庭)のスクリプト

2つの庭(クローン)を生成するコード
  1. 旗をクリックしたら、X座標=18、Y座標=-5に瞬間移動し、スプライト本体はステージから姿を消します。
    ※2つのクローンは同じ座標に作られますが、コスチュームの絵の中でそれぞれの畑の位置が決まっているため、ステージ上では左右に分かれて見えます。
  2. コスチュームを「CarrotGarden」に変えてからクローンを生成し、続いて「StrawberryGarden」に変えてからクローンを生成します。
  3. これにより、「CarrotGarden」「StrawberryGarden」の2つの庭がステージに生成されます。しかし、本体が隠れている状態でクローンを作ったので、クローン自体もステージから隠れた状態で生まれます。このコードだけでは、まだ庭は見えません。

クローンされた時に実行するコード
  1. クローン(Garden)が生成されると、次の処理をずっと繰り返します。
  2. もしも、変数「現在の画面」の値が「Garden」ならばステージに表示されます。変数「現在の画面」の値が「Garden」以外ならステージから姿を消します。
  3. これにより、3つのButton(ボタン)のクローンの中の「Garden」ボタンをクリックすると、Garden(庭)の2つのクローンがステージに表示され、「Seeds」や「Sell」のボタンをクリックするとGarden(庭)の2つのクローンはステージから消えるようになります。この「ずっと変数『現在の画面』を見張って、自分の番なら表示する:ポーリング」という形は、このあとの Seeds・Sellでもまったく同じように使います。
ポーリングとは?

各スプライトが指示を待つのではなく、自分で繰り返し確認して自分で決める仕組みをポーリングと呼びます。

Seeds(タネ屋さん)

Seeds(タネ屋さん)のコスチューム

コスチューム名:Frame

コスチューム名:Carrot

コスチューム名:Strawberry

コスチューム名:Close

Seeds(タネ屋さん)のスクリプト

タネ屋さんの購入画面(クローン)を生成するコード
  1. 旗をクリックしたら、スプライト本体はステージから姿を消します。
  2. 続いて「Seeds画面作成」を実行します。これは「ブロック定義」で自分で作ったブロックです。
  3. 「Seeds画面作成」が実行されると、X座標=0、Y座標=15に瞬間移動し、コスチュームを「Frame」に変えてからクローンを生成します。
  4. 続いて「x座標・y座標を変える → 次のコスチュームにする → 最前面へ移動する →クローンを作る」を繰り返し、(0, 30) に「CarrotFrame」、(0, -90) に「StrawberyFrame」、(125, 110) に「Close」のクローンを作ります。あとから作るものを最前面へ移動させることで、枠の上に商品や×ボタンが重なって見えるようになります。
  5. これにより、「Frame」の上に「CarrotFrame」「StrawberyFrame」「Close」が重なった購入画面ができあがります。ただし本体が隠れている状態でクローンを作ったので、クローンも隠れた状態で生まれます。このコードだけでは、まだ購入画面は見えません。

クローンされた時に実行するコード
  1. クローン(Seeds)が生成されると、次の処理をずっと繰り返します。
  2. もしも、変数「現在の画面」の値が「Seeds」ならばステージに表示されます。変数「現在の画面」の値が「Seeds」以外ならステージから姿を消します。
  3. これにより、3つのButton(ボタン)のクローンの中の「Seeds」ボタンをクリックすると、4つのクローンで構成される購入画面が表示され、「Garden」や「Sell」のボタンをクリックすると購入画面はステージから消えるようになります。この「ずっと変数『現在の画面』を見張って、自分の番なら表示する:ポーリング」という形は、このあとの Garden・Sellでもまったく同じように使います。

Sell(売り場)

Sell(売り場)のコスチューム

コスチューム名:Costume1

 

Sell(売り場)のスクリプト

旗が押された時に実行されるコード
  1. 旗をクリックすると、X座標=0、Y座標=0に瞬間移動し、次の処理をずっと繰り返します。
  2. もしも、変数「現在の画面」の値が「Sell」ならばステージに表示されます。変数「現在の画面」の値が「Sell」以外ならステージから姿を消します。
  3. これにより、3つのButton(ボタン)のクローンの中の「Sell」ボタンをクリックすると、Sell(売り場)のスプライトが表示され、「Seeds」や「Garden」のボタンをクリックするとSell(売り場)はステージから消えるようになります。この「ずっと変数『現在の画面』を見張って、自分の番なら表示する:ポーリング」という形は、このあとの Seeds・Gardenでもまったく同じように使います。
  4. Sell(売り場)は、これまでの Button・Garden・Seeds とちがってクローンを使いません。売り場は1つだけなので、本体をそのまま表示すれば足りるからです。そのため「クローンされたとき」ではなく「旗が押されたとき」の下に「ずっと」を置いています。見張る形そのものは、これまでとまったく同じです。

Slot(スロット)

Slot(スロット)のコスチューム

コスチューム名:CarrotSeed

コスチューム名:StrawberrySeed

コスチューム名:Carrot

コスチューム名:Strawberry

コスチューム名:Highlight

 

Slot(スロット)のスクリプト

4つのSlot(スロット)と1つのハイライトを生成するコード
  1. 旗をクリックしたら、スプライト本体はステージから姿を消します。
  2. 続いて「スロット作成」を実行します。これは「ブロック定義」で自分で作ったブロックです。
  3. 「スロット作成」が実行されると、Slot(スロット)のスプライトはX座標=-75、Y座標=-155に瞬間移動し、コスチュームを「CarrotSeed」にします。次に自分自身のクローンを生成し、次のコスチュームに変更してからX座標を50ずつ変える処理を5回繰り返します。
  4. これにより、「CarrotSeed」「StrawberrySeed」「Carrot」「Strawberry」の4つのスロットと1つの「Highlight」がステージ下部にX座標−75から右へ50ピクセル間隔で生成されます。しかし、本体が隠れている状態でクローンを作ったので、クローン自体もステージから隠れた状態で生まれます。このコードだけでは、まだSlot(スロット)は見えません。

クローンされた時に実行するコード
  1. Slotがクローンされたとき、次の処理をずっと繰り返します。
  2. もしも、変数「現在の画面」の値が「Title」ならば、ステージから姿を消します。
  3. 「Title」以外ならば、ステージに姿を現します。

Title(タイトル)

Title(タイトル)のコスチューム

コスチューム名:Costume1

 

Sell(売り場)のスクリプト

タイトル画面を表示して、ゲームを始めるコード
  1. 旗をクリックしたら、x座標=0、y座標=0 に移動し、最前面へ移動してからステージに表示されます。ステージの中央にタイトル画面が出ます。
  2. そのまま「マウスが押された」まで待ちます。ここでスクリプトはいったん止まり、プレイヤーがクリックするのを待ちます。
  3. クリックされたら、変数「現在の画面」の値を「Garden」に変えて、「Correct音」のメッセージを送ります。
  4. 最後に自分の姿を消して、タイトル画面の役目は終わりです。
  5. 変数「現在の画面」が「Garden」になったことで、Garden(庭)のクローンが自分で気づいて姿を現し、ゲームが始まります。

Sound(サウンド)

Sound(サウンド)のコスチューム

コスチューム名:ON

コスチューム名:ON

Sound(サウンド)のスクリプト

音の準備をするコード
  1. 旗をクリックしたら、コスチュームを「ON」にして、音量を100%にします。
  2. これでゲームは必ず「音あり」の状態から始まります。コスチュームの「ON」「OFF」が、そのまま今の状態を表す目印になっています。

音のON/OFFを切り替えるコード
  1. Sound(サウンド)のスプライトがクリックされたとき、もしコスチュームの名前が「ON」ならば、コスチュームを「OFF」に変えて、音量を0%にします。
  2. 「ON」以外(=「OFF」)ならば、コスチュームを「ON」に戻して、音量を100%にします。
  3. これにより、スピーカーのマークをクリックするたびに、音のあり/なしが切り替わります。見た目(コスチューム)と中身(音量)が、いつも同じ状態を指すようになっています。
メッセージを受け取って音を鳴らすコード
  1. 「Correct音」「Coin音」「Grow音」など、10種類のメッセージそれぞれに、受け取ったときのスクリプトが用意されています。
  2. メッセージを受け取ると、対応する音を鳴らします。
  3. ただし「Throw音」「Grow音」「Landing音」「Complete音」の4つだけは、もし変数「現在の画面」が「Garden」ならば、という条件がついています。これは作物が出す音なので、畑を見ているときだけ鳴らすためです。買い物中に畑から「ザクッ」と聞こえてきたら気が散ってしまいます。
  4. 一方「Correct音」「Wrong音」「Coin音」などはお店やボタンの音なので、条件をつけずに、どの画面でも鳴らします。

ステージ

ステージのコスチューム

コスチューム名:Costume1

 

ステージのスクリプト

ゲームのはじまりの値を決めるコード
  1. 旗をクリックしたら、変数「現在の画面」の値を「Title」にします。これでゲームはタイトル画面から始まります。
  2. 変数「初期所持金」の値を「10」にします。ゲームを始めるときの所持金です。
  3. 変数「¢」の値を「初期所持金」にします。¢ が、プレイ中に増えたり減ったりする実際の所持金です。
  4. このように、ゲームが始まるときに変数の値をきちんと決めておくことを「初期化」といいます。
Scratch3.0(スクラッチ3.0)とは?

MITメディアラボにより開発されたビジュアルプログラミング言語。子供たちが物語やゲーム、 アニメーションなどのインタラクティブな作品をプログラミングできる。また、自分の作った作品を世界中の人々と共有できるコミュニティーサイトでもある。世界中で1億人を超えるユーザがいる。
こちらのホームページにアクセスすれば無料で利用できる。