ソースを参照

Less shapes by using polygons

More efficiency
tBKwtWS 1 ヶ月 前
コミット
efcd7239e4
1 ファイル変更66 行追加158 行削除
  1. 66 158
      karel_asset.py

+ 66 - 158
karel_asset.py

@@ -426,49 +426,20 @@ def draw_karel(
         case "east" | "east-flipped" | "west" | "west-flipped":
             if not transparent:
                 # Meat
-                top_fill = canvas.create_rectangle(
-                    top_left_corner[0],
-                    top_left_corner[1],
-                    right_diagonal_top[0],
-                    eye_top,
-                    background,
-                    background
-                )
-                top_corner_fill = canvas.create_polygon(
-                    right_diagonal_top[0] , right_diagonal_top[1],
+                filler = canvas.create_polygon(
+                    top_left_corner[0], top_left_corner[1],
+                    right_diagonal_top[0], right_diagonal_top[1],
                     right_diagonal_bottom[0], right_diagonal_bottom[1],
-                    eye_right, eye_top,
-                    color = background,
-                    outline = background
-                )
-                left_fill = canvas.create_rectangle(
-                    top_left_corner[0],
-                    eye_top,
-                    eye_left,
-                    left_diagonal_top[1],
-                    background,
-                    background
-                )
-                right_fill = canvas.create_rectangle(
-                    eye_right,
-                    eye_top,
-                    right_diagonal_bottom[0],
-                    eye_bottom,
-                    background,
-                    background
-                )
-                bottom_fill = canvas.create_rectangle(
-                    eye_left,
-                    eye_bottom,
-                    bottom_right_corner[0],
-                    bottom_right_corner[1],
-                    background,
-                    background
-                )
-                bottom_corner_fill = canvas.create_polygon(
-                    left_diagonal_top[0], left_diagonal_top[1],
-                    eye_left, left_diagonal_top[1],
+                    bottom_right_corner[0], bottom_right_corner[1],
                     left_diagonal_bottom[0], left_diagonal_bottom[1],
+                    left_diagonal_top[0], left_diagonal_top[1],
+                    top_left_corner[0], eye_top,
+                    eye_left, eye_top,
+                    eye_left, eye_bottom,
+                    eye_left, eye_bottom,
+                    eye_right, eye_bottom,
+                    eye_right, eye_top,
+                    top_left_corner[0], eye_top,
                     color = background,
                     outline = background
                 )
@@ -504,37 +475,25 @@ def draw_karel(
                 bottom_right_corner[0], bottom_right_corner[1],
                 colour
             )
-            left_leg = canvas.create_rectangle(
-                leftLeg_left,
-                leftLeg_top,
-                leftLeg_right,
-                leftLeg_bottom,
-                colour,
-                colour
-            )
-            left_foot = canvas.create_rectangle(
-                leftFoot_left,
-                leftFoot_top,
-                leftFoot_right,
-                leftFoot_bottom,
-                colour,
-                colour
+            left_appendage = canvas.create_polygon(
+                leftLeg_left, leftLeg_top,
+                leftLeg_right, leftLeg_top,
+                leftLeg_right, leftLeg_bottom,
+                leftFoot_right, leftFoot_top,
+                leftFoot_right, leftFoot_bottom,
+                leftFoot_left, leftFoot_bottom,
+                color = colour,
+                outline = colour
             )
-            right_leg = canvas.create_rectangle(
-                rightLeg_left,
-                rightLeg_top,
-                rightLeg_right,
-                rightLeg_bottom,
-                colour,
-                colour
-            )
-            right_foot = canvas.create_rectangle(
-                rightFoot_left,
-                rightFoot_top,
-                rigthFoot_right,
-                rightFoot_bottom,
-                colour,
-                colour
+            right_appendage = canvas.create_polygon(
+                rightLeg_left, rightLeg_top,
+                rightLeg_right, rightLeg_top,
+                rightFoot_left, rightFoot_top,
+                rigthFoot_right, rightFoot_top,
+                rigthFoot_right, rightFoot_bottom,
+                rightLeg_left, rightFoot_bottom,
+                color = colour,
+                outline = colour
             )
             eye = canvas.create_rectangle(
                 eye_left,
@@ -550,52 +509,24 @@ def draw_karel(
                 colour
             )
         
+        # X and Y coordinates swapped for these orientations
         case "north" | "north-flipped" | "south" | "south-flipped":
             if not transparent:
                 # Meat
-                top_fill = canvas.create_rectangle(
-                    top_left_corner[1],             # Top Y
-                    right_diagonal_top[0],          # Right X
-                    eye_top,                        # Bottom Y
-                    top_left_corner[0],             # Left X
-                    background,
-                    background
-                )
-                top_corner_fill = canvas.create_polygon(
-                    right_diagonal_top[1] , right_diagonal_top[0],
+                filler = canvas.create_polygon(
+                    top_left_corner[1], top_left_corner[0],
+                    right_diagonal_top[1], right_diagonal_top[0],
                     right_diagonal_bottom[1], right_diagonal_bottom[0],
-                    eye_top, eye_right,
-                    color = background,
-                    outline = background
-                )
-                left_fill = canvas.create_rectangle(
-                    eye_top,
-                    eye_left,
-                    left_diagonal_top[1],
-                    top_left_corner[0],
-                    background,
-                    background
-                )
-                right_fill = canvas.create_rectangle(
-                    eye_top,
-                    right_diagonal_bottom[0],
-                    eye_bottom,
-                    eye_right,
-                    background,
-                    background
-                )
-                bottom_fill = canvas.create_rectangle(
-                    eye_bottom,
-                    bottom_right_corner[0],
-                    bottom_right_corner[1],
-                    eye_left,
-                    background,
-                    background
-                )
-                bottom_corner_fill = canvas.create_polygon(
-                    left_diagonal_top[1], left_diagonal_top[0],
-                    left_diagonal_top[1], eye_left,
+                    #eye_bottom, right_diagonal_bottom[0],
+                    bottom_right_corner[1], bottom_right_corner[0],
                     left_diagonal_bottom[1], left_diagonal_bottom[0],
+                    left_diagonal_top[1], left_diagonal_top[0],
+                    eye_top, top_left_corner[0],
+                    eye_top, eye_left,
+                    eye_bottom, eye_left,
+                    eye_bottom, eye_right,
+                    eye_top, eye_right,
+                    eye_top, top_left_corner[0],
                     color = background,
                     outline = background
                 )
@@ -631,37 +562,25 @@ def draw_karel(
                 bottom_right_corner[1], bottom_right_corner[0],
                 colour
             )
-            left_leg = canvas.create_rectangle(
-                leftLeg_top,
-                leftLeg_right,
-                leftLeg_bottom,
-                leftLeg_left,
-                colour,
-                colour
-            )
-            left_foot = canvas.create_rectangle(
-                leftFoot_top,
-                leftFoot_right,
-                leftFoot_bottom,
-                leftFoot_left,
-                colour,
-                colour
+            left_appendage = canvas.create_polygon(
+                leftLeg_top, leftLeg_left,
+                leftLeg_top, leftLeg_right,
+                leftLeg_bottom, leftLeg_right,
+                leftFoot_top, leftFoot_right,
+                leftFoot_bottom, leftFoot_right,
+                leftFoot_bottom, leftFoot_left,
+                color = colour,
+                outline = colour
             )
-            right_leg = canvas.create_rectangle(
-                rightLeg_top,
-                rightLeg_right,
-                rightLeg_bottom,
-                rightLeg_left,
-                colour,
-                colour
-            )
-            right_foot = canvas.create_rectangle(
-                rightFoot_top,
-                rigthFoot_right,
-                rightFoot_bottom,
-                rightFoot_left,
-                colour,
-                colour
+            right_appendage = canvas.create_polygon(
+                rightLeg_top, rightLeg_left,
+                rightLeg_top, rightLeg_right,
+                rightFoot_top, rightFoot_left,
+                rightFoot_top, rigthFoot_right,
+                rightFoot_bottom, rigthFoot_right,
+                rightFoot_bottom, rightLeg_left,
+                color = colour,
+                outline = colour
             )
             eye = canvas.create_rectangle(
                 eye_top,
@@ -686,33 +605,22 @@ def draw_karel(
             "bottom_corner": bottom_corner,
             "bottom_line": bottom_line,
             "right_line": right_line,
-            "left_leg": left_leg,
-            "left_foot": left_foot,
-            "right_foot": right_foot,
-            "right_leg": right_leg,
-            "right_foot": right_foot,
+            "left_appendage": left_appendage,
+            "right_appendage": right_appendage,
             "eye": eye,
             "mouth": mouth
         }
     else:   # Not transparent
         shapes = {
-            "top_fill": top_fill,
-            "top_corner_fill": top_corner_fill,
-            "left_fill": left_fill,
-            "right_fill": right_fill,
-            "bottom_fill": bottom_fill,
-            "bottom_corner_fill": bottom_corner_fill,
+            "filler": filler,
             "top_line": top_line,
             "top_corner": top_corner,
             "left_line": left_line,
             "bottom_corner": bottom_corner,
             "bottom_line": bottom_line,
             "right_line": right_line,
-            "left_leg": left_leg,
-            "left_foot": left_foot,
-            "right_foot": right_foot,
-            "right_leg": right_leg,
-            "right_foot": right_foot,
+            "left_appendage": left_appendage,
+            "right_appendage": right_appendage,
             "eye": eye,
             "mouth": mouth
         }