|
|
@@ -47,8 +47,8 @@ def generate_random_colour(sort:str="hex"):
|
|
|
logger.debug(f"Generated random colour: {colour}")
|
|
|
return colour
|
|
|
|
|
|
-# Base the size on the shortest pane
|
|
|
-def determine_max_size(canvas):
|
|
|
+# Base the maximum random size on the shortest pane
|
|
|
+def determine_random_size(canvas):
|
|
|
if canvas.width < canvas.height:
|
|
|
size = random.randint(1, canvas.width)
|
|
|
else:
|
|
|
@@ -277,15 +277,15 @@ def recolour_asset(asset, colour:str="black", background:str="white"):
|
|
|
case "beeper": new_asset = draw_beeper(asset[1][0], asset[1][1], asset[1][2], asset[1][3], asset[1][4], asset[1][5], asset[1][6], asset[1][7])
|
|
|
erase_asset(asset)
|
|
|
|
|
|
- logger.debug(f"Re-coloured Karel {asset[2]} with {colour} and {background}: {new_asset}")
|
|
|
+ logger.debug(f"Re-coloured {asset[2]} with {colour} and {background}: {new_asset}")
|
|
|
return new_asset
|
|
|
|
|
|
# Draw a random asset on the canvas
|
|
|
-def generate_random_asset(canvas, karel_prevelance:int="3"):
|
|
|
+def generate_random_asset(canvas, karel_prevelance:int=3, centre_x="random", centre_y="random", size="random"):
|
|
|
asset_type = random.randint(1, karel_prevelance)
|
|
|
match asset_type:
|
|
|
- case 1: asset = generate_random_beeper(canvas)
|
|
|
- case _: asset = generate_random_karel(canvas)
|
|
|
+ case 1: asset = generate_random_beeper(canvas, centre_x, centre_y, size)
|
|
|
+ case _: asset = generate_random_karel(canvas, centre_x, centre_y, size)
|
|
|
|
|
|
return asset
|
|
|
|
|
|
@@ -298,13 +298,37 @@ def generate_outofbounds_random_asset(canvas, side:str, karel_prevelance:int=6):
|
|
|
|
|
|
return asset
|
|
|
|
|
|
+# Resize an asset realtive to its previous size
|
|
|
+def relative_resize_asset(asset, size_difference:int):
|
|
|
+ asset[1][3] += size_difference
|
|
|
+
|
|
|
+ match asset[2]:
|
|
|
+ case "karel": new_asset = draw_karel(asset[1][0], asset[1][1], asset[1][2], asset[1][3], asset[1][4], asset[1][5], asset[1][6], asset[1][7])
|
|
|
+ case "beeper": new_asset = draw_beeper(asset[1][0], asset[1][1], asset[1][2], asset[1][3], asset[1][4], asset[1][5], asset[1][6], asset[1][7])
|
|
|
+ erase_asset(asset)
|
|
|
+
|
|
|
+ logger.debug(f"Re-sized {asset[2]} by {size_difference} to {asset[1][3]}: {new_asset}")
|
|
|
+ return new_asset
|
|
|
+
|
|
|
+# Resize an asset to a new absolute size
|
|
|
+def absolute_resize_asset(asset, size:int):
|
|
|
+ asset[1][3] = size
|
|
|
+
|
|
|
+ match asset[2]:
|
|
|
+ case "karel": new_asset = draw_karel(asset[1][0], asset[1][1], asset[1][2], asset[1][3], asset[1][4], asset[1][5], asset[1][6], asset[1][7])
|
|
|
+ case "beeper": new_asset = draw_beeper(asset[1][0], asset[1][1], asset[1][2], asset[1][3], asset[1][4], asset[1][5], asset[1][6], asset[1][7])
|
|
|
+ erase_asset(asset)
|
|
|
+
|
|
|
+ logger.debug(f"Re-sized {asset[2]} to {size}: {new_asset}")
|
|
|
+ return new_asset
|
|
|
+
|
|
|
|
|
|
"""
|
|
|
Karel functions
|
|
|
"""
|
|
|
# Draw a random Karel outside the canvas
|
|
|
def generate_outofbounds_random_karel(canvas, side:str):
|
|
|
- size = determine_max_size(canvas)
|
|
|
+ size = determine_random_size(canvas)
|
|
|
|
|
|
# Generate random coordinates (Outside the canvas geometry)
|
|
|
match side:
|
|
|
@@ -328,12 +352,16 @@ def generate_outofbounds_random_karel(canvas, side:str):
|
|
|
return draw_karel(canvas, centre_x, centre_y, size, orientation, "random", "random", transparent)
|
|
|
|
|
|
# Draw a random Karel on the canvas
|
|
|
-def generate_random_karel(canvas):
|
|
|
- size = determine_max_size(canvas)
|
|
|
+def generate_random_karel(canvas, centre_x="random", centre_y="random", size="random"):
|
|
|
+ if size == "random":
|
|
|
+ size = determine_random_size(canvas)
|
|
|
|
|
|
# Generate random values (Inside the canvas geometry)
|
|
|
- centre_x = random.randint(int(size / 2), int(canvas.width - size / 2))
|
|
|
- centre_y = random.randint(int(size / 2), int(canvas.height - size / 2))
|
|
|
+ if centre_x == "random":
|
|
|
+ centre_x = random.randint(int(size / 2), int(canvas.width - size / 2))
|
|
|
+ if centre_y == "random":
|
|
|
+ centre_y = random.randint(int(size / 2), int(canvas.height - size / 2))
|
|
|
+
|
|
|
orientation = random.choice(["east", "east-flipped", "north", "north-flipped", "west", "west-flipped", "south", "south-flipped"])
|
|
|
transparent = random.choice((True, False, False, False))
|
|
|
|
|
|
@@ -659,7 +687,7 @@ perhaps in coordinated group movements with Karels.
|
|
|
"""
|
|
|
# Draw a random Karel outside the canvas
|
|
|
def generate_outofbounds_random_beeper(canvas, side:str):
|
|
|
- size = determine_max_size(canvas)
|
|
|
+ size = determine_random_size(canvas)
|
|
|
|
|
|
# Generate random coordinates (Outside the canvas geometry)
|
|
|
match side:
|
|
|
@@ -682,12 +710,16 @@ def generate_outofbounds_random_beeper(canvas, side:str):
|
|
|
|
|
|
return draw_beeper(canvas, centre_x, centre_y, size, orientation, "random", "random", transparent)
|
|
|
|
|
|
-def generate_random_beeper(canvas):
|
|
|
- size = determine_max_size(canvas)
|
|
|
+def generate_random_beeper(canvas, centre_x="random", centre_y="random", size="random"):
|
|
|
+ if size == "random":
|
|
|
+ size = determine_random_size(canvas)
|
|
|
|
|
|
# Generate random values (Inside the canvas geometry)
|
|
|
- centre_x = random.randint(int(size / 2), int(canvas.width - size / 2))
|
|
|
- centre_y = random.randint(int(size / 2), int(canvas.height - size / 2))
|
|
|
+ if centre_x == "random":
|
|
|
+ centre_x = random.randint(int(size / 2), int(canvas.width - size / 2))
|
|
|
+ if centre_y == "random":
|
|
|
+ centre_y = random.randint(int(size / 2), int(canvas.height - size / 2))
|
|
|
+
|
|
|
orientation = random.choice(["east", "east-flipped", "north", "north-flipped", "west", "west-flipped", "south", "south-flipped"])
|
|
|
transparent = random.choice((True, False, False, False))
|
|
|
|