CodeCombat 森林篇:宠物

事件处理器:Event Handlers

pet.on("hear", func)
当宠物听到声音时,执行某个函数。
用于对话、问答。
pet.on("spawn", func)
当宠物出生时,执行某个函数。
用于让宠物独立行动(如捡东西)。
No.49-50

边地好伙伴 & 好伙伴的名字

绑定事件

我们要训练宠物对声音做出反应。
1. 定义行为: 听到声音后该做什么?(写在函数里)
2. 绑定事件: 告诉宠物,听到 "hear" 就执行那个函数。

def speak(event):
    pet.say("喵")

pet.on("hear", speak)

注意:pet.on 里的 speak 不要加括号!

solution.py (第49关)
1
def speak(event):
定义回应动作。
2
pet.say("喵~")
宠物说话。
4
pet.on("hear", speak)
绑定:听到 -> 回应。
6
hero.say("你好小猫")
英雄说话触发事件。
No.51-52

博士猫咪 & 宠物小测试

会回答问题的猫

我们来做个小测试。
你需要自己编写整个流程:
1. 定义 onHear 函数。
2. 绑定事件。
3. 英雄提问。

注意:函数必须接受一个参数(通常叫 evente),即使你暂时不用它。

solution.py (宠物小测试)
1
def onHear(e):
定义处理函数。
2
pet.say("Myau")
猫咪回答。
4
pet.on("hear", onHear)
绑定监听器。
6
hero.say("能听懂我的话吗?")
问题1。
7
hero.say("你是美洲狮吗?")
问题2。
8
hero.say("你多大啦?")
问题3。
No.54

去拿过来

Spawn 事件

"spawn" (生成/出生) 事件在关卡开始时触发一次。
这通常用于让宠物开始执行**独立任务**。

如果你在 onSpawn 函数里放一个 while True 循环,宠物就会一直不停地工作(比如捡药水),而英雄可以去做别的事!

solution.py
1
def goFetch():
定义取物行为。
2
while True:
宠物自己的无限循环。
3
potion = hero.findNearestItem()
宠物找药水。
4
if potion:
找到了吗?
5
pet.fetch(potion)
去拿!
7
pet.on("spawn", goFetch)
绑定出生事件。
No.55-56

看门狗 & 漫漫长路

得力助手

你的宠物不仅仅能捡东西,它还能:
1. 侦察敌人 (pet.findNearestEnemy)
2. 警告 (pet.say)
3. 送快递 (pet.fetch)

这就像在写两份代码:一份是英雄的,一份是宠物的。

solution.py (看门狗)
1
def onSpawn(event):
定义宠物行为。
2
while True:
持续监控。
3
enemy = pet.findNearestEnemy()
宠物侦察。
4
if enemy:
有敌人?
5
pet.say("Woof!")
叫!提醒工人。
7
pet.on("spawn", onSpawn)
激活宠物AI。
No.58-61

独立行动

英雄与宠物协作

在最后的几个关卡中,英雄和宠物要分头行动。

  • 森林慢跑: 宠物自己跑圈圈,英雄负责加油。
  • 充满事件的争论: 组合挑战。
    - onSpawn: 宠物捡东西。
    - onHear: 宠物回应。
    - while True: 英雄打怪。
solution.py (组合挑战)
1
def onSpawn(event):
任务1:捡东西。
2
while True:
无限循环。
3
item = hero.findNearestItem()
找物品。
4
if item: pet.fetch(item)
去拿。
6
def onHear(event):
任务2:对话。
7
pet.say("汪汪!")
回应。
9
pet.on("spawn", onSpawn)
激活生成。
10
pet.on("hear", onHear)
激活听觉。
12
while True:
英雄主线程。
13
enemy = hero.findNearestEnemy()
找怪。
14
if enemy:
有怪?
15
hero.attack(enemy)
打!