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

避けゲームにスコアを入れよう

🎯 きょうのミッション

避けゲームにスコア機能を追加します。敵が画面下に到達するたびに+1。スコアは画面上に write で表示。

🧠 できるようになること

  • turtle.write で画面に文字を書ける
  • スコアを更新表示するパターンが書ける
  • ゲームの完成度がぐっと上がる

🧰 用意するもの

  • パソコン
  • ブラウザ(Chrome / Edge / Safari)
  • インターネット接続
  • このページの「▶ このページで実行」ボタン(絵もゲームもそのまま動きます)
  • Trinket(予備の実行サイト:https://trinket.io/python)

🖼 できあがり

避けゲームの画面上部に「スコア:N」が表示され、敵を避けるたびに数字が増えていきます。

📺 実行結果
(画面上にスコア表示のあるゲーム画面)

🚀 やりかた

  1. scorer = turtle.Turtle() でスコア表示用の亀を作る。
  2. scorer.hideturtle() で見た目を消す。
  3. scorer.goto(-280, 250) で位置設定。
  4. 敵が下まで行くたび score += 1。
  5. scorer.clear() + scorer.write(...) で更新表示。

🐍 きょうのコード

Python main.py
import turtle
import random

screen = turtle.Screen()
screen.bgcolor("black")
screen.setup(600, 600)
screen.tracer(0)

player = turtle.Turtle()
player.shape("square")
player.color("cyan")
player.penup()
player.goto(0, -200)

enemy = turtle.Turtle()
enemy.shape("circle")
enemy.color("red")
enemy.penup()
enemy.goto(random.randint(-200, 200), 200)

scorer = turtle.Turtle()
scorer.color("white")
scorer.hideturtle()
scorer.penup()
scorer.goto(-280, 250)

score = 0

def go_left(): player.setx(max(-275, player.xcor() - 25))
def go_right(): player.setx(min(275, player.xcor() + 25))
screen.onkey(go_left, "Left")
screen.onkey(go_right, "Right")
screen.listen()

def game_loop():
    global score
    enemy.sety(enemy.ycor() - 6)
    if enemy.ycor() < -250:
        enemy.goto(random.randint(-200, 200), 200)
        score += 1
        scorer.clear()
        scorer.write(f"スコア:{score}", font=("Arial", 18, "bold"))
    if player.distance(enemy) < 25:
        scorer.goto(0, 0)
        scorer.write(f"💥 ゲームオーバー!スコア:{score}", align="center", font=("Arial", 22, "bold"))
        screen.update()
        return
    screen.update()
    screen.ontimer(game_loop, 20)

game_loop()
▶ Trinketを開いて動かす

このページの「▶ このページで実行」でそのまま動きます。キー操作のゲームは、絵をクリックしてからキーを押してね。Trinketを使うときは、上のコードをコピーして貼り付けます。

💡 きょうのポイント

turtle.write は画面に文字を描画する命令。clearで消してから書き直すのが、スコア更新の定番パターン。

update() と ontimer(game_loop, 20) で1秒あたり約50回の更新を目安にします。速さを変える実験では、一度にどちらか片方だけを変えましょう。

🎮 チャレンジ

  • ハイスコアも表示しよう
  • 5点ごとに敵のスピードを上げよう
  • ゲームオーバーのときに「もう一度?」と聞こう

🔁 ふりかえり

  • スコア表示があると、ゲームの楽しさはどう変わる?
  • clear+write のパターンの仕組みは?
  • 次回はブロック崩しに挑戦

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

  • 準備:キー操作があるため、キャンバスをクリックしてからプレイします。
  • つまずきポイント:scorer.clear() を忘れると数字が重なります。スコア表示は「消す→書く」の順番で更新すると覚えると安定します。
  • 声かけ例:「スコアがあると、もう一度遊びたくなる」と伝え、遊びやすさを上げる仕組みとして見せます。