Scratchでりんごキャッチゲームを作ろう 基本編③りんごをクローンしていっぱい落とそう

2021年7月8日

基本編②では、りんごをランダムな位置に落とすプログラムを実装しました。ですが、落ちてくるりんごは1個だけでした。

今回は、「りんごをクローンして、たくさん落とすプログラム」を実装していきます。

次の動画のような動きになるようにプログラミングするのが今回の目標です。

基本編②はこちら: 基本編② りんごを落とそう

りんごキャッチゲームを作ろうトップ記事はこちら: りんごキャッチゲームを作ろうトップ記事

バババ
バババ
解説の画像が見づらい時は、画像をクリックして拡大して見てね!

目次

クローンとは?

はじめに、クローンについて説明します。すでにクローンを知っている人は読み飛ばしてね。
読み飛ばす

Question
悩んでる人
悩んでる人
クローンってなに?
バババ
バババ
指定したスプライトのコピーを作ることです!
同じ機能を持つスプライトをたくさん作成する場合は、クローンすると便利!

<解説>

クローンとはコピーのことです。

同じ機能を持つスプライトをたくさん使用したい場合、スプライトを1個ずつ作ると、同じプログラムをすべてのスプライトに書かなければいけないので大変です。

クローンすれば、そのスプライトに実装されているプログラムごとコピーしてくれるので、同じプログラムを何度も書かなくて良くなります。

同じプログラムがたくさんあると、あとで修正するときに大変になります。例えば、今回の実装する「りんご」の場合、あとで落ちてくるスピードや範囲を修正しようとすると、スプライトを1個ずつ用意した場合、すべてのプログラムを修正しなければなりません。修正漏れや間違いが起こる可能性も高くなります。

クローンを使用すれば、1つのスプライトだけ修正すればいいので、手間もミスする可能性もグッと低くなります。

どんなプログラムにすれば良いのか考えよう

実際にScratchでプログラムを実装する前に、前回の「りんごを落とすプログラム」を考えた時と同じように、どんなプログラムを実装したら良いのか考えていきましょう。

今回実装するプログラムで「やりたいこと」「そのために必要な処理」「どんな順番で処理するか」を考えていきます。

プログラミングの考え方について、前回の基本編②の記事で解説しています。
まだ見てない人、忘れてしまった人はぜひ見てみてね!
前回の記事でプログラミングの考え方を見てみる

このプログラムでやりたいこと

今回は、「りんごがいっぱい落ちてくるようにしたい」です。

いっぱい落ちてくるようにするために、「りんごをクローン」します。この「クローンしたりんご」がいっぱい落ちてくるようにしたいです。

ただ、「いっぱい」という表現だとイメージがぼんやりしてしまうので、もっと具体的にして、「ゲームが開始してから終了するまで、ずっとりんごが落ち続ける」としましょう。

やりたいことをまとめると、次のようになります。

・りんごをクローンしたい。
・クローンしたりんごが落ちてくるようにしたい。
・ゲームが開始してから終了するまで、ずっとりんごが落ち続けるようにしたい。

やりたいこと実現するために「どんな処理が必要なのか」を考える

やりたいことが整理できたら、「それを実現するためにどんな処理が必要なのか」を考えていきましょう。

りんごをクローンしたいので、「クローンする」という処理が必要ですね。

クローンしたりんごが落ちてくるようにしたいので、前回の基本編②で作成した「りんごを落とすプログラム」をクローンしたりんごに対して実行されるようにする必要があります。

ずっとりんごが落ち続けるようにするために、「りんごを落とすプログラム」をゲームが終了するまで繰り返し実行されるようにします。

りんごがずっとゲーム終了まで落ち続けるので、りんごのクローンも何度もしなければいけないですね。なので、りんごのクローンもゲームが開始してから終了するまで、ずっと行われるようにしましょう。

必要な処理をまとめると、次のようになります。

・「りんごのクローン」を作成する
・基本編②で作成した「りんごを落とすプログラム」を、クローンしたりんごに対して実行されるようにする。
・上の2つの処理をゲームが開始してから終了するまで繰り返す。

