避けゲームを作ろう(基本)
これまでの全部を組み合わせて避けゲームの基本形を作ります。プレイヤーは横に動けて、上から落ちる赤いボールを避ける。当たったら「ゲームオーバー」。
🧠 できるようになること
- ゲームループの「入力→更新→判定→表示」を説明できる
- ループの速さを一定にして、安定して動かせる
- 画面の外へ出ないプレイヤー操作を作れる
🧰 用意するもの
- パソコン
- ブラウザ(Chrome / Edge / Safari)
- インターネット接続
- このページの「▶ このページで実行」ボタン(絵もゲームもそのまま動きます)
- Trinket(予備の実行サイト:https://trinket.io/python)
🖼 できあがり
下にいるプレイヤーを左右の矢印キーで動かして、上から落ちてくるボールを避けます。当たったらゲームオーバー。
📺 実行結果
(避けゲームのプレイ画面。ボールが落ちてくる)
🚀 やりかた
- プレイヤーと敵を作り、キー入力を関数に登録する。
- キー関数では
maxとminを使い、画面の外へ出ないようにする。 game_loopの中を「敵を更新→当たり判定→画面を表示→次を予約」の順に書く。screen.ontimer(game_loop, 20)で1周ごとに20ミリ秒待ち、速さとCPU負荷を安定させる。- 当たったら画面にゲームオーバーを表示し、return で予約を止めて終了する。
🐍 きょうのコード
Python
main.py
import turtle
import random
screen = turtle.Screen()
screen.bgcolor("black")
screen.setup(500, 500)
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)
def go_left():
player.setx(max(-225, player.xcor() - 25))
def go_right():
player.setx(min(225, player.xcor() + 25))
screen.onkey(go_left, "Left")
screen.onkey(go_right, "Right")
screen.listen()
def game_loop():
enemy.sety(enemy.ycor() - 6)
if enemy.ycor() < -250:
enemy.goto(random.randint(-200, 200), 200)
if player.distance(enemy) < 25:
enemy.write("ゲームオーバー!", align="center",
font=("Arial", 20, "bold"))
screen.update()
return # 予約をやめてゲーム終了
screen.update()
screen.ontimer(game_loop, 20)
game_loop()
turtle.done()
このページの「▶ このページで実行」でそのまま動きます。キー操作のゲームは、絵をクリックしてからキーを押してね。Trinketを使うときは、上のコードをコピーして貼り付けます。
💡 きょうのポイント
ゲームは、短い時間の中で入力を受ける→位置を更新する→当たりを判定する→画面を表示するを何度もくりかえします。これがゲームループです。screen.tracer(0) と screen.update() で表示するタイミングを管理し、sleep で1周の速さを整えています。
🎮 チャレンジ
- 測る:
ontimerの20を10、50に変え、遊びやすさを比べよう - 境界テスト:左キーを押し続けても、プレイヤーが画面外へ消えないことを確認しよう
- 難易度調整:敵の速さ6と当たり判定25を1つずつ変え、どちらが難しさに効くか記録しよう
🔁 ふりかえり
- このゲームループの「更新」と「判定」は、それぞれどの行?
ontimerの待ち時間を0にすると、速さやパソコンの負荷はどう変わった?- 画面端のテストと衝突テストでは、どんな操作をすればよい?
👨👩👧 おうちの人・先生へ
- 準備:Trinket キャンバスにフォーカスを当ててからプレイします。キーが反応しないときは、まずキャンバスをクリックします。
- つまずきポイント:キーが反応しない場合はキャンバスをクリックします。動きが止まる場合は、
screen.update()とインデントを確認します。 - 確認順:①左右移動、②画面端、③敵の再出現、④衝突、⑤終了表示の順で、機能を1つずつテストしてください。
- 声かけ例:「動いたら完成」ではなく、「速さ・当たり判定・遊びやすさを調整するところまでゲーム作り」と伝えると、改造の目的がはっきりします。