Files
farmer/pumpkin.py

116 lines
2.2 KiB
Python

import utils
import solve
def grow(xl, yl, n):
def init():
def fillx(x):
def ret():
for y in range(yl, yl+n):
utils.mv(x, y)
utils.soil()
return ret
drowns = list()
for x in range(xl+1, xl+n):
drown = None
while drown == None:
drown = spawn_drone(fillx(x))
drowns.append(drown)
fillx(xl)()
for drown in drowns:
wait_for(drown)
def run():
check = list()
for x in range(xl, xl+n):
for y in range(yl, yl+n):
check.append((x, y))
def fillx(x):
def ret():
for y in range(yl, yl+n):
utils.mv(x, y)
utils.water()
utils.replant(Entities.Pumpkin)
return ret
drowns = list()
for x in range(xl+1, xl+n):
drown = None
while drown == None:
drown = spawn_drone(fillx(x))
drowns.append(drown)
fillx(xl)()
for drown in drowns:
wait_for(drown)
while len(check):
nxt = list()
for x, y in check[::-1]:
utils.mv(x, y)
if not can_harvest():
if get_entity_type() == Entities.Dead_Pumpkin:
while not can_harvest():
plant(Entities.Pumpkin)
if not use_item(Items.Fertilizer):
nxt.append((x, y))
break
else:
nxt.append((x, y))
check = nxt
utils.mv(xl, yl)
utils.harv()
return (init, run)
def grow_parallel(xl, xm, xr, yl, yr):
def ret():
def init(check, xl, xr, yl, yr):
for x in range(xl, xr):
for y in range(yl, yr):
utils.mv(x, y)
utils.soil()
utils.water()
plant(Entities.Pumpkin)
check.append((x, y))
def replant(xl, xr, yl, yr):
def ret():
check = list()
init(check, xl, xr, yl, yr)
while len(check):
nxt = list()
for x, y in check[::-1]:
utils.mv(x, y)
utils.water()
if not can_harvest():
if get_entity_type() == Entities.Dead_Pumpkin:
plant(Entities.Pumpkin)
nxt.append((x, y))
check = nxt
return ret
while True:
drown = spawn_drone(replant(xl, xm, yl, yr))
replant(xm, xr, yl, yr)()
wait_for(drown)
utils.harv()
return ret
if __name__ == '__main__':
set_world_size(32)
clear()
jobs = list()
for x in range(0, 4):
for y in range(0, 4):
jobs.append(grow_parallel(x*8, x*8+4, x*8+7, y*8, y*8+7))
for job in jobs[:-1]:
spawn_drone(job)
jobs[-1]()