《编程农场》教程 (6):智能仓管!用 num_items() 与变量实现动态按需生产
欢迎回来,伟大的农场架构师!
在前五课中,你的无人机已经从一个“原地挥镰刀的笨蛋”,进化成了“全图极速扫荡的棋盘格伐木机”。但是,随着你的机器日夜不停地运转,你可能会遇到一个新问题:爆仓了!
如果你的木材已经堆积如山,而胡萝卜却快用光了,无人机如果还在傻傻地种树,那就太浪费算力和时间了。 真正的全自动化农场,不需要你手动去改代码换种子。今天,我们将让无人机拥有**“查库存”**的能力,并引入编程中极其重要的概念——变量(Variables),把它变成一个聪明的“仓管员”。
1. 查账小助手:num_items()
游戏为我们提供了一个随时随地查看背包库存的神奇函数:num_items()。
和 plant() 函数需要传入 Entities(实体)类似,num_items() 需要传入我们要查询的 Items(物品)。
查询木材数量:
num_items(Items.Wood)查询胡萝卜数量:
num_items(Items.Carrot)
(⚠️ 排坑提示:注意区分 Entities 和 Items!种在地里的是实体(Entities.Carrot),收割后放进背包里的是物品(Items.Carrot)。)
2. 记忆的魔法:什么是“变量 (Variables)”?
如果无人机每次做决定都要去数一遍仓库里的木头,代码会变得非常长,而且运行起来很累。 我们可以拿一个“小纸条”,把刚才数出来的数字写在上面,并给这张纸条起个名字。这个“小纸条”在编程里就叫做变量。
Python
# 把木材的数量,装进一个名叫 wood_count 的变量里
wood_count = num_items(Items.Wood)
有了变量,我们就可以像读纸条一样,随时使用 wood_count 来做数学题或判断题了!
3. 终极实战:按需生产的动态农场
现在,我们要把前面学过的所有知识(全图扫荡、胡萝卜翻土、树木棋盘格)全部融为一体! 我们要给无人机下达这样的“仓管指令”:
先收割:遇到熟的就砍。
查库存:如果遇到空地,先看看背包里的木头(
wood_count)。动态决策:
如果木头 少于 1000(
< 1000),说明缺木材 -> 执行“棋盘格种树”逻辑。否则(
else),说明木材够了,我不缺木材了 -> 赶紧执行“翻土 + 种胡萝卜”逻辑!
让我们来看看这段极其惊艳的**“动态流水线”**代码:
Python
size = get_world_size()
while True:
for x in range(size):
for y in range(size):
# 第一步:老规矩,熟了就收割
if can_harvest():
harvest()
# 第二步:遇到空地了,到底该种什么?
if get_entity_type() == None:
# 查库存,把数据存进变量!
wood_count = num_items(Items.Wood)
# 开始做决策!
if wood_count < 1000:
# 缺木头!启动棋盘格种树模式
if (get_pos_x() + get_pos_y()) % 2 == 0:
plant(Entities.Tree)
else:
# 木头已经超过1000了!切换到胡萝卜模式
if get_ground_type() == Grounds.Grassland:
till() # 胡萝卜需要耕地
plant(Entities.Carrot)
# 第三步:继续向北飞
move(North)
# 换列
move(East)
🧠 代码运行时的神级视觉反馈:
把这段代码放进游戏,你会看到不可思议的一幕:
一开始木头少于 1000,无人机会在全图规规矩矩地种下“棋盘格”的树木,而白格子则会空着(因为树木分支里没有写要对白格子做什么)。
无人机一圈圈地收割树木,右上角的木材数量不断上涨:990、995、999……
突破 1000 的瞬间! 无人机就像收到了新订单的工厂,它路过那些因为棋盘格而空着的“白格子”时,瞬间全部分配去种胡萝卜!
等到原本的树木成熟被砍掉后,空出来的“黑格子”也会全部被换成胡萝卜!
如果以后你消耗了木材(比如去解锁新科技),木材跌回 1000 以下,无人机又会自动把成熟的胡萝卜替换回树木。
这就是真正的自动化!完全不需要人工干预的动态平衡!