デジタルこどもBASEのロゴ 特定非営利活動法人デジタルこどもBASE 📚 目次
第78回 Lv3 ⏱ 20〜25分

ボールが端で跳ね返ろう

🎯 きょうのミッション

ボールが画面の端まで行ったら跳ね返るようにします。速度(dx・dy)の符号を反転するだけ。これがゲームの当たり判定の基本。

🧠 できるようになること

  • 速度ベクトルの考え方が使える
  • 条件で速度を反転して跳ね返りを表現できる
  • 簡単な物理シミュレーションが書ける

🧰 用意するもの

🖼 できあがり

ボールが画面の中で上下左右に跳ね返り続けます。永遠にバウンドする楽しい動き。

📺 実行結果
(ボールが画面内で四方に跳ね返り続けます)

🚀 やりかた

  1. x, y, dx, dy の4変数で位置と速度を管理。
  2. ループで x += dxy += dy
  3. if x > 250 or x < -250: dx = -dx で左右の跳ね返り。
  4. if y > 250 or y < -250: dy = -dy で上下も同様。
  5. ball.goto(x, y) で表示。

🐍 きょうのコード

Python main.py
import turtle

ball = turtle.Turtle()
ball.shape("circle")
ball.color("red")
ball.penup()

x, y = 0, 0
dx, dy = 5, 3

while True:
    x += dx
    y += dy
    if x > 250 or x < -250:
        dx = -dx
    if y > 250 or y < -250:
        dy = -dy
    ball.goto(x, y)
▶ Trinketを開いて動かす

上のコードをコピーして、Trinketの左のエリアに貼り付け、Runボタン(▶)を押すと動きます。

💡 きょうのポイント

「速度の符号を反転する」だけで跳ね返りが表現できます。これは現実の物理の反射と同じ考え方。簡単に物理が表現できるのがプログラミングの楽しさ。

🎮 チャレンジ

  • 速度を dx = 10 に上げて高速ボールに
  • 壁に当たるたびに色を変えよう
  • ボールを2つ作って同時に動かそう

🔁 ふりかえり

  • なぜ符号を反転すると跳ね返るように見える?
  • 実際のボールも同じ仕組み?(重力は無視している)
  • 次回はプレイヤー操作。何が変わる?

👨‍👩‍👧 おうちの人・先生へ

  • 準備:動きが速く見える場合は、dxdy の数字を小さくしてから試します。
  • つまずきポイント:速度と位置の混同。「位置 = 今いる場所」「速度 = 1回で動く量」と区別します。跳ね返りは dx = -dxdy = -dy で向きだけを反対にしています。
  • 声かけ例:「数字を変えると遊びやすさが変わる」と伝えると、調整もゲーム作りの一部だと分かります。