125 lines
3.1 KiB
Python
125 lines
3.1 KiB
Python
"""
|
|
Example "Arcade" library code.
|
|
|
|
If Python and Arcade are installed, this example can be run from the command line with:
|
|
python -m arcade.examples.decorator_drawing_example
|
|
"""
|
|
|
|
# Library imports
|
|
import arcade
|
|
import random
|
|
|
|
SCREEN_WIDTH = 800
|
|
SCREEN_HEIGHT = 600
|
|
SCREEN_TITLE = "Drawing With Decorators Example"
|
|
|
|
window = arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
|
|
|
|
bird_list = []
|
|
|
|
|
|
def setup():
|
|
create_birds()
|
|
arcade.schedule(update, 1 / 60)
|
|
arcade.run()
|
|
|
|
|
|
def create_birds():
|
|
for bird_count in range(10):
|
|
x = random.randrange(SCREEN_WIDTH)
|
|
y = random.randrange(SCREEN_HEIGHT/2, SCREEN_HEIGHT)
|
|
bird_list.append([x, y])
|
|
|
|
|
|
def update(delta_time):
|
|
"""
|
|
This is run every 1/60 of a second or so. Do not draw anything
|
|
in this function.
|
|
"""
|
|
change_y = 0.3
|
|
|
|
for bird in bird_list:
|
|
bird[0] += change_y
|
|
if bird[0] > SCREEN_WIDTH + 20:
|
|
bird[0] = -20
|
|
|
|
|
|
@window.event
|
|
def on_draw():
|
|
"""
|
|
This is called every time we need to update our screen. About 60
|
|
times per second.
|
|
|
|
Just draw things in this function, don't update where they are.
|
|
"""
|
|
# Call our drawing functions.
|
|
draw_background()
|
|
draw_birds()
|
|
draw_trees()
|
|
|
|
|
|
def draw_background():
|
|
"""
|
|
This function draws the background. Specifically, the sky and ground.
|
|
"""
|
|
# Draw the sky in the top two-thirds
|
|
arcade.draw_rectangle_filled(SCREEN_WIDTH / 2, SCREEN_HEIGHT * 2 / 3,
|
|
SCREEN_WIDTH - 1, SCREEN_HEIGHT * 2 / 3,
|
|
arcade.color.SKY_BLUE)
|
|
|
|
# Draw the ground in the bottom third
|
|
arcade.draw_rectangle_filled(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 6,
|
|
SCREEN_WIDTH - 1, SCREEN_HEIGHT / 3,
|
|
arcade.color.DARK_SPRING_GREEN)
|
|
|
|
|
|
def draw_birds():
|
|
for bird in bird_list:
|
|
# Draw the bird.
|
|
draw_bird(bird[0], bird[1])
|
|
|
|
|
|
def draw_bird(x, y):
|
|
"""
|
|
Draw a bird using a couple arcs.
|
|
"""
|
|
arcade.draw_arc_outline(x, y, 20, 20, arcade.color.BLACK, 0, 90)
|
|
arcade.draw_arc_outline(x + 40, y, 20, 20, arcade.color.BLACK, 90, 180)
|
|
|
|
|
|
def draw_trees():
|
|
|
|
# Draw the top row of trees
|
|
for x in range(45, SCREEN_WIDTH, 90):
|
|
draw_pine_tree(x, SCREEN_HEIGHT / 3)
|
|
|
|
# Draw the bottom row of trees
|
|
for x in range(65, SCREEN_WIDTH, 90):
|
|
draw_pine_tree(x, (SCREEN_HEIGHT / 3) - 120)
|
|
|
|
|
|
def draw_pine_tree(center_x, center_y):
|
|
"""
|
|
This function draws a pine tree at the specified location.
|
|
|
|
Args:
|
|
:center_x: x position of the tree center.
|
|
:center_y: y position of the tree trunk center.
|
|
"""
|
|
# Draw the trunk center_x
|
|
arcade.draw_rectangle_filled(center_x, center_y, 20, 40, arcade.color.DARK_BROWN)
|
|
|
|
tree_bottom_y = center_y + 20
|
|
|
|
# Draw the triangle on top of the trunk
|
|
point_list = ((center_x - 40, tree_bottom_y),
|
|
(center_x, tree_bottom_y + 100),
|
|
(center_x + 40, tree_bottom_y))
|
|
|
|
arcade.draw_polygon_filled(point_list, arcade.color.DARK_GREEN)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
setup()
|
|
|