「どんな順番で処理しなければいけないのか」を考える

必要な処理を洗い出したら、「処理の順番」を考えていきましょう。

まずはりんごをクローンする必要がありますね。

次にクローンしたりんごが落ちてくるように、前回の基本編②で作成した「りんごを落とすプログラム」を実行します。

最後に、これらの処理をゲーム開始から終了まで繰り返してあげます。

まとめると次のようになります。

①「りんごのクローン」を作成する
②基本編②で作成した「りんごを落とすプログラム」を、クローンしたりんごに対して実行されるようにする。
③上の2つの処理をゲームが開始してから終了するまで繰り返す。

プログラミングしよう

プログラミングする内容がまとまったので、実際にプログラミングしていきましょう。

「りんごのクローン」を作成する

Scratchには、クローンを作成する便利なブロックが用意されているため、それを使ってクローンを作成します。

①りんごに対してプログラムを実装していくので、りんごのスプライトをクリックしましょう。
②コードブロックにある『制御』をクリックしましょう。
③制御の中の『自分自身のクローンを作る』というブロックをドラッグしましょう。


『自分自身のクローンを作る』ブロックの「自分自身」のところを変更すると、クローンを作りたいスプライトを変更できます。今回は、りんごのスプライトに対してプログラムしているので、「自分自身」は「りんごのスプライト」となります。

「りんごを落とすプログラム」をクローンしたりんごに対して実行されるようにする

「クローンされたとき」に、前回の基本編②で作成した「りんごを落とすプログラム」が実行されるようにします。

①コードブロックにある『制御』をクリックしましょう。
②制御の中の『クローンされたとき』というブロックをドラッグして、「りんごを落とすプログラム」の上にくっつけましょう。

これで、クローンされたときに「りんごを落とすプログラム」が実行されるようになります。

ゲーム開始から終了まで繰り返す

ここまで実装したプログラムがゲーム開始から終了まで繰り返し行われるようにしていきましょう。

まずは、ゲームが開始したらプログラムが動くようにします。Scratchでのゲーム開始は「『緑の旗』がクリックされたとき」なので、『緑の旗』がクリックされたらプログラムが動くようにします。

①コードブロックの『イベント』をクリックしましょう。
②イベントの中の『緑の旗が押されたとき』というブロックをドラッグして、『自分自身のクローンを作る』ブロックの上にくっつけましょう。

次に「繰り返し」を設定していきましょう。

①コードブロックの『制御』をクリックしましょう。
②制御の中の『ずっと』というブロックをドラッグして、「自分自身のクローンを作る」ブロックをはさみます。

これで、『緑の旗』をクリックしてゲームを開始すると、終了するまでずっとクローンを作り続けます。クローンが作られると、「りんごを落とすプログラム」が動くので、ゲームが開始してから終了するまでずっとりんごが落ちてくることになります。

プログラムを実行してみよう

では、作成したプログラムを実行して思った通りに動くか確認してみましょう。

緑の旗をクリックして実行してみましょう。

困っている人
困っている人
・・・なんか思ってたのと違う…

思った通りに動きませんでしたね…。なにがおかしかったのか考えていきましょう。

うまく動かなかったところを修正していこう

作ったプログラムを実行してみたら、思い通りに動かなかったということはよくあります。むしろ一回でうまくできることの方が少ないかもしれません。

うまくいかなくて嫌になるかもしれませんが、そんなときでも慌てずに落ち着いて、「なにがおかしいのか」考えていきましょう。

バババ
バババ
問題が発生して、それを解決するのもプログラミングの楽しさの1つです!
あきらめずに解決方法を考えていきましょう!

なにがおかしいのか考える

今回の目標の動画の動きと、今の動きを見比べて、違う部分を探してみましょう。
今回の目標の動画↓

まずはりんごの落ち方ですが、目標の動画では1個ずつ落ちてくるのに対して、今は同時にいっぱい落ちてきてしまってますね。

