mywayなプログラミング生活ブログ

プログラミング関連の記事を書いています。作る様子がわかる様に動画も作っています。

Scratch2(スクラッチ2)で壁打ちゲームを作ろう(6回目)

myway@おじさんです。

前回の続きで、ボールが当ったとき、はね返える向きを変える内容について説明したいと思います。


動作環境について
OS:MAC OS X(Windowsでも操作はほとんど変わりません)
エディタ:Scratch offline editor(ver.456)

1.準備

前回保存したプロジェクトを開いて下さい。
画面右上の「ファイル」をクリックしてから、「ひらく」をクリックして、プロジェクトを開いて下さい。

2.どこから当ったのか?

まずは、「Apple」に「Ball」が、どの方向から当ったのかを調べる必要があります。

では、どのようにして調べるのか?

それは、「Ball」が「Apple」に当った時、「Ball」から見て「Apple」がどの方向にあるかを調べることでわかります。

「もしAppleにふれたなら」ブロックと、「向き」ブロックを使えばできそうです。

下の図を見てください。

f:id:mywayhaojisan:20170805181250p:plain
Apple」は丸に近い形をしていますので、わかりやすくするために、緑の線で書いています。
この緑の四角の中に、「Ball」が入ってきたらはね返えるスクリプトを動かすとイメージしてください。

次に、青い線ですが、どの方向から当ったかを判断する線として見てください。

例えば、「Ball」が1の方向から当ったら、上にはね返り、2の方向から当ったら右へはね返ります。

ここで思い出して欲しいのですが、前回、前々回で書いた、「横のはね返り」と「縦のはね返り」です。

1または3の方向から当った場合は、「横のはね返り」
2または4の方向から当った場合は、「縦のはね返り」

をすれば良い、という事になります。

上の内容をふまえて、スクリプトを作ります。

3.「Ball」のスクリプト

「Ball」のスクリプトです。

f:id:mywayhaojisan:20170805181335p:plain
変更したのは2点です。
(1)へんすう「Ballのむき」を追加
(2)「もしAppleにふれた=0」ブロックの中のスクリプトを変更

(1)に関しては、そのままですが、(2)に関して、もう少し説明します。

・「Ballのむきをむきにする」ブロック
このブロックは、はね返える前の「Ball」のむきをへんすうに保存しています。
・「Appleへむける」ブロック
このブロックは、「Apple」から見て「Ball」がどこに当ったかを判断するため、一時的に「Apple」に方向を向けています。
・「もしむき>45かつむき<136またはむき>-136かつむき<-45」ブロック
このブロックで、「Ball」がはね返える向きを判定しています。
ここで、再度、図を見てください。

f:id:mywayhaojisan:20170805181250p:plain
「むき>45かつむき<136」が「図の4」の範囲、「むき>-136かつむき<-45」が「図の2」の範囲になるのがわかりますか?

4.計算してみる

下の図を見てください。

f:id:mywayhaojisan:20170805181437p:plain
例えば、こういう動きだった場合を考えます。
図に角度を書いてみます。

f:id:mywayhaojisan:20170805181502p:plain
1は、「45ど」で「Apple」に当たります。
2で、「Ball」を「Apple」へむかせます。真横に当ったので「90ど」となります。
「90ど」で当ったので、「360-むき」ブロックが動きます。
向きの計算は、「360-45=315」となります。
ちなみに「315ど」は「-45ど」と同じむきです。
(Scratchでは、むきの変換を自動で行ってくれるので、計算した値をそのまま使えます。)
3は、はね返った後です。

このように、スクリプトに実際の値を当てはめてみると、正しいか、まちがっているかがわかりやすくなります。

余談ですが、今回のスクリプトを使えば、モンスタースト○イクみたいなゲームが作れるかも知れません。


今回はここまでです。
作ったら、必ず、「ほぞん」をするように心がけて下さい。

それと、今回も動画がありますので、よければ、参考にしていただければと思います。

youtu.be



次回は、リンゴだけでなく、オレンジやバナナなど、他の障害物を置いてみたいとおもいます。



最後まで読んで頂いてありがとうございます。
皆さんに少しでもお役に立てれば幸いです。

<<壁打ち(5回目) 壁打ち(7回目)>>