视频文稿
打开编程农场,今天农场正在进行面积扩张,浇水系统安装,以及无人机的高级功能升级。所以今天农场主没有新的任务,但是,我的团队被解散了,如今农场只有我一个程序员了。农场主解散我们团队的理由是,降本增效,如今,AI的编程能力逐渐变强,已经能替代多数程序员的工作了。农场主认为农场不再需要这么多的低级程序员,以后就由我加上AI助手处理农场工作了。
至于,为什么选择我留下来呢?因为,,,,我的工资只需要3000草,淦!!!
还是得干啊。
所以今天,我的主要工作就是为高效利用AI助手解决农场问题提前做准备。
由于开掉其他程序员,农场主节省了一笔钱,拿去升级了一次农场,目前农场编辑器已经解锁了定义函数功能、浇水功能、
定义函数是把“重复的逻辑”变成“可随时调用的工具”。让我们的代码更简洁、更好懂、更容易改。
比如农场我们常用的,harvest收割函数,do a flip翻跟头函数等等就是农场编辑器内置的定义函数,这些指令背后包含了复杂重复的代码,农场编辑器把这些复杂,重复的代码给我们打包成了现在可以仅通过简单名称加上()的形式直接调用。
而现在,我们也可以这么做了。比如,我们可以把需要重复用到多行遍历移动代码定义为一个叫route的函数,route是我随便取的名字,当我需要让无人机用遍历的方式在农场移动时,我不用再写一遍那些代码,直接调用route函数就行了。
而且,我可以专门用一个文件,比如Utils,来装我定义的函数,需要用的时候只需要在工作文件开头写上import Utils。就可从Utils导入函数和全局变量。
这样,我们就可以把之前重复使用,或是比较复杂的代码指令都定义一个函数,放在Utils工具文件里,后面工作的时候随时调用。
这也是为了后面能和AI助手更好的合作,让它知道农场目前能使用那些指令。
现在,我得想想要把那些复杂或需要重复使用的代码,定义函数。
第一,我需要把各种作物的种植与收获指令打包,因为这些代码都是重复用的;
例如,灌木的种植:
# 种植前先把下方作物收获了;
if can_harvest():
harvest()
# 收获成熟作物后,种植灌木;
plant(Entities.Bush)
把它打包起来定义一个函数,就用plant_Bush命名吧~
还有胡萝卜的种植:
# 种植前先把下方作物收获了;
if can_harvest():
harvest()
# 收获成熟作物后,用判断语句尝试直接种植胡萝卜;
if not plant(Entities.Carrot):
# 如果直接种植失败,说明地块类型不是土,或者缺少草和灌木;
# 由于草和灌木有一定储备,这里暂时不考虑后者原因(后面和感官一起说);、
till()
plant(Entities.Carrot)
同样把它打包起来定义一个函数,用plant_Carrot命名;
第二,我们得把刚才定义的route路线函数改一改,因为在农场的使用场景中,移动路线的同时都是需要伴随着一些操作的,比如种植灌木和种植胡萝卜。
我们需要在遍历代码中加入其他指令,但是我们不可能在需要添加指令的时候再去修改定义函数,我们得添加全局变量参数,这样一来,需要用什么指令在调用函数的括号内输入即可。
# 无人机移动路线;
# 把遍历移动定义为route函数;
def route(do_1 = None, do_2 = None):
# 把get_world_size()返回的值赋值给size,简化代码;
size = get_world_size()
# === 去程:从西南角到东北角 ===
for col in range(size):
for row in range(size):
# 如果有操作就在当前地块执行;
if do_1 != None: # 检查是否输入了操作,不是空值(None);
do_1() # 在当前地块执行操作;
# 垂直移动(蛇形)
if row < size - 1:
if col % 2 == 0:
move(North) # 偶数列向上移动
else:
move(South) # 奇数列向下移动
# 水平移动到下一列(除非是最后一列)
if col < size - 1:
move(East)
# === 返程:从东北角回到西南角 ===
for col in range(size - 1, -1, -1):
for row in range(size):
# 如果有操作就在当前地块执行;
if do_2 != None: # 检查是否输入了操作,不是空值(None);
do_2() # 在当前地块执行操作;
# 垂直移动(返程蛇形)
if row < size - 1:
if col % 2 == 0:
move(South) # 偶数列向下移动
else:
move(North) # 奇数列向上移动
# 水平移动到前一列(除非是第一列)
if col > 0:
move(West)
# 灌木的种植;
def plant_Bush():
# 种植前先把下方作物收获了;
if can_harvest():
harvest()
# 收获成熟作物后,种植灌木;
plant(Entities.Bush)
# 胡萝卜的种植;
def plant_Carrot():
# 种植前先把下方作物收获了;
if can_harvest():
harvest()
# 收获成熟作物后,用判断语句尝试直接种植胡萝卜;
if not plant(Entities.Carrot):
# 如果直接种植失败,说明地块类型不是土,或者缺少草和灌木;
# 由于草和灌木有一定储备,这里暂时不考虑后者原因(后面和感官一起说);、
till()
plant(Entities.Carrot)
import Utils # 调用Utils中的内容;
# Utils.route() # 调用route函数;
Utils.route(Utils.plant_Bush,Utils.plant_Carrot)
后面,我还得把农场新增的浇水、感官等功能写好基本指令后打包定义函数,不过我准备明天再做,因为,,,我得开始摸鱼了,今天的工作已经耽误太多摸鱼的时间,再耽误下去对3000草的程序员来说简直就是失职,哪有程序员不摸鱼的呀。








暂无评论内容