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

当たり判定を作ろう

🎯 きょうのミッション

プレイヤーとボールが接触しているかを判定します。distance メソッドで2つの亀の距離を一発計算。距離が一定以下なら「当たった!」。

🧠 できるようになること

  • distance で2点の距離が計算できる
  • 条件分岐で当たり判定が書ける
  • ゲームのコア機能の1つを完成させる

🧰 用意するもの

🖼 できあがり

プレイヤーをボールに近づけると「💥 当たった!」と表示されます。

📺 実行結果
(プレイヤーがボールに触れると💥 当たった!が表示されます)

🚀 やりかた

  1. プレイヤーとボールを別々に作る。
  2. 矢印キー操作で player を動かす。
  3. while True で player.distance(ball) を計測。
  4. 距離が30以下なら print("💥 当たった!") + break。

🐍 きょうのコード

Python main.py
import turtle

screen = turtle.Screen()

ball = turtle.Turtle()
ball.shape("circle")
ball.color("red")
ball.penup()
ball.goto(100, 0)

player = turtle.Turtle()
player.shape("square")
player.color("blue")
player.penup()

def go_up(): player.sety(player.ycor() + 10)
def go_down(): player.sety(player.ycor() - 10)
def go_left(): player.setx(player.xcor() - 10)
def go_right(): player.setx(player.xcor() + 10)

screen.onkey(go_up, "Up")
screen.onkey(go_down, "Down")
screen.onkey(go_left, "Left")
screen.onkey(go_right, "Right")
screen.listen()

while True:
    if player.distance(ball) < 30:
        print("💥 当たった!")
        break
    screen.update()
▶ Trinketを開いて動かす

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

💡 きょうのポイント

player.distance(ball)2つの亀の距離がピクセル単位で計算されます。「30以下」を「当たった」と決めます。これがすべてのゲームの当たり判定の基本。

🎮 チャレンジ

  • ボールも自動で動くようにしよう(避ける必要が出る)
  • ボールが3個あって、どれかに触れたらアウトに
  • 「当たった!」の代わりに別のアクション(色変化など)

🔁 ふりかえり

  • distance がない世界で当たり判定はどう書く?
  • 「30以下」の30はどうやって決める?
  • 次回は本格ゲーム。当たり判定をどう使う?

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

  • 準備:キー操作があるため、キャンバスをクリックしてから動作確認します。
  • つまずきポイント:当たり判定の数字が小さすぎると当たりにくく、大きすぎると離れていても当たります。302050 に変えて、判定の広さを体感します。
  • 声かけ例:「当たり判定は正解が1つではなく、遊びやすい数字を探すもの」と伝えると、調整の意味が分かります。