Scratchのピンポンゲーム(前回の記事でリミックスした)に、ボールを高速に打ち返すスマッシュ機能と、ボールに回転を与えてカーブをかける機能を追加します。ボール回転速度に合わせて、ボールが回転するアニメーションも追加しました。カーブボールの軌道は二次関数を使用しており、数学の応用についても学ぶことが出来ます。
今回作成するプロジェクト
プロジェクトはScratchホームページで公開していますので、プログラム全体はそちらのページでご確認下さい。主要部分について、以降説明します。
スマッシュ機能
機能の詳細説明
① ふくらみキー を押したときに、ボールとパドル(ovalコスチューム)が重なった状態であれば、ボールの速度を1歩増しにする。
② 相手がスマッシュせずに スマッシュボールを跳ね返した場合、ボールの速度は維持する。
③ 相手がスマッシュでスマッシュボールを跳ね返した場合、さらにボールの速度は1歩増しになる。
変数/イベント
スマッシュボールの速度増加 : delta V(ボールスプライトのみの変数)
Paddle1がコスチューム1から2へ変わるときのイベント : Paddle1のスマッシュトリガー
Paddle2がコスチューム1から2へ変わるときのイベント : Paddle2のスマッシュトリガー
プログラム
■パドルのコード
「ふくらみキーを押したときに、ボールとパドルが重なっている場合」というのは、ふくらみキーが押されたときに、コスチュームが「line(コスチューム番号1)」かどうかということを調べると、判断することが出来ます。判断した結果、真ならばメッセージ「Paddle1(またはPaddle2)のスマッシュトリガー」を送ります。
■ボールのコード
パドルから「Paddle1(またはPaddle2)のスマッシュトリガー」を受け取ったとき、もし ボールが パドルと触れていれば、deltaVの値を+1します。そして、このdeltaVは、ボールを動かしているコードに加算します 「hits/5+2+deltaV」 。
ボールを跳ね返すことが出来ずにゴールした場合は、ボールの速度をもとに戻す必要があります。これを「ゴール後の再開処理」としてブロック定義し、deltaVを0にします。
カーブボール機能
機能の詳細説明
①ボールの回転速度を追加する。時計回りがプラス、逆時計回りがマイナスとする。
②ボールがカーブする度合いは、ボールの回転速度に比例する。
③ボールがパドルで跳ね返されるときのボールの回転速度は、ボールとパドルが触れる瞬間のボールの回転速度と、パドルの移動速度の差分で更新される。
④ボールの回転速度に合わせて、ボールのコスチュームを回転させる。
⑤ボールの回転速度に合わせて、ボールの色を変える。
変数
ボールの回転速度 : vw (ボールスプライトのみの変数)
ボールがカーブする度合い : curve (ボールスプライトのみ)
パドル1の移動速度 : p1-vx (vxから名前を変える。すべてのスプライトの変数。)
パドル2の移動速度 : p2-vx (vxから名前を変える。すべてのスプライトの変数。)
プログラム
■ボールのプログラム
【ボールの回転速度】
ボールの回転速度は、現在のボールの回転速度と接触するパドルの速度の差分とします。ボールの回転速度は、時計回りを正、逆時計回りを負とします。例えば、プレイヤー1のパドル(青色)が右方向に移動しているときにボールと接触すると、逆時計回りにボールを回転させたいので、「回転速度vwを(vw – p1-vx)」にします。プレイヤー2のパドル(赤色) が右方向に移動しているときにボールと接触すると、時計回りにボールを回転させたいので、「回転速度vwを(p1-vx – vw)」にします。
ボールの回転速度に上限と下限を設けないと、とんでもない数字になってしまいます。これを防ぐために、ブロック定義内で、「もし~なら」の文を使用して、vwが-60から+60の範囲内に収まるようにしています。
【ボールのカーブ度合い】
ボールがカーブする度合いは、二次関数で計算します。中学校の数学でよく見る式はy=x^2ですが、今回はボールが相手に近づくに連れて、ボールがカーブする度合いを変えたいので、x=y^2の形になります。ただし、ボールとパドルが接触するのは、y座標が-120と+120のときです。この式だと、接触した瞬間にボールのx座標が一気に移動してしまいます。接触した瞬間は移動させたくないため、x=(y + ボールとパドルが接触するy座標)^2となります。ボールの回転度合いをボールの回転速度に比例させたいので、右辺にvwを掛け算します。あとは、実際にプログラムを動かしてみて、移動度合いを確認しながら、さらに定数を掛け算します。下記のプログラムでは0.000005を掛け算しています。この値を変数curveに入れて、「x座標をcurveずつ変える」とします。

■ボールの見た目
ボールが回転している状態をアニメーションで表します。現在使用しているコスチュームを複製して、ボールを少し回転させたものを作成します。これを8種類作成しました(360度/8=45度ずつ時計回りに回転させたコスチューム)。vwが負のときは、反時計回りにボールを回転させたいので、「コスチュームをコスチュームの番号+(-1)にする」とします。同様に、vwが正のときは、時計回りにボールを回転させたいので、「コスチュームをコスチュームの番号+1にする」とします。コスチュームの変更スピードをボールの回転速度vwに応じて変更したいため、「(0.5/vw)秒待つ」を入れます。また、 ボールの回転速度vwに応じて ボールの色も変更したいので、「色の効果をvwにする」も入れます。

コメントを残す