• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Scratch / Scratch リミックスで学ぶ:ピンポンゲームにスマッシュ機能・カーブボール機能を追加

Scratch リミックスで学ぶ:ピンポンゲームにスマッシュ機能・カーブボール機能を追加

2020年2月1日 by STEMSHIP コメントを書く

Scratchのピンポンゲーム(前回の記事でリミックスした)に、ボールを高速に打ち返すスマッシュ機能と、ボールに回転を与えてカーブをかける機能を追加します。ボール回転速度に合わせて、ボールが回転するアニメーションも追加しました。カーブボールの軌道は二次関数を使用しており、数学の応用についても学ぶことが出来ます。

今回作成するプロジェクト

プロジェクトはScratchホームページで公開していますので、プログラム全体はそちらのページでご確認下さい。主要部分について、以降説明します。

スマッシュ機能

機能の詳細説明

① ふくらみキー を押したときに、ボールとパドル(ovalコスチューム)が重なった状態であれば、ボールの速度を1歩増しにする。
② 相手がスマッシュせずに スマッシュボールを跳ね返した場合、ボールの速度は維持する。
③ 相手がスマッシュでスマッシュボールを跳ね返した場合、さらにボールの速度は1歩増しになる。

変数/イベント

スマッシュボールの速度増加 : delta V(ボールスプライトのみの変数)
Paddle1がコスチューム1から2へ変わるときのイベント : Paddle1のスマッシュトリガー
Paddle2がコスチューム1から2へ変わるときのイベント : Paddle2のスマッシュトリガー

プログラム

■パドルのコード
「ふくらみキーを押したときに、ボールとパドルが重なっている場合」というのは、ふくらみキーが押されたときに、コスチュームが「line(コスチューム番号1)」かどうかということを調べると、判断することが出来ます。判断した結果、真ならばメッセージ「Paddle1(またはPaddle2)のスマッシュトリガー」を送ります。

Paddle1とPaddle2のコード

■ボールのコード
 パドルから「Paddle1(またはPaddle2)のスマッシュトリガー」を受け取ったとき、もし ボールが パドルと触れていれば、deltaVの値を+1します。そして、このdeltaVは、ボールを動かしているコードに加算します 「hits/5+2+deltaV」 。
 ボールを跳ね返すことが出来ずにゴールした場合は、ボールの速度をもとに戻す必要があります。これを「ゴール後の再開処理」としてブロック定義し、deltaVを0にします。

Ballのコード

カーブボール機能

機能の詳細説明

①ボールの回転速度を追加する。時計回りがプラス、逆時計回りがマイナスとする。
②ボールがカーブする度合いは、ボールの回転速度に比例する。
③ボールがパドルで跳ね返されるときのボールの回転速度は、ボールとパドルが触れる瞬間のボールの回転速度と、パドルの移動速度の差分で更新される。
④ボールの回転速度に合わせて、ボールのコスチュームを回転させる。
⑤ボールの回転速度に合わせて、ボールの色を変える。

変数

ボールの回転速度 : 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ずつ変える」とします。

Ballのカーブボールのコード

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

Ballのアニメーションのコード

Filed Under: Scratch 関連タグ:アニメーション, ピンポン, ブロック定義

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM