Python 启蒙 · Day 9
倒计时:让游戏变紧张
在收集宝石游戏上加一个 30 秒倒计时。孩子要感受到“快快快”,再理解代码怎么做到。
课堂流程(45 分钟)
01
复习宝石游戏
先问:上节课怎么得分?游戏能一直玩吗?
02
制造问题
让孩子发现:如果没有时间限制,就不够紧张。
03
演示限时版
老师运行 30 秒倒计时版本,先让孩子看到目标。
04
加入时间变量
time_left 表示还剩多少秒,game_over 是结束开关。
05
显示时间
把分数和时间写到屏幕上。
06
让时间自己减少
用 ontimer:1 秒后再叫 update_time 一次。
07
时间到就停止
game_over 变成 True 后,方向键不再移动。
教师话术(照着说就行)
"上节课游戏可以一直玩。今天我们让它变成限时挑战。"
"time_left 就是还剩多少时间。"
"ontimer 可以先简单理解成:过一会儿,再叫这个函数一次。"
"game_over 是游戏结束开关。开关打开以后,角色不能再动。"
分步加入倒计时
第一步:时间和结束开关
python
time_left = 30
game_over = False第二步:显示分数和时间
python
def show_info():
pen.clear()
pen.goto(-310, 210)
pen.write(f"分数: {score} 时间: {time_left}", font=("Arial", 16, "bold"))第三步:让时间自己走
python
def update_time():
global time_left, game_over
if time_left > 0:
time_left = time_left - 1
show_info()
screen.ontimer(update_time, 1000)
else:
game_over = True
pen.goto(0, 0)
pen.write("Game Over", align="center", font=("Arial", 36, "bold"))完整课堂代码
python
import turtle
import random
screen = turtle.Screen()
screen.title("第 9 课:限时收集宝石")
screen.setup(700, 500)
player = turtle.Turtle()
player.shape("turtle")
player.color("green")
player.penup()
player.goto(0, 0)
gem = turtle.Turtle()
gem.shape("circle")
gem.color("gold")
gem.penup()
score = 0
time_left = 30
game_over = False
step = 20
pen = turtle.Turtle()
pen.hideturtle()
pen.penup()
def move_gem():
gem.goto(random.randint(-250, 250), random.randint(-180, 180))
def show_info():
pen.clear()
pen.goto(-310, 210)
pen.write(f"分数: {score} 时间: {time_left}", font=("Arial", 16, "bold"))
def update_time():
global time_left, game_over
if time_left > 0:
time_left = time_left - 1
show_info()
screen.ontimer(update_time, 1000)
else:
game_over = True
pen.goto(0, 0)
pen.write("Game Over", align="center", font=("Arial", 36, "bold"))
def check_gem():
global score
if not game_over and player.distance(gem) < 25:
score = score + 1
move_gem()
show_info()
def move_up():
if not game_over:
player.sety(player.ycor() + step)
check_gem()
def move_down():
if not game_over:
player.sety(player.ycor() - step)
check_gem()
def move_left():
if not game_over:
player.setx(player.xcor() - step)
check_gem()
def move_right():
if not game_over:
player.setx(player.xcor() + step)
check_gem()
move_gem()
show_info()
update_time()
screen.listen()
screen.onkey(move_up, "Up")
screen.onkey(move_down, "Down")
screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")
turtle.done()分层挑战
让孩子改一个参数
把 time_left 从 30 改成 10,游戏会更紧张。
把 step 改大,看看能不能抢更多宝石。
把 Game Over 改成自己的结束文字。
挑战:最后 5 秒时让笔变成红色。
完成标准
孩子能看到时间从 30 往下倒数。
时间到 0 后出现 Game Over。
Game Over 后方向键不能继续移动角色。
孩子能修改时间长度或结束文字。
这一课不用解释事件循环。只要孩子能说出“1 秒后再执行一次”,就够了。
收尾问题
以后做游戏时,你可以决定:让玩家无限玩,还是限时挑战。这就是在设计规则。
模块目录
Python 启蒙