また、地面に落ちたりんごが消えずにずっと残ってしまっています。地面がりんごだらけになってしまいますね。

りんごだらけでわかりづらいかもしれませんが、クローン元のりんごが動かずにずっと表示されていますね。目標の動画ではありませんでした。

おかしいところをまとめると次の通りです。

・りんごが同時にいっぱい落ちてき過ぎ。
・地面がりんごだらけになる。
・クローン元のりんごがずっと表示されている。

うまくできなかった原因を考える

なぜ思った通りにできなかったのか原因を考えてみましょう。

「りんごが同時に落ちてき過ぎ」の原因

これは「やりたいことを実現するために必要な処理」を考えた時に、「りんごを落とす間隔」について考えてなかったのが原因ですね。

間隔を空けずにりんごをクローンし続けたせいで、同時に大量のりんごが落ちてきてしまいました。

「地面がりんごだらけになる」の原因

これは「このプログラムでやりたいこと」を考えた時に、「地面に落ちたりんごを消したい」という考えが漏れていたのが原因ですね。

「このプログラムでやりたいこと」から漏れていたので、必要な処理にも「りんごを消す」という処理は出てきませんでした。

「クローン元のりんごがずっと表示されている」の原因

これはクローンを作成するプログラミングをした時の配慮漏れが原因です。

クローン元のスプライトは使用しないので、表示されないようにするべきでした。

どう修正したらいいか考える

おかしいところとおかしくなった原因が分かったので、どう修正したらいいのか考えていきましょう。

「りんごが同時に落ちてき過ぎ」の修正方法

「りんごを落とす間隔」について考えていなかったことが原因だったので、「りんごを落とす間隔」を設定しましょう。

「りんごを落とす間隔」は後でも調整できるので、ひとまず、3秒間隔でりんごが落ちてくるように修正することにします。

「地面がりんごだらけになる」の修正方法

「地面に落ちたりんごを消したい」という考えが漏れていたのが原因だったので、「りんごが地面に落ちたら消す」という処理を追加しましょう。

「クローン元のりんごがずっと表示されている」の修正方法

クローンを作成するプログラミングしたときの配慮が漏れていたのが原因だったので、配慮が漏れていた処理を追加します。

具体的には、ゲームが開始されたら一番最初に「りんごのスプライトを隠す」という処理を追加します。

修正方法のまとめ

それぞれのおかしいところについて、修正方法がまとまりました。

先ほど作成したプログラムを次のように修正します。

・りんごを落とす間隔を3秒間隔にする。
・地面にりんごが落ちたら、りんごを消す。
・ゲーム開始後、一番最初にりんごのスプライトを隠す。

プログラムを修正しよう

おかしいところが分かって、修正方法も決まったのでプログラムを修正していきましょう。

りんごを落とす間隔を3秒間隔にする

今のプログラムの仕組みは、クローンが作られるとりんごが落ちてくるようになっているので、りんごを落とす間隔を3秒間隔にするためには、クローンを作る間隔を3秒間隔にしてあげます。

①コードブロックの中にある『制御』をクリックしましょう。
②制御の中の『1秒待つ』というブロックをドラッグして、「自分自身のクローンを作る」ブロックの上にくっつけましょう。
③『1秒待つ』ブロックの「1秒」のところを「3秒」に変更しましょう。

これで3秒間隔でりんごが落ちてくるようになりました。もし、りんごが落ちてくる間隔を変更したい時は、③の手順で変更した3秒を別の数字に変更すれば間隔を調整できます。

3秒間隔で落ちてくるようにはなりましたが、ゲームが開始してから3秒間待たないとりんごが落ちてきませんね。

ゲームを開始したらすぐにりんごが落ちてきてほしいので、ちょっと処理を追加します。

①コードブロックの中にある『制御』をクリックしましょう。
②制御の中の『自分自身のクローンを作る』というブロックをドラッグして、「緑の旗が押されたとき」ブロックの下にくっつけましょう。

これでゲームを開始したらすぐにりんごが落ちてきて、その後は3秒間隔で落ちてくるようになりました。

