Ver código fonte

+ resizing assets

tBKwtWS 3 semanas atrás
pai
commit
73f07f5e1c
1 arquivos alterados com 48 adições e 16 exclusões
  1. 48 16
      karel_asset.py

+ 48 - 16
karel_asset.py

@@ -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))