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

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

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:

其他遍历方法

蛇形遍历

分区遍历

最大化仙人掌产量

冒泡排序

基于蛇形遍历的冒泡排序

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

分区种植仙人掌

分区冒泡排序