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

かんたんブロック崩しを作ろう

🎯 きょうのミッション

ファミコンの名作ブロック崩しの土台を作ります。下のバーを左右に動かしてボールを跳ね返す。シンプルだけど熱中するゲーム。

🧠 できるようになること

  • バー(パドル)を矢印キーで操作できる
  • ボールがバーで跳ね返るしくみを作れる
  • 古典的ゲームの基本構造を再現できる

🧰 用意するもの

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

🖼 できあがり

下のバーを矢印キーで動かして、ボールを跳ね返します。バーで取り損なうと下に落ちてゲームオーバー。

📺 実行結果
(ブロック崩しのプレイ画面。バーでボールを跳ね返す)

🚀 やりかた

  1. プレイヤー用のバー(横長)を下に配置。
  2. ボールは斜めに動く(dx, dy 両方)。
  3. 壁・天井で跳ね返り。
  4. バーに当たったら dy を反転。
  5. 床に落ちたらゲームオーバー。

🐍 きょうのコード

Python main.py
import turtle

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

paddle = turtle.Turtle()
paddle.shape("square")
paddle.shapesize(stretch_wid=1, stretch_len=5)
paddle.color("cyan")
paddle.penup()
paddle.goto(0, -200)

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

dx, dy = 4, -4

def go_left(): paddle.setx(max(-230, paddle.xcor() - 30))
def go_right(): paddle.setx(min(230, paddle.xcor() + 30))
screen.onkey(go_left, "Left")
screen.onkey(go_right, "Right")
screen.listen()

def game_loop():
    global dx, dy
    ball.setx(ball.xcor() + dx)
    ball.sety(ball.ycor() + dy)
    if ball.xcor() > 280 or ball.xcor() < -280:
        dx = -dx
    if ball.ycor() > 280:
        dy = -dy
    if ball.ycor() < -180 and abs(ball.xcor() - paddle.xcor()) < 60:
        dy = -dy
    if ball.ycor() < -250:
        print("💥 GAME OVER")
        return
    screen.update()
    screen.ontimer(game_loop, 20)

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

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

💡 きょうのポイント

shapesize で形を引き伸ばしてバーを作ります。バー判定は「ball の y が低くてかつ x がパドルに近い」で。シンプルですが熱中性高い。

max と min はパドルの位置を画面内に収めます。ゲームでは「端で何が起きるか」も、当たり判定と同じくらい大切なテストです。

🎮 チャレンジ

  • 上にブロックを並べて、当たったら消えるようにしよう
  • ボールの速度を5にあげよう
  • 「失敗回数3回まで」のライフ制にしよう

🔁 ふりかえり

  • ブロック崩しの楽しさはどこにある?
  • 速度を上げると難しくなる。バランスはどう取る?
  • 次回はシューティング

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

  • 準備:キャンバスをクリックしてから矢印キーを押します。パドルが速すぎる・遅すぎる場合は、30 の移動量を調整します。
  • つまずきポイント:shapesizeの引数。stretch_widが縦、stretch_lenが横です。当たり判定は abs(ball.xcor() - paddle.xcor()) < 60 の 60 で横幅を調整します。
  • 声かけ例:「バーの長さやボールの速さを変えると難易度が変わる」と伝え、ゲームバランスの調整につなげます。