mirror of
https://github.com/jcreek/TheFarmerWasReplaced.git
synced 2026-07-12 18:43:47 +00:00
feat(*): Enable multiple drones for cacti
This commit is contained in:
@@ -44,50 +44,99 @@ import helpers
|
|||||||
# 4 9 7
|
# 4 9 7
|
||||||
# 3 3 2
|
# 3 3 2
|
||||||
|
|
||||||
def till_and_plant(cacti):
|
local_cacti = {}
|
||||||
|
|
||||||
|
COLUMNS_PER_DRONE = 1
|
||||||
|
|
||||||
|
|
||||||
|
def till_and_plant():
|
||||||
if get_ground_type() != Grounds.Soil:
|
if get_ground_type() != Grounds.Soil:
|
||||||
till()
|
till()
|
||||||
helpers.harvest_if_possible()
|
helpers.harvest_if_possible()
|
||||||
plant(Entities.Cactus)
|
plant(Entities.Cactus)
|
||||||
cacti[(get_pos_x(), get_pos_y())] = measure()
|
|
||||||
|
|
||||||
def sort_cacti(cacti):
|
def sort_local_region(start_x, end_x):
|
||||||
swaps_made = True
|
|
||||||
world_size = get_world_size()
|
world_size = get_world_size()
|
||||||
|
swaps_made = True
|
||||||
|
|
||||||
while swaps_made:
|
while swaps_made:
|
||||||
number_of_swaps_made_this_loop = 0
|
|
||||||
# Go through the cacti array, each entry stores the size at the x,y
|
|
||||||
for x in range(world_size):
|
|
||||||
for y in range(world_size):
|
|
||||||
# Check the cactus to the right
|
|
||||||
if x+1 < world_size and cacti[(x,y)] > cacti[(x+1,y)]:
|
|
||||||
helpers.move_to_coords(x,y)
|
|
||||||
swap(East)
|
|
||||||
temp_cactus = cacti[(x,y)]
|
|
||||||
cacti[(x,y)] = cacti[(x+1,y)]
|
|
||||||
cacti[(x+1,y)] = temp_cactus
|
|
||||||
number_of_swaps_made_this_loop += 1
|
|
||||||
|
|
||||||
# Check the cactus above
|
|
||||||
if y+1 < world_size and cacti[(x,y)] > cacti[(x,y+1)]:
|
|
||||||
helpers.move_to_coords(x,y)
|
|
||||||
swap(North)
|
|
||||||
temp_cactus = cacti[(x,y)]
|
|
||||||
cacti[(x,y)] = cacti[(x,y+1)]
|
|
||||||
cacti[(x,y+1)] = temp_cactus
|
|
||||||
number_of_swaps_made_this_loop += 1
|
|
||||||
|
|
||||||
if number_of_swaps_made_this_loop == 0:
|
|
||||||
swaps_made = False
|
swaps_made = False
|
||||||
|
|
||||||
def harvest_cacti(cacti):
|
for x in range(start_x, end_x):
|
||||||
for x in range(get_world_size()):
|
helpers.move_to_coords(x, 0)
|
||||||
for y in range(get_world_size()):
|
|
||||||
till_and_plant(cacti)
|
for y in range(world_size):
|
||||||
|
|
||||||
|
current = measure()
|
||||||
|
|
||||||
|
# Compare left
|
||||||
|
if x - 1 > 0:
|
||||||
|
left = measure(West)
|
||||||
|
|
||||||
|
# Only compare fully-grown cacti
|
||||||
|
if current != None and left != None:
|
||||||
|
if current < left:
|
||||||
|
swap(West)
|
||||||
|
swaps_made = True
|
||||||
|
current = measure() # refresh after swap
|
||||||
|
|
||||||
|
# Compare right
|
||||||
|
if x + 1 < world_size:
|
||||||
|
right = measure(East)
|
||||||
|
|
||||||
|
# Only compare fully-grown cacti
|
||||||
|
if current != None and right != None:
|
||||||
|
if current > right:
|
||||||
|
swap(East)
|
||||||
|
swaps_made = True
|
||||||
|
current = measure() # refresh after swap
|
||||||
|
|
||||||
|
# Compare up
|
||||||
|
if y + 1 < world_size:
|
||||||
|
up = measure(North)
|
||||||
|
|
||||||
|
if current != None and up != None:
|
||||||
|
if current > up:
|
||||||
|
swap(North)
|
||||||
|
swaps_made = True
|
||||||
|
|
||||||
move(North)
|
move(North)
|
||||||
move(East)
|
|
||||||
|
|
||||||
sort_cacti(cacti)
|
|
||||||
|
|
||||||
|
def harvest_cacti_columns():
|
||||||
|
world_size = get_world_size()
|
||||||
|
start_x = get_pos_x()
|
||||||
|
end_x = min(start_x + COLUMNS_PER_DRONE, world_size)
|
||||||
|
|
||||||
|
if start_x >= world_size:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Plant owned columns
|
||||||
|
for x in range(start_x, end_x):
|
||||||
|
helpers.move_to_coords(x, 0)
|
||||||
|
for _ in range(world_size):
|
||||||
|
till_and_plant()
|
||||||
|
move(North)
|
||||||
|
sort_local_region(start_x, end_x)
|
||||||
|
|
||||||
|
def spawn_drones():
|
||||||
|
global COLUMNS_PER_DRONE
|
||||||
|
|
||||||
|
world_size = get_world_size()
|
||||||
|
drones = max_drones()
|
||||||
|
|
||||||
|
COLUMNS_PER_DRONE = world_size // drones
|
||||||
|
if COLUMNS_PER_DRONE < 1:
|
||||||
|
COLUMNS_PER_DRONE = 1
|
||||||
|
|
||||||
|
start_x = 0
|
||||||
|
while start_x < world_size:
|
||||||
|
helpers.move_to_coords(start_x, 0)
|
||||||
|
spawn_drone(harvest_cacti_columns)
|
||||||
|
start_x += COLUMNS_PER_DRONE
|
||||||
|
|
||||||
|
# Also run in main drone
|
||||||
|
harvest_cacti_columns()
|
||||||
|
|
||||||
|
# Finally harvest one cactus to trigger a full harvest
|
||||||
helpers.harvest_if_possible()
|
helpers.harvest_if_possible()
|
||||||
@@ -7,7 +7,6 @@ import cacti
|
|||||||
import mazes
|
import mazes
|
||||||
|
|
||||||
sunflowers_array = {} # sunflowers_array[(x, y)] = petals
|
sunflowers_array = {} # sunflowers_array[(x, y)] = petals
|
||||||
cactus_array = {} # cactus_array[(x, y)] = size
|
|
||||||
|
|
||||||
num_loops = 10
|
num_loops = 10
|
||||||
|
|
||||||
@@ -22,11 +21,6 @@ def harvest_sunflowers_wrapper():
|
|||||||
# which are needed as we're passing an argument into the function
|
# which are needed as we're passing an argument into the function
|
||||||
sunflowers.harvest_sunflowers(sunflowers_array)
|
sunflowers.harvest_sunflowers(sunflowers_array)
|
||||||
|
|
||||||
def harvest_cacti_wrapper():
|
|
||||||
# this wrapper function is needed as the game doesn't support llambdas,
|
|
||||||
# which are needed as we're passing an argument into the function
|
|
||||||
cacti.harvest_cacti(cactus_array)
|
|
||||||
|
|
||||||
clear()
|
clear()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@@ -36,5 +30,5 @@ while True:
|
|||||||
run_loop(num_loops, 'pumpkins', pumpkins.harvest_pumpkins_with_multiple_drones)
|
run_loop(num_loops, 'pumpkins', pumpkins.harvest_pumpkins_with_multiple_drones)
|
||||||
sunflowers.initial_planting_performed = False
|
sunflowers.initial_planting_performed = False
|
||||||
run_loop(num_loops * 50, 'sunflowers', harvest_sunflowers_wrapper)
|
run_loop(num_loops * 50, 'sunflowers', harvest_sunflowers_wrapper)
|
||||||
run_loop(1, 'cacti', harvest_cacti_wrapper)
|
run_loop(1, 'cacti', cacti.spawn_drones)
|
||||||
run_loop(1, "maze", mazes.navigate_maze)
|
run_loop(10, "maze", mazes.navigate_maze)
|
||||||
|
|||||||
Reference in New Issue
Block a user