かんたんブロック崩しを作ろう
ファミコンの名作ブロック崩しの土台を作ります。下のバーを左右に動かしてボールを跳ね返す。シンプルだけど熱中するゲーム。
🧠 できるようになること
- バー(パドル)を矢印キーで操作できる
- ボールがバーで跳ね返るしくみを作れる
- 古典的ゲームの基本構造を再現できる
🧰 用意するもの
- パソコン
- ブラウザ(Chrome / Edge / Safari)
- インターネット接続
- このページの「▶ このページで実行」ボタン(絵もゲームもそのまま動きます)
- Trinket(予備の実行サイト:https://trinket.io/python)
🖼 できあがり
下のバーを矢印キーで動かして、ボールを跳ね返します。バーで取り損なうと下に落ちてゲームオーバー。
📺 実行結果
(ブロック崩しのプレイ画面。バーでボールを跳ね返す)
🚀 やりかた
- プレイヤー用のバー(横長)を下に配置。
- ボールは斜めに動く(dx, dy 両方)。
- 壁・天井で跳ね返り。
- バーに当たったら dy を反転。
- 床に落ちたらゲームオーバー。
🐍 きょうのコード
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を使うときは、上のコードをコピーして貼り付けます。
💡 きょうのポイント
shapesize で形を引き伸ばしてバーを作ります。バー判定は「ball の y が低くてかつ x がパドルに近い」で。シンプルですが熱中性高い。
max と min はパドルの位置を画面内に収めます。ゲームでは「端で何が起きるか」も、当たり判定と同じくらい大切なテストです。
🎮 チャレンジ
- 上にブロックを並べて、当たったら消えるようにしよう
- ボールの速度を5にあげよう
- 「失敗回数3回まで」のライフ制にしよう
🔁 ふりかえり
- ブロック崩しの楽しさはどこにある?
- 速度を上げると難しくなる。バランスはどう取る?
- 次回はシューティング
👨👩👧 おうちの人・先生へ
- 準備:キャンバスをクリックしてから矢印キーを押します。パドルが速すぎる・遅すぎる場合は、
30の移動量を調整します。 - つまずきポイント:
shapesizeの引数。stretch_widが縦、stretch_lenが横です。当たり判定はabs(ball.xcor() - paddle.xcor()) < 60の60で横幅を調整します。 - 声かけ例:「バーの長さやボールの速さを変えると難易度が変わる」と伝え、ゲームバランスの調整につなげます。