Python 启蒙 · Day 8

收集宝石:做一个能玩的小游戏

这节课的重点是成就感:先让每个孩子拿到可运行版本,再用 10 分钟改成自己的游戏。

课堂流程(45 分钟)

01

先玩一次成品

老师运行完整游戏:方向键移动,碰到宝石加分。

02

接上 Day 7 角色

沿用键盘控制代码,确认角色能动。

03

放一个随机宝石

用 random.randint 让宝石出现在不同位置。

04

碰到就换位置

用 distance 判断角色和宝石是不是靠得很近。

05

加入分数和胜利

每收一次加 1 分,到 5 分写出“你赢了”。

06

自由魔改和展示

留时间让孩子改主题,并说出自己改了什么。

教师话术(照着说就行)

"今天我们把前面学过的东西合成一个真正能玩的小游戏。"

"宝石的位置每次不一样,是 random 在帮我们随机选坐标。"

"distance 是量距离。距离很近,就算角色碰到了宝石。"

"分数会变,所以 score 是变量。函数里要改它,就加一行 global score。"

今天新增的两个机制

随机宝石

每次收集后,宝石换到一个新坐标。

python
import random
 
gem = turtle.Turtle()
gem.shape("circle")
gem.color("gold")
gem.penup()
gem.goto(random.randint(-250, 250), random.randint(-180, 180))

碰撞检测

距离小于 25,就当作碰到了宝石。

python
def check_gem():
    if player.distance(gem) < 25:
        gem.goto(random.randint(-250, 250), random.randint(-180, 180))

完整课堂代码

python
import turtle
import random
 
screen = turtle.Screen()
screen.title("第 8 课:收集宝石")
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()
gem.goto(random.randint(-250, 250), random.randint(-180, 180))
 
score = 0
win_score = 5
 
pen = turtle.Turtle()
pen.hideturtle()
pen.penup()
pen.goto(-310, 210)
pen.write("分数: 0", font=("Arial", 16, "bold"))
 
step = 20
 
def update_score():
    global score
    score = score + 1
    pen.clear()
    pen.goto(-310, 210)
    pen.write(f"分数: {score}", font=("Arial", 16, "bold"))
 
    if score >= win_score:
        pen.goto(0, 0)
        pen.write("你赢了!", align="center", font=("Arial", 36, "bold"))
 
def check_gem():
    if player.distance(gem) < 25:
        update_score()
        gem.goto(random.randint(-250, 250), random.randint(-180, 180))
 
def move_up():
    player.sety(player.ycor() + step)
    check_gem()
 
def move_down():
    player.sety(player.ycor() - step)
    check_gem()
 
def move_left():
    player.setx(player.xcor() - step)
    check_gem()
 
def move_right():
    player.setx(player.xcor() + step)
    check_gem()
 
screen.listen()
screen.onkey(move_up, "Up")
screen.onkey(move_down, "Down")
screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")
 
turtle.done()

自由魔改

给孩子 10-12 分钟

把 player.shape("turtle") 改成 circle、square。

把 step 改成 10 或 30,调整移动速度。

把 win_score 改成 3 或 10,调整胜利难度。

把 gem.color("gold") 改成 red、blue、purple。

完成标准

孩子能运行游戏,并用方向键收集宝石。

孩子知道 score 是分数,收一次宝石就加 1。

孩子能修改颜色、速度或胜利分数。

孩子能展示自己的版本,说出“我改了什么”。

如果课堂时间紧,优先保证基础版能跑。展示环节不要省掉,它是这节课的收官。

展示收尾

每个孩子只说一句:我的游戏里,我改了什么。老师只追问一个问题:你最满意哪一处?