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

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

🎯 きょうのミッション

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

🧠 できるようになること

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

🧰 用意するもの

🖼 できあがり

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

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

🚀 やりかた

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

🐍 きょうのコード

Python main.py
import turtle

screen = turtle.Screen()
screen.bgcolor("black")

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(paddle.xcor() - 30)
def go_right(): paddle.setx(paddle.xcor() + 30)
screen.onkey(go_left, "Left")
screen.onkey(go_right, "Right")
screen.listen()

while True:
    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")
        break
▶ Trinketを開いて動かす

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

💡 きょうのポイント

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

🎮 チャレンジ

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

🔁 ふりかえり

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

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

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