宇宙ゴミを回収せよ!(ワークショップ:上級編)

中級

今回つくるゲーム

難易度3 out of 5 stars

今回のゲームは宇宙空間で次々と飛んでくるゴミをプレイヤーを操作して岩を避けながらキャッチしていくゲームです。3D空間をどのように考えるかや、リストを活用したスコア計算など、スクラッチ上級者への1歩になるゲームです。是非チャレンジしてください。
イベントやプログラミング用室・学校・サークルなどのワークショップでも活用してもらえるとうれしいです。


まずはゲームをプレイしてみましょう。

素材をつくる

まずはゲームに使う素材をつくります。今回つくる素材は「プレイヤー」、「ゴミ」、「宇宙空間」の3種類です。
それぞれのスプライトを作成し、コスチュームを描いていきます。

素材を一からつくるのが大変だという人は、以下のプロジェクトをリミックスするかコピー、ダウンロードして使ってください。時間の限られたワークショップなどでは、はじめから素材が用意されている状態ではじめると良いでしょう。
宇宙ゴミを回収せよ!(素材)

宇宙ゴミを回収せよ!(ワークショップ:上級編)

プレイヤーについては好きなキャラクターのコスチュームを1つ用意しましょう。ゴミは今回は、6種類のゴミと岩、合計7つのコスチュームを用意しました。

宇宙ゴミを回収せよ!(ワークショップ:上級編)
宇宙ゴミを回収せよ!(ワークショップ:上級編)

宇宙空間は一見コスチュームは何もないように見えますが下右図のように後ろ側に色を引くと白い粒がたくさんあるのがわかります。(描く時には端の方にかためておくのがおすすめです。)

宇宙ゴミを回収せよ!(ワークショップ:上級編)
宇宙ゴミを回収せよ!(ワークショップ:上級編)

プレイヤーを動かせるようにしよう

まずは、プレイヤーを動かせるようにします。以下のようにプレイヤーのスプライトにコードを書きましょう。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

これでマウスの方にプレイヤーが動くようになりました。

ゴミや岩が奥から飛んでくるようにしよう

では、次にゴミや岩が宇宙の奥から飛んでくるようにします。ゴミのスプライトにに以下のようにコードを書きましょう。

近づく速さの変数を作るときには、「このスプライトのみ」にチェックを入れるようにします。ひとつひとつのクローンの近づく速さを管理するためです。これも上級の領域ですね!

宇宙ゴミを回収せよ!(ワークショップ:上級編)
宇宙ゴミを回収せよ!(ワークショップ:上級編)

旗を押してみましょう。次々と岩が手前に向かって飛んできているように見えますね。
0.5秒ごとにクローンが作られて、画面の中央から、だんだん大きくなりながら近づいてきます。また、近づくにつれてスピードが速くなります。

3D空間では遠くにあるものは小さく、スピードも遅く感じます。そして近づけば近づくほど大きくなり、スピードも速くなります。これでなんちゃって3Dゲームができてしまいます。

次に、よりランダムに迫ってくるように、クローンを作る間隔と、スタート位置をランダムにします。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

これで旗を押してみてください。ランダムにすると、クオリティがあがりますね!

ゴミと岩を半々の確率で出すようにする

ここまでは岩だけが飛んできましたが、ここからはゴミと岩が半々の確率で出すようにしましょう。岩のコスチュームを増やして、乱数を使うことによって半々で出すこともできますが、ここは上級なのでもうすこしスマートな方法でコードを書いていきます。

クローンされた時のコードに以下のように追加します。「ゴミか岩か」という変数を作り、それを1〜2の乱数にして、1ならゴミ、2なら岩というようにします。岩を増やしたければたとえば1〜3の乱数にすると、岩が出てくる確率は2/3になります。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

ゴミのキャッチと岩にぶつかる判定をしよう

つぎに飛んでくるゴミをキャッチしたり、岩にぶつかったりする、という判定を作っていきます。
ただ触れただけだとすごく遠くにいる状態のゴミに触れてもキャッチしてしまうことになるので、触れた時に大きさが100より大きいという条件を入れるようにしましょう。

コードが長くなりすぎる時は定義を使って、その部分を外に書くとコードがわかりやすくなります!

宇宙ゴミを回収せよ!(ワークショップ:上級編)

得点を計算する

次に得点の計算です。今回は、以下のようにキャッチしたときの得点を決めたいと思います。

ビニール  5点
スナック袋 5点
カップ麺  5点
生ごみ   5点
ロボット  10点
ロケット  20点
岩     -5点

そのためには、どういうコードを書くでしょうか?みなさんはこんなコードを想像するのではないでしょうか?

宇宙ゴミを回収せよ!(ワークショップ:上級編)

もちろんこれでも間違いではありません、しかしもっとスマートなコードの書き方があります。それはリストを使ったスコアの計算です。以下のように「得点リスト」というリストを作成します。そしてそれぞれのコスチューム番号に応じた得点をリストに記載します。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

そうすることで先程のコードはこのようにスマートになります。
これができれば、もう上級者の仲間入りです。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

旗が押されたときにスコアを0に戻しておくのも忘れないようにしましょう

宇宙ゴミを回収せよ!(ワークショップ:上級編)

ゴミのスプライトのすべてのコードはこのようになります。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

宇宙空間を作る

これでほぼゲームは完成なのですが、さらに完成度をあげるために岩やゴミだけでなく、白い光が飛んでくることによって宇宙空間の感じを演出していきます。宇宙空間のスプライトに以下のコードを書いてください。

宇宙ゴミを回収せよ!(ワークショップ:上級編)

制限時間とBGM

制限時間とBGMのコードはステージ(背景)のコードに書くようにしましょう。これは上級を目指している人にとっては簡単ですね!

宇宙ゴミを回収せよ!(ワークショップ:上級編)

すべてのコード

これで完成です。おつかれさまでした!このくらいのコードで3Dゲームがつくれるからおもしろいですよね。ぜひ今回作ったコードを参考にしてオリジナルの3Dゲームを作ってみてください。

完成コードはこちらから確認できます。

宇宙ゴミを回収せよ!

コメント