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

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

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

myway@おじさんです。
前回の続きで、「Paddle」で「Ball」をはね返すスクリプトを作ります。

注意点として、角度の計算をしますので、角度がわからない人は難しいと思いますが、勉強してみても良いかも知れません。


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

1.準備

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

2.「はね返す」には?

Scratchには、「スプライトに当ったらはね返える」ブロックはありません。
(「はしにあたったらはねかえる」ブロックはありますが)
よって、その部分をスクリプトで作る必要があります。
いつも通り、そのままスクリプトを出してもいいのですが、少し、考えてみます。

まず、「Ball」が「Paddle」にあたったら、どのようなうごきをするのかを考えてみます。例えば、

f:id:mywayhaojisan:20170709153722p:plain

f:id:mywayhaojisan:20170709153744p:plain
といった動きになると思います。

ようは、「Paddle」にあたった時の角度によって、移動する向きが変わるという事です。
では、どうするのかというと、この角度は計算で出す事ができます。

では、下の画像で考えてみます。

f:id:mywayhaojisan:20170709153844p:plain
左から右へ移動する場合です。
例えば、1の「Ball」の向きが「135」だった場合、「Paddle」に当って跳ね返った2の「Ball」の向きは「45」となります。
他の例として、1の「Ball」の向きが、「110」だった場合、「Paddle」に当って跳ね返った2の「Ball」の向きは「70」となります。
(なぜそうなるかは、とても難しくなるので、省略します。)

ここで、ある法則がある事に何か気づきますか?

1の「Ball」の角度と、「Paddle」に当ったあとの2の「Ball」の角度を足すと「180」になるという法則です。
式で表すと、
「135+45=180」
となります。

では、逆の右から左も考えてみましょう。

f:id:mywayhaojisan:20170709153819p:plain
「Paddle」に当たる前の1の「Ball」向きが「225」だった場合、「Paddle」に当ったあとの2の「Ball」の向きは「315」になります。

この場合の式で表すと
「225+315=540」
ここから、この式を変換します。
角度は、「360ど」と「0ど」は同じ角度ですので、下の式のように変換できます。
「225+315=360+180」
これだと、わかりにくいので、「=」の右と左、それぞれ360を引いてみます。
「(225+315)-360=360+180-360」
→「(540)-360=180」
→「180=180」
→「135+45=180」
見覚えのある式になりました。

ただし、このままでは、プログラムとしてスクリプトには書けません。

3.スクリプトに書けるようにする

では、スクリプトに書けるようにするにはどうすれば良いか考えます。

プログラム全般に言える事ですが、「答え」が「=」の右にくるように式を考えないといけません。

上では、
「135+45=180」
という式を書きましたが、「=」の右は「180」となっています。

この「180」は「答え」でしょうか?
プログラムとしては「いいえ」となります。

今、知りたい答えは「45」が知りたい答えです。
なので、式を変換して、答えが「45」になる式を考えないといけません。

では、変換してみます。
「135+45=180」
から、「=」の右と左、それぞれ「135」を引きます。
「135+45-135=180-135」
→「45=180-135」
「=」の右と左の値を入れ替えます。
「180-135=45」
これで変換ができました。
ちなみに、変換方法は「一次方程式(いちじほうていしき)」をつかって変換しています。
知らない人は、一度調べてみてください。

4.スクリプトを書いてみる

では、スクリプトは下のようになります。

f:id:mywayhaojisan:20170709154055p:plain
ずっとブロックの中に「もしPaddleにふれたなら」ブロックを追加しています。
それと、「もしPaddleにふれたなら」ブロックの中には、先ほど考えた式を入れて、向きを変えています。

では、緑のはたをクリックしてうごかしてみましょう。
「Ball」が「Paddle」に当ったらはね返えると思います。

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

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

youtu.be


実は、今回のスクリプトは完成ではありません。
動かしているうちにわかると思いますが、「Paddle」に当たる場所によって、「Ball」が「Paddle」の中を移動してしまいます。
次回は、その原因と対応方法について書きたいとおもいます。


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

<<壁打ち(1回目) 壁打ち(3回目)>>