2016.06.20Scratch で始める小学生からのプログラミング
小学生がスクラッチでシューティングゲームを作る8のステップ:自分と敵の当たり判定をつくる
みなさま。こんにちは。Scratchで始める小学生からのプログラミングの記事の中で、ゲーム作成の記事を書いております。前回まででネコと敵のヘリコプターの動きを作ってきました。今回の記事では、敵にたまがあたった時の動きや、ネコが敵にあたった時の動きなどを追加して一通り作り上げましょう。
ステップ7:たまに当たった時の動作を作る
ネコから発射されたたまが、ヘリコプターに命中したときの動きを作っていきたいと思います。たまに当たった時は、ヘリコプターが壊れて消えるようにしたいです。また、その後、敵がいなくなってしまうと面白く無いので、新たな敵を作りだすようにしたいです。次のように作ります。
まず壊れる条件ですが、「たまがヘリコプターに当たる」です。これを判定するためには、調べるのカテゴリにある、「○○に触れた」というブロックを使います。このブロックの選択肢の中から「たま」を選んでください。そして、たまがあたった時のアクションを書きます。たまが当たったら、音を出して消すことにします。音は、音のライブラリの中から選んでください。例では、「alien creak2」という音を選びました。そして、新たな敵を作るですが、もう一度画面右端からヘリコプターに登場してもらうようにします。通常の処理では、左端にいったあとは、再び右端から出現するようになっているので、強制的に左端に飛ばしてしまい、再度通常の流れで右から出現させるようにします。
ずっと繰り返す
たまに触れるまでまつ
たまに触れたら、音出す
隠す
ヘリコプターのy座標を-240にする(強制的に左端に飛ばす)
となるでしょうか。これで想定通りの挙動はするのですが、敵を倒したときに、スコアをアップさせたいので、これにさらに追加します。
ずっと繰り返す
たまに触れるまでまつ
たまに触れたら、スコアを1たす
音出す
隠す
ヘリコプターのy座標を-240にする(強制的に左端に飛ばす)
これをブロックで書くと次の図のようになります。
ステップ8:敵の攻撃を作る
さて、敵の攻撃を作ります。敵の攻撃は、同じようにたまを撃ってくるようにしたいと思います。すでに、ネコのたまを作っているので、それと同じようにして作ることになります。まず、「たま」をコピーして「敵のたま」を作ります。コピーするためには、図に示すようにコピーしたい対象のスプライトを選び、右クリックします。すると、メニューが表示され、複製という項目が出てきますのでそちらを選択します。すると右の図に示すように同じ図のスプライトが出現します。名称を敵のたまに変更しておきます。(図は名称変更後の図)
次に、敵のたまの動きを幾つか変更する必要があります。
- 出現する条件
ネコのほうはスペースキーをおした時でした。敵は自動的に発射して欲しいので、この条件を変えます。ランダムにある一定時間が来たら発射するようにするため、乱数をつかって1秒から5秒の間で発射するように変更します。 - 発射する位置
ネコのたまは、ネコから発射されますが、ヘリコプターのたまは、ヘリコプターの方から発射したいです。そのため、ネコと同じように座標位置をつかって玉の位置を変更します。ネコとたまの速度が同じだと難易度が少々高いので、左端に到達する時間を1秒から5秒に変えます。 - ネコがやられる条件
ネコがたまに当たったら、ヘリコプターと同じように倒されるようにします。たまがあたった時点で、ゲームオーバーということになります。また、よくあるシューティングゲームだと、敵本体にあたった時も同じように倒されることが多いので、敵のたまか敵本体のどちらかにあたったときとします。
では、1つずつ見ていきましょう。まず出現条件ですが、ヘリコプターのプログラムにおいて、次のように実現します。
図の左がヘリコプターのほうのプログラム、右がたまの方のプログラムです。ヘリコプター側で、「たま発射」というメッセージを送信して、それに合わせてたまが発射されるという仕組みにしました。位置は、ネコと同じような形でヘリコプターの座標の値を取得して移動しています。これで動かしてみるとどうでしょうか?
一見、動いたように見えるのですが、たまが飛んでいる途中でヘリコプターからもう1発たまが発射されます。そのときに飛んでいたたまが消えて、ヘリコプターのところに戻ってしまいます。これでは、少々問題なので、たまが複数個出るようにしたいです。どうしたらよいでしょうか?
これは、今まで解説してきていない要素なのですが、スクラッチでは「クローン」という機能があります。これは同じ処理をする別のものを作って使うという機能です。まさに今のような場合に適しています。このクローンをつかって、プログラムを次のように変えてみましょう。
メッセージを受けたときにクローンを作ります。そして、クローンができた時の動作として、たまが右から左に飛んで行く動きを書きます。最後まで終わった時点でこのクローンを消します。これを忘れるとクローンが大量に発生してしまい、動きが遅くなるので削除を忘れないで下さい。
以上の修正を入れるとどうでしょうか。想定通り、ヘリコプターからたまが出てくるようになったと思います。最後にネコがやられてゲームオーバーになる部分を作ります。これで重要なのは、ネコがやられる条件を式で書くことです。ヘリコプターの場合は、たまに触れたとき、としていたので、ねこの場合も次の条件のどちらかが成り立つときになります。
「敵の弾に触れたとき」
「ヘリコプターに触れたとき」
前回の記事では、両方が同時に成り立つときを扱ったのですが、今回はどちらか片方が成り立てばいい時です。そういうときに使うのが、「○ “または” ○」です。「または」は、「かつ」とはちがい、どちらか片方でも成り立てば条件を満たすということを示しています。これをつかって、プログラムを書いてみましょう。
この図のように、やられる条件を「または」をつかって書きます。これで動作させてみますと、たまに当たった場合、敵にあたった場合と両方で同じ動きをするはずです。以上で、一応一通りのゲームが完成しました。
まとめ
3回に渡って書いてきましたが、ネコのシューティングゲーム「ネコディウス」が動くようになりました。条件文やクローンなど紹介していない内容も入っていますので、できるプログラムの幅が広がったのではないでしょうか。
この内容をさらにグレードアップさせると、よりハイレベルなゲームになっていくのですが、この部分は読まれているみなさまにまずはお任せします。グレードアップさせるためのアイディアを皆さんで考えてみてもいいかもしれません。
違う題材でまた記事を追加したいと思います。なにかご要望などあればコメントやお問い合わせからご意見をいただければ幸いです。それでは。
東京都文京区小石川で小学生、中学生、高校生を対象としたプログラミング&ロボット教室を開校しています。スクラッチはジュニアコースで受講できます。創造性や協調作業などこれからの時代に必要となる素養を育てるコースです。ご興味ありましたらぜひお問い合わせください。
また、夏休みの企画として、サマースクールを実施します。ここで取り上げているスクラッチやロボットプログラミングを体験できる内容となっています。詳細はこちらでご確認ください。ご参加お待ちしております。
お問い合わせはこちら!
]]>