惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
量子位
IT之家
IT之家
Jina AI
Jina AI
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
人人都是产品经理
人人都是产品经理
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
AWS News Blog
AWS News Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
P
Proofpoint News Feed
S
Schneier on Security
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
L
LINUX DO - 热门话题
博客园 - 聂微东
C
Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
Security Latest
Security Latest
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
Last Week in AI
Last Week in AI
博客园 - Franky
G
GRAHAM CLULEY
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
L
LINUX DO - 最新话题
T
The Exploit Database - CXSecurity.com
博客园 - 三生石上(FineUI控件)
P
Privacy International News Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
Schneier on Security
Schneier on Security
V
V2EX
V
Visual Studio Blog
S
Security @ Cisco Blogs
博客园 - 叶小钗
H
Hacker News: Front Page
小众软件
小众软件
WordPress大学
WordPress大学
V2EX - 技术
V2EX - 技术
美团技术团队

Mai Blog

解决 AirPods 连接 Mac 时音量默认 50% 的问题 去腾讯化 - Mai Blog 深夜思绪之流 - Mai Blog Parallels虚拟机安装win7开机动画消失 - Mai Blog 大学生活 - Mai Blog 停电咯 - Mai Blog 斜视手术 - Mai Blog 毕业记 - Mai Blog iPod nano 6 - Mai Blog
编程农场中的算法笔记 - Mai Blog
Mai · 2025-10-23 · via Mai Blog

前段时间在群里看到有人推荐这个游戏:编程农场,下载下来玩了一下,发现有点上头。游戏玩法很简单,用类 Python 的编程语言,在农田方块组成的农场上操作无人机,自动化耕种、收获、经营。

虽然是「类 Python 编程语言」,但游戏内语言跟 Python 的差别几乎可以忽略不计,因为作者就是照着 Python 的语法做的,加入了一些自定义函数。可以说只有他没实现的功能,没有和 Python 不同的语法。游戏后期还出现了需要冒泡排序的任务,用来入门 Python 应该也算是个不错的选择。不过也有不方便的地方,比如游戏内的语言没有实现字典的get()方法,只能用dict[key]的方式访问字典里的值,也没有实现tryexcept语句,需要用key in dict来检查字典里是否包含某个键。

兼容性提示

游戏目前只支持 Windows。如果你在 Mac 上用 Parallels Desktop 游玩,大概率会遇到农场无法正常显示的 bug,可以参考这篇帖子修改虚拟机设置。官方 Discord 里也有人说用 Whisky 可以正常游玩。

游戏过程

核心内容

新游戏开始,会弹出一个文档和一个编辑器。初始农场大小为 1*1,也就是一块农田,农场上方有一个无人机,周围有一个小猪飞行器在游荡:

photo 加载中

Screenshot2025-10-19_18-49-24

所有函数都是对无人机的操作。一开始能使用的函数有 3 个(如果只算种田用得到的话就只有 1 个):

  • harvest():收割无人机当前位置下方的实体,收获到的农作物会飞到小猪那里,动画很炫
  • do_a_flip():让无人机翻个跟头
  • pet_the_piggy():让无人机摸摸小猪

在右上角点开科技树可以看到,随着游戏进程推进,玩家可以逐渐提高各种农作物的产出速度、扩张农场大小、解锁更多内置函数和各种 Python 语法。

photo 加载中

在科技树的最开始,收获 5 个草就可以解锁while循环,这就是全自动化农场运营的开端。

harvest()
harvest()
harvest()
harvest()
harvest()

农田会默认长草,收割 5 次即可获得 5 个草。

接下来,提高无人机和代码执行的速度、增加草的产量、扩张农场大小、解锁种植功能都需要草,所以来个循环割草:

while True:
    harvest()

if 语句

由于无人机速度提升,需要判断实体是否可以收割后再收割,防止过早收割,什么都没收到。

while True():
    if can_harvest():
        harvest()

农场扩张

农场大小扩张到 1*3,解锁了move()函数,可以移动无人机。每列(行)农田都可以看作一个循环列表,当无人机移动到农场外时,会回到农场的另一边。例如当前无人机的坐标是(0, 0),此时执行move(South)会使无人机移动到(0, 2)

photo 加载中

image-20251019194631239

# 轮流收割每块田地
while True:
    if can_harvest():
        harvest()
    move(North)

解锁种植功能 & 各种农作物

解锁了plant()函数,当前阶段可以种植灌木和草;以及clear()函数,可以清除整个农场上的所有实体,并让无人机回到(0, 0)点。所有农作物都属于实体类。

# 轮流种植灌木并收割
clear()
while True:
    if can_harvest():
        harvest()
    plant(Entities.Bush)
    move(North)

农场扩张 2

农场大小由 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的方向,让无人机沿不同路径遍历。

到这里,游戏最核心的逻辑已经清晰,也就是遍历农场,种植、收割、解锁新实体、扩张农场的无限循环,而乐趣就在于自动化操作、提高自动化效率。从开头到现在已经有太多篇幅用于介绍游戏规则了,下面来点算法探讨。


To be continued:

其他遍历方法

蛇形遍历

分区遍历

最大化仙人掌产量

冒泡排序

基于蛇形遍历的冒泡排序

基于每行每列分而治之的冒泡排序

分区种植仙人掌

分区冒泡排序