広告
Scratch(スクラッチ)を使って入門プログラムの定番、ブロック崩しを作っていきます。
ブロック崩しを通してたくさんのプログラムの組み合わせ方、キャラクターの移動方法、簡単な場面の切り替えなどを学んでいきます。
「Scratch(スクラッチ)でプログラミング入門」の応用編になりますので、まだ終えてない方はそちらを先にご覧ください。
りんごとボールの跳ね返りが単調なのでちょっと工夫してもう少しマトモに跳ね返してみたいと思います。
手順としてはボールがりんごのどこに当たっているのかをボールとりんごとの角度を調べる事によって特定
その位置によって
角度0らへんの時・・・x増加量のみ反転
角度45らへんの時・・・x,y増加量反転
角度90らへんの時・・・y増加量のみ反転
角度135らへんの時・・・x,y増加量反転
角度180らへんの時・・・x増加量のみ反転
角度225らへんの時・・・x,y増加量反転
角度270らへんの時・・・y増加量のみ反転
角度315らへんの時・・・x,y増加量反転
のように8パターンに分けて跳ね返りをするように変更します。
手始めにボールとりんごとの角度を調べるブロックを作っていきます。
ではどのようにりんごとボールの角度を調べるのか?という話なのですが、これには「atan(アークタンジェント)」というブロックを使えば2つの座標を入れるだけで簡単に角度を調べる事ができます。
調べられるのですがっ!
座標の場所によってはちょっとおかしな結果になるのでそのへんを考えつつ「atan」を使って2つの座標から角度を調べるブロックを自作していきます。
「ボールにふれたとき」にこのブロックを使ってお互いの角度を調べてどのへんに当たっているのかを特定します。
私はそこまで数学に詳しいわけではないのでだいぶ強引に作っていきますので、そのへんは目をつぶってください。
前段階としてまずは「atan(アークタンジェント)」を使って角度を調べてみます。
今までのプログラムと一緒に作るとごちゃごちゃしてわかりづらくなると思いますので練習がてら「新規作成」して作ってみたいと思います。
今までのプログラムを忘れずに保存してファイルメニューから「新規」を選択、空のプロジェクトを作成、ボールのスプライトを追加してネコちゃんの座標を表す「ネコx,ネコy」、ボールの座標を表す「ボールx,ボールy」という名前の変数をすべてのスプライト用で用意してください。
ではプログラミングしていきます。
「ずっと」を使って現在の「x,y座標」を先ほど用意した「ボールx,ボールy」に保存します。
これで他のスプライトからもボールの座標が「ボールx,ボールy」を通して確認できるようになります。
ネコちゃんも同じように座標を変数に保存した上で「atan」の登場です。(atanは演算ブロックの一番下「~の絶対値」ブロックの中にあります!)
(ネコy - ボールy) / (ネコx - ボールx)のatan
計算記号、計算順序などを間違えないようにブロックを作ってください。
これでひとまずネコちゃんから見たボールの角度を調べるプログラムが出来上がりました!
それではプログラムを実行して「0度」から反時計回りにボールを動かして角度を確認してみます。
右真横が「0度」になります。
そのまま反時計回りに動かして・・・、
「30.11度」
「45度」
「59.89度」
「89.43度」
このあたりまでは問題なく角度を調べる事ができます。
問題はここからです。
続けて反時計回りに動かします。
「-90度」
角度がマイナスに入ってしまいました。
さらに続けてみます。
「-45度」
「-0.57度」
どうやら-90度→0度に向かってるようです。
左真横の時点でまた「0」に戻ってきてしまいました!
さらに調べてみます。
「0.57度」
「45度」
今度はまた「0度→90度」に向けて進んでいくようです。
まとめると
「0度~89度の場所」・・・問題なし
「90度~179度の場所」・・・-90~-1
「180度~269度の場所」・・・0~89
「270度~359度の場所」・・・-90~-1
のように角度が変化しているのが確認できるかと思います。
バラバラなようで規則性がありますね。
という事は!
この結果に少し手を加えれば期待する数字になりそうです。
「0度~89度の場所」・・・変わらず
「90度の場所」・・・90にする
「91度~179度の場所」・・・180を足す
「180度の場所」・・180にする
「181度~269度の場所」・・・180を足す
「270度の場所」・・270にする
「270度~359度の場所」・・・360を足す
ざっとこんな感じですかね。
場所はお互いの座標の位置関係によって割り出します。
ではプログラミングしてみましょう。
今度は新規作成ではなく前回までの続きに加えていきます。
角度を入れる為の変数「角度」をすべてのスプライト用で用意してください。
そして「りんご」にプログラムを加えていきます。
ブロックを作るメニューからブロック作成画面に移動、次の内容でブロックを作ってください。
名前は「atan2」にしてみました。
「x1,x2,y1,y2」には調べたい2つのスプライトの「x,y座標」が入ります。
角度を調べてその結果を変数「角度」に保存します。
では内容です。
「atan」でひとまずの角度を調べてあとはお互いの座標の位置関係によって相手のスプライトがどのあたりにいるのかを調べてさきほどまとめた修正部分を加えます。
前半部分です。
ちょっと長いのであとはプログラム全体をご覧ください。
りんごのプログラムに加えるカタチで作ってください。
今回はこのあたりで次回はこのブロックを実際に組み込んでいきます。
広告
Copyright 2016 K.N/petitetech.com