|
@@ -185,20 +185,6 @@ my_karel = draw_karel(canvas, colour="red", background="blue")
|
|
|
my_karel = erase_asset(my_karel)
|
|
my_karel = erase_asset(my_karel)
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### Generating a random asset
|
|
|
|
|
-To generate a random asset, use generate_random_asset(canvas, karel_prevelance:int=3, centre_x="random", centre_y="random", size="random"):
|
|
|
|
|
-```
|
|
|
|
|
-my_asset = generate_random_asset(canvas)
|
|
|
|
|
-```
|
|
|
|
|
-By default there will be approximately 1 beeper for every two karels, this can be changed with the karel_prevelance argument.
|
|
|
|
|
-Draw approximately 50% beepers and 50% Karels:
|
|
|
|
|
-```
|
|
|
|
|
-my_asset = generate_random_asset(canvas, karel_prevelance:int=2)
|
|
|
|
|
-```
|
|
|
|
|
-In case the preference is to only have random orientations and colours, optionally the size and or centre_x & centre_y coordiantes can be specified.
|
|
|
|
|
-
|
|
|
|
|
-### Generating a random asset outside the canvas
|
|
|
|
|
-
|
|
|
|
|
### Generating a random karel
|
|
### Generating a random karel
|
|
|
To draw a Karel with a rondom properties, use generate_random_karel(canvas, centre_x="random", centre_y="random", size="random"):
|
|
To draw a Karel with a rondom properties, use generate_random_karel(canvas, centre_x="random", centre_y="random", size="random"):
|
|
|
```
|
|
```
|
|
@@ -207,34 +193,84 @@ my_karel = generate_random_karel(canvas)
|
|
|
Optionally the coordiantes and/or size can be specified.
|
|
Optionally the coordiantes and/or size can be specified.
|
|
|
|
|
|
|
|
### Generating a Karel outside the canvas
|
|
### Generating a Karel outside the canvas
|
|
|
-To draw a Karel outside of the canvas, to perhaps be later slid into view, use generate_outofbounds_random_karel(canvas, side):
|
|
|
|
|
|
|
+To draw a Karel outside of the canvas, to perhaps be later slid into view, use generate_outofbounds_random_karel(canvas, side)
|
|
|
|
|
+Side options:
|
|
|
|
|
+* top
|
|
|
|
|
+* left
|
|
|
|
|
+* bottom
|
|
|
|
|
+* right
|
|
|
|
|
+To generate a Karel left of teh canvas:
|
|
|
```
|
|
```
|
|
|
my_karel = generate_outofbounds_random_karel(canvas, "left")
|
|
my_karel = generate_outofbounds_random_karel(canvas, "left")
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
|
+### Drawing a beeper
|
|
|
|
|
+Works the same as drawing a Karel, available arguments:
|
|
|
|
|
+* canvas
|
|
|
|
|
+* centre_x
|
|
|
|
|
+* centre_y
|
|
|
|
|
+* size
|
|
|
|
|
+* orientation
|
|
|
|
|
+* colour
|
|
|
|
|
+* background
|
|
|
|
|
+* transparent
|
|
|
|
|
+Draw a beeper:
|
|
|
|
|
+```
|
|
|
|
|
+my_beeper = draw_beeper(canvas)
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
|
|
+### Generating a random beeper
|
|
|
|
|
+Works the same as generating a random Karel, use generate_random_beeper(canvas, centre_x="random", centre_y="random", size="random"):
|
|
|
|
|
+```
|
|
|
|
|
+generate_random_beeper(canvas)
|
|
|
|
|
+```
|
|
|
|
|
+Optionally the coordiantes and/or size can be specified.
|
|
|
|
|
|
|
|
|
|
+### Generating a random beeper outside the canvas
|
|
|
|
|
+To generate a beeper outside of the canvas, to slide it into it later, use generate_outofbounds_random_beeper(canvas, side)
|
|
|
|
|
+Side options:
|
|
|
|
|
+* top
|
|
|
|
|
+* left
|
|
|
|
|
+* bottom
|
|
|
|
|
+* right
|
|
|
|
|
+To draw a beeper under(south of) the canvas:
|
|
|
|
|
+```
|
|
|
|
|
+generate_outofbounds_random_beeper(canvas, "bottom")
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
|
|
+### Generating a random asset
|
|
|
|
|
+To generate a random asset, use generate_random_asset(canvas, karel_prevelance:int=4, centre_x="random", centre_y="random", size="random"):
|
|
|
|
|
+```
|
|
|
|
|
+my_asset = generate_random_asset(canvas)
|
|
|
|
|
+```
|
|
|
|
|
+Optionally the coordiantes and/or size can be specified.
|
|
|
|
|
|
|
|
-### Drawing and generating a beeper
|
|
|
|
|
-Works the same as drawing and generating a karel, available commands:
|
|
|
|
|
-* draw_beeper(canvas, centre_x:int=25, centre_y:int=25, size:int=50, orientation:str="east", colour:str="black", background:str="cyan", transparent:bool=False)
|
|
|
|
|
-* generate_random_beeper(canvas)
|
|
|
|
|
-* generate_outofbounds_random_beeper(canvas, side:str)
|
|
|
|
|
-
|
|
|
|
|
-### Generating a random out of bounds asset
|
|
|
|
|
-To draw a Karel outside of the canvas. Possible use is to slide it into the canvas.
|
|
|
|
|
-Works the same as drawing and generating a karel, available commands:
|
|
|
|
|
-* generate_random_asset(canvas)
|
|
|
|
|
-* generate_outofbounds_random_asset(canvas, side:str)
|
|
|
|
|
|
|
+By default there will be approximately 1 in four assets will be a beeper the remaining three will be Karels, this can be changed with the karel_prevelance argument.
|
|
|
|
|
+Draw approximately 50% beepers and 50% Karels:
|
|
|
|
|
+```
|
|
|
|
|
+my_asset = generate_random_asset(canvas, karel_prevelance:int=2)
|
|
|
|
|
+```
|
|
|
|
|
+In case the preference is to only have random orientations and colours, optionally the size and or centre_x & centre_y coordiantes can be specified.
|
|
|
|
|
+Generate a random asset in the middle of the canvas:
|
|
|
|
|
+```
|
|
|
|
|
+my_asset = generate_random_asset(canvas, centre_x=int(canvas.width / 2), centre_y=int(canvas.height / 2))
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
-### Generating a random colour
|
|
|
|
|
-To get a random colour value to use in your own graphical shape, use generate_random_colour().
|
|
|
|
|
|
|
+### Generating a random asset outside the canvas
|
|
|
|
|
+To generate a random asset outside of the canvas, use generate_outofbounds_random_asset(canvas, side, karel_prevelance:int=4)
|
|
|
Side options:
|
|
Side options:
|
|
|
* top
|
|
* top
|
|
|
* left
|
|
* left
|
|
|
* bottom
|
|
* bottom
|
|
|
* right
|
|
* right
|
|
|
|
|
+Generate an asset above the canvas:
|
|
|
|
|
+```
|
|
|
|
|
+my_asset = generate_outofbounds_random_asset(canvas, "top")
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### Generating a random colour
|
|
|
|
|
+To get a random colour value to use in your own graphical shape, use generate_random_colour().
|
|
|
|
|
+
|
|
|
To generate a random HEX colour:
|
|
To generate a random HEX colour:
|
|
|
```
|
|
```
|
|
|
my_colour = generate_random_colour()
|
|
my_colour = generate_random_colour()
|
|
@@ -244,11 +280,13 @@ To generate a random RGB colour:
|
|
|
```
|
|
```
|
|
|
my_colour = generate_random_colour("rgb")
|
|
my_colour = generate_random_colour("rgb")
|
|
|
```
|
|
```
|
|
|
-To generate a random ANSI colour:
|
|
|
|
|
|
|
+To generate a random ANSI colour as print statement:
|
|
|
```
|
|
```
|
|
|
print("White or default")
|
|
print("White or default")
|
|
|
|
|
+generate_random_colour("print-ansi")
|
|
|
|
|
+print("Some colour")
|
|
|
colour = generate_random_colour("ansi")
|
|
colour = generate_random_colour("ansi")
|
|
|
-print(f"{colour}Some colour")
|
|
|
|
|
|
|
+print(f"{colour}Some other colour")
|
|
|
|
|
|
|
|
print(f"{generate_random_colour("ansi")}Some {generate_random_colour("ansi")}other {generate_random_colour("ansi")}colour {generate_random_colour("ansi")}for {generate_random_colour("ansi")}each {generate_random_colour("ansi")}word{generate_random_colour("ansi")}.")
|
|
print(f"{generate_random_colour("ansi")}Some {generate_random_colour("ansi")}other {generate_random_colour("ansi")}colour {generate_random_colour("ansi")}for {generate_random_colour("ansi")}each {generate_random_colour("ansi")}word{generate_random_colour("ansi")}.")
|
|
|
|
|
|
|
@@ -263,7 +301,7 @@ background = generate_random_background(canvas)
|
|
|
## Example
|
|
## Example
|
|
|
```
|
|
```
|
|
|
from graphics import Canvas
|
|
from graphics import Canvas
|
|
|
-from karel_asset import *
|
|
|
|
|
|
|
+from karel_asset import * # https://git.h0v1n8.nl/Stanford/karel_asset
|
|
|
from time import sleep
|
|
from time import sleep
|
|
|
|
|
|
|
|
# Constants
|
|
# Constants
|
|
@@ -271,14 +309,20 @@ CANVAS_WIDTH = 200
|
|
|
CANVAS_HEIGHT = 200
|
|
CANVAS_HEIGHT = 200
|
|
|
|
|
|
|
|
def main():
|
|
def main():
|
|
|
- canvas = Canvas(CANVAS_WIDTH, CANVAS_HEIGHT)
|
|
|
|
|
-
|
|
|
|
|
- # Create a background
|
|
|
|
|
- background = generate_random_background(canvas)
|
|
|
|
|
-
|
|
|
|
|
# Demo loop
|
|
# Demo loop
|
|
|
while True: # Keep repeating the following code forever
|
|
while True: # Keep repeating the following code forever
|
|
|
-
|
|
|
|
|
|
|
+ # Into text in random colour
|
|
|
|
|
+ generate_random_colour("print-ansi")
|
|
|
|
|
+ print("Welcome")
|
|
|
|
|
+ print(generate_random_colour("ansi") + "To", generate_random_colour("ansi") + "the", generate_random_colour("ansi") + "demo" + generate_random_colour("ansi") + "!")
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ canvas = Canvas(CANVAS_WIDTH, CANVAS_HEIGHT) # Create the canvas
|
|
|
|
|
+
|
|
|
|
|
+ # Create a random background
|
|
|
|
|
+ background = generate_random_background(canvas)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
# Draw four Karels
|
|
# Draw four Karels
|
|
|
karel_east = draw_karel(canvas, 35, 35)
|
|
karel_east = draw_karel(canvas, 35, 35)
|
|
|
karel_east_mirrored = draw_karel(canvas, 85, 35, orientation="east-flipped", colour="red")
|
|
karel_east_mirrored = draw_karel(canvas, 85, 35, orientation="east-flipped", colour="red")
|
|
@@ -288,22 +332,75 @@ def main():
|
|
|
# Draw a beeper
|
|
# Draw a beeper
|
|
|
my_beeper = draw_beeper(canvas, 100, 100)
|
|
my_beeper = draw_beeper(canvas, 100, 100)
|
|
|
|
|
|
|
|
- # Wait five seconds
|
|
|
|
|
- sleep(5)
|
|
|
|
|
|
|
+ # Wait two seconds
|
|
|
|
|
+ sleep(2)
|
|
|
|
|
|
|
|
# Change the colour of one Karel to random colours
|
|
# Change the colour of one Karel to random colours
|
|
|
karel_east = recolour_asset(karel_east, "random", "random")
|
|
karel_east = recolour_asset(karel_east, "random", "random")
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Move one Karel relative to its position
|
|
|
|
|
+ karel_east_mirrored = relative_move_asset(karel_east_mirrored, 10, 120)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
|
|
|
- # Move one Karel
|
|
|
|
|
- karel_east_mirrored = move_asset(karel_east_mirrored, 10, 10)
|
|
|
|
|
|
|
+ # Move another Karel to new coordinates
|
|
|
|
|
+ karel_west_mirrored = absolute_move_asset(karel_west_mirrored, 150, 150)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Move another Karel forward
|
|
|
|
|
+ karel_west = orientation_move_asset(karel_west, "forward", 10)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
|
|
|
# Rotate another karel eight times, and wait one second after each time
|
|
# Rotate another karel eight times, and wait one second after each time
|
|
|
for i in range(8):
|
|
for i in range(8):
|
|
|
- rotate_asset(karel_east_mirrored, "right")
|
|
|
|
|
- sleep(1)
|
|
|
|
|
|
|
+ karel_east_mirrored = rotate_asset(karel_east_mirrored, "right")
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Change the colour of a Karel to a random colour
|
|
|
|
|
+ karel_east = recolour_asset(karel_east, "random")
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
|
|
|
- # Wait five seconds
|
|
|
|
|
- sleep(5)
|
|
|
|
|
|
|
+ # Generate a random Karel
|
|
|
|
|
+ random_karel = generate_random_karel(canvas)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Shrink the random Karel
|
|
|
|
|
+ for i in range(random_karel[1][3]):
|
|
|
|
|
+ random_karel = relative_resize_asset(random_karel, -1)
|
|
|
|
|
+ sleep(0.01)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Set the size of the random Karel to 25
|
|
|
|
|
+ random_karel = absolute_resize_asset(random_karel, 25)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Generate a random asset
|
|
|
|
|
+ random_asset = generate_random_asset(canvas)
|
|
|
|
|
+
|
|
|
|
|
+ # Draw a random asset outside the canvas and slide it into the canvas
|
|
|
|
|
+ random_OOB_asset = generate_outofbounds_random_asset(canvas, "left")
|
|
|
|
|
+ for i in range(random_OOB_asset[1][3] + 5):
|
|
|
|
|
+ random_OOB_asset = relative_move_asset(random_OOB_asset, x=1)
|
|
|
|
|
+ sleep(0.01)
|
|
|
|
|
+
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
|
|
|
# Erase four Karels
|
|
# Erase four Karels
|
|
|
erase_asset(karel_east)
|
|
erase_asset(karel_east)
|
|
@@ -311,6 +408,13 @@ def main():
|
|
|
erase_asset(karel_west)
|
|
erase_asset(karel_west)
|
|
|
erase_asset(karel_west_mirrored)
|
|
erase_asset(karel_west_mirrored)
|
|
|
|
|
|
|
|
|
|
+ # Wait half a second
|
|
|
|
|
+ sleep(.5)
|
|
|
|
|
+
|
|
|
|
|
+ # Clear the canvas
|
|
|
|
|
+ for obj_id in list(canvas.shapes.keys()):
|
|
|
|
|
+ canvas.delete(obj_id)
|
|
|
|
|
+
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
|
main()
|
|
main()
|