


















前段时间在群里看到有人推荐这个游戏:编程农场,下载下来玩了一下,发现有点上头。游戏玩法很简单,用类 Python 的编程语言,在农田方块组成的农场上操作无人机,自动化耕种、收获、经营。
虽然是「类 Python 编程语言」,但游戏内语言跟 Python 的差别几乎可以忽略不计,因为作者就是照着 Python 的语法做的,加入了一些自定义函数。可以说只有他没实现的功能,没有和 Python 不同的语法。游戏后期还出现了需要冒泡排序的任务,用来入门 Python 应该也算是个不错的选择。不过也有不方便的地方,比如游戏内的语言没有实现字典的get()方法,只能用dict[key]的方式访问字典里的值,也没有实现try和except语句,需要用key in dict来检查字典里是否包含某个键。
游戏目前只支持 Windows。如果你在 Mac 上用 Parallels Desktop 游玩,大概率会遇到农场无法正常显示的 bug,可以参考这篇帖子修改虚拟机设置。官方 Discord 里也有人说用 Whisky 可以正常游玩。
新游戏开始,会弹出一个文档和一个编辑器。初始农场大小为 1*1,也就是一块农田,农场上方有一个无人机,周围有一个小猪飞行器在游荡:
photo 加载中

所有函数都是对无人机的操作。一开始能使用的函数有 3 个(如果只算种田用得到的话就只有 1 个):
harvest():收割无人机当前位置下方的实体,收获到的农作物会飞到小猪那里,动画很炫do_a_flip():让无人机翻个跟头pet_the_piggy():让无人机摸摸小猪在右上角点开科技树可以看到,随着游戏进程推进,玩家可以逐渐提高各种农作物的产出速度、扩张农场大小、解锁更多内置函数和各种 Python 语法。
photo 加载中

在科技树的最开始,收获 5 个草就可以解锁while循环,这就是全自动化农场运营的开端。
harvest()
harvest()
harvest()
harvest()
harvest()农田会默认长草,收割 5 次即可获得 5 个草。
接下来,提高无人机和代码执行的速度、增加草的产量、扩张农场大小、解锁种植功能都需要草,所以来个循环割草:
while True:
harvest()由于无人机速度提升,需要判断实体是否可以收割后再收割,防止过早收割,什么都没收到。
while True():
if can_harvest():
harvest()农场大小扩张到 1*3,解锁了move()函数,可以移动无人机。每列(行)农田都可以看作一个循环列表,当无人机移动到农场外时,会回到农场的另一边。例如当前无人机的坐标是(0, 0),此时执行move(South)会使无人机移动到(0, 2)。
photo 加载中

# 轮流收割每块田地
while True:
if can_harvest():
harvest()
move(North)解锁了plant()函数,当前阶段可以种植灌木和草;以及clear()函数,可以清除整个农场上的所有实体,并让无人机回到(0, 0)点。所有农作物都属于实体类。
# 轮流种植灌木并收割
clear()
while True:
if can_harvest():
harvest()
plant(Entities.Bush)
move(North)农场大小由 1*3 扩大到了 3*3,此后的每次扩张,农场都会保持正方形。同时解锁了for循环和get_world_size()函数,后者会返回农场的边长。利用前面提到的「循环列表」特性,可以用一个双层for循环来遍历整个农场,同时种植和收获:
while True:
for i in range(get_world_size()):
for j in range(get_world_size()):
harvest()
plant(Entities.Bush)
move(North)
move(East)上面的代码让无人机从(0, 0)开始,从南到北、从西到东遍历整个农场,在每块田地上收割并种植灌木,往复循环。由于农场扩张,种下一棵灌木后再回到这棵灌木需要的时间已经超过了灌木生长所需的时间,因此可以去掉if can_harvest()语句。
当然,如果你喜欢,也可以修改两层循环中各自的move方向,或者互换两个move的方向,让无人机沿不同路径遍历。
到这里,游戏最核心的逻辑已经清晰,也就是遍历农场,种植、收割、解锁新实体、扩张农场的无限循环,而乐趣就在于自动化操作、提高自动化效率。从开头到现在已经有太多篇幅用于介绍游戏规则了,下面来点算法探讨。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。