りんごが地面に落ちたら消す

「りんごが地面に落ちた」ことを判定するために、背景を利用します。

背景の地面の色は茶色っぽい色しています。「この色にりんごが触れたら消す」という処理を追加していきましょう。

①コードブロックの『調べる』をクリックしましょう。
②調べるの中に『○色に触れた』というブロックがあるので、ドラッグします。

『○色に触れた』ブロックの色を、地面の色に設定しましょう。

①『○色に触れた』ブロックの色の部分をクリックします。
②スポイトマークをクリックします。
③背景の地面の茶色をクリックします。

そうすると『○色に触れた』ブロックの色が、地面と同じ色に変わったと思います。

では、「りんごが地面に落ちたら消す」プログラムをしていきましょう。

①コードブロックの『制御』をクリックしましょう。
②制御の中にある『もし<>なら』というブロックをドラッグして、「りんごを落とすプログラム」の下にくっつけましょう。

③『もし<>なら』ブロックの「<>」の部分に『○色に触れた』ブロックをはめこみましょう。
④制御の中にある『このクローンを削除する』ブロックを『もし<>なら』の中にドラッグしましょう。

今実装したプログラムは、『もし<>なら』ブロックを使って、「もし、地面に触れたらりんごを消す。地面に触れてなかったら何もしない」というプログラムになります。

実行して確認してみてください。地面に落ちたりんごは消えるようになりましたね。

Point

『もし<>なら』のように、条件を判断して実施する処理を変えることを「条件分岐」と言います。

Scratchには条件分岐のブロックが2つ用意されています。

:条件に一致した時の処理を指定できる。

:条件に一致した時の処理と一致しなかった時の処理を指定できる。

条件分岐を使えば、「この場合はこれをする。そうでなければ、これをする」という感じで、条件に合わせて処理を分岐させることができるのでプログラミングの幅が広がります。

条件分岐を使いこなせるようになるために、実際に使ってみてどんな動きをするのか試してみてください。

りんごのスプライトを隠す

ゲームが開始されたら、クローンの元となるりんごのスプライトを隠します。

①コードブロックの『見た目』をクリックしましょう。
②見た目の中の「隠す」ブロックをドラッグして、「緑の旗が押されたとき」ブロックの下にくっつけましょう。


この状態で実行してみてください。そうするとりんごが落ちてこなくなりましたね。

これは、りんごを隠したことによって、クローンしたりんごも表示されなくなってしまったからです。

クローンしたりんごは表示されるようにしていきましょう。

①コードブロックの『見た目』をクリックしましょう。
②見た目の中の「表示する」ブロックをドラッグして、「クローンされたとき」ブロックの下にくっつけましょう。


これで、クローンされたりんごが表示されるようになって、りんごが落ちてくるようになりました。

実行して修正されたことを確認しよう

では、最後に実行してみて、おかしかったところが修正されたことを確認しましょう。

もし、りんごが落ちてくる間隔が遅いと思ったら、「りんごを落とす間隔」を調整してみてください。

まとめ

お疲れ様でした!
これで「りんごをクローンして、たくさん落とすプログラム」は完成です。

今回は途中で失敗してしまったので、長くなってしまいました。記事を見るのが大変でしたよね…。すみません。

ただ、今回でりんごの基本的な動きは完成しました。

次回はこれまでほったらかしだった「ねこ」にプログラミングしていきます。

今回はプログラミングをしながら、「思った通りに動かなかったときに、どう考えて修正すればいいのか」についても解説しました。

プログラミングをしていて思い通りに動かないことはよくあります。そういう時でも、自分で解決方法を考えられるようになるために、今回の手順を参考にして、あきらめずに解決できるように頑張りましょう。

次の記事「基本編④」はこちら↓
基本編④ねこを動かしてりんごを拾えるようにしよう

りんごキャッチゲームを作ろうトップ記事はこちら↓
りんごキャッチゲームを作ろうトップ記事

おすすめ

Scratchでのプログラミング学習におすすめの書籍です。

Scratch

Posted by バババ