karel_zoomer.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from graphics import Canvas
  2. from karel_asset import * # https://git.h0v1n8.nl/Stanford/karel_asset
  3. from time import sleep
  4. CANVAS_WIDTH = 400
  5. CANVAS_HEIGHT = 400
  6. def main():
  7. canvas = Canvas(CANVAS_WIDTH, CANVAS_HEIGHT)
  8. while True: # Loop forever
  9. background = generate_random_background(canvas)
  10. sleep(0.5)
  11. # Set up asset stack
  12. amount = random.randint(5, 10) # Pick random amount of assets
  13. stack = {} # Create stack dictionary
  14. for _ in range(amount): # Create the amount of assets
  15. asset = generate_random_asset(canvas, karel_prevelance=6, centre_x=int(CANVAS_WIDTH / 2), centre_y=int(CANVAS_HEIGHT / 2), size=0) # Generate asset
  16. delay = random.randint(0, int(canvas.width * 1)) # Set random delay of a maximum of two canvas widths
  17. speed = random.choice((1, 2, 3, 4, 5)) # Set random speed
  18. name = "karel_" + str(_) # Set dictionary key
  19. stack.update({name: [asset, delay, speed]}) # Append entry to dictionary
  20. # Slide assets
  21. for i in range(int(canvas.width * 1.5)): # Zoom for 1.5 canvas widths
  22. for key, value in stack.items(): # Loop over asset dictionary
  23. if value[1] < i: # If delay has passed
  24. asset = relative_resize_asset(value[0], size_difference=value[2]) # Resize the assset
  25. stack.update({key: [asset, value[1], value[2]]}) # Update the dictionary
  26. sleep(0.01) # Wait shortly so the sliding is not CPU speed based
  27. # Erase assets in asset stack
  28. for value in stack.values():
  29. erase_asset(value[0])
  30. # Erase background for in the next loop a new one will be created
  31. canvas.delete(background)
  32. if __name__ == '__main__':
  33. main()