In this article, we are going to display snowfall using the arcade Python Package. The Arcade library is a modern Python Module used widely for developing 2D video games with compelling graphics and sound. It is an object-oriented library and can be installed like any other Python Package.
Step-by-step Approach:
- First and foremost step in this series is to import the arcade library in your Python IDE. Also import random and math module, since in displaying snowfall at random places on the screen.
Python3
# Import required modules import random import math import arcade |
- Specify the values for screen width, height, and title of the output screen.
Python3
# Adjust window attributes Width = 800 Height = 600 Title = "SnowFall" |
- Define a class snow_fall which consists of __init__ method and a function to reset snowfall to random position above screen.
Python3
class snow_fall: def __init__( self ): self .x = 0 self .y = 0 def reset_snow( self ): # Reset flake to random position above screen self .y = random.randrange(Height, Height + 100 ) self .x = random.randrange(Width) |
- Now, define another class snowfall() and function to randomly position snowfall.
Python3
class snowfall(arcade.Window): def __init__( self , width, height, title): # Calls "__init__" of parent class # (arcade.Window) to setup screen super ().__init__(width, height, title) def start_snowfall( self ): # Set up snowfall and initialize variables. self .snowfall_list = [] for i in range ( 50 ): # Create snowfall instance snowfall = snow_fall() # Randomly position snowfall snowfall.x = random.randrange(Width) snowfall.y = random.randrange(Height + 200 ) # Set other variables for the snowfall snowfall.size = random.randrange( 8 ) snowfall.speed = random.randrange( 20 , 40 ) snowfall.angle = random.uniform(math.pi, math.pi * 2 ) # Add snowflake to snowfall list self .snowfall_list.append(snowfall) |
- Set the background color.
Python3
# Set the background color arcade.set_background_color(arcade.color.BLUE) |
- Now, define the function for animating snowfall and displaying the current position of each snowfall.
Python3
def on_draw( self ): # This command is necessary before drawing arcade.start_render() # Draw the current position of each snowfall for snowfall in self .snowfall_list: arcade.draw_circle_filled(snowfall.x, snowfall.y, snowfall.size, arcade.color.WHITE) def on_update( self , delta_time): # Animate all the snowfall falling for snowfall in self .snowfall_list: snowfall.y - = snowfall.speed * delta_time # Check if snowfall has fallen below screen if snowfall.y < 0 : snowfall.reset_snow() # Some math to make the snowfall move side to side snowfall.x + = snowfall.speed * \ math.cos(snowfall.angle) * delta_time snowfall.angle + = 1 * delta_time |
- Last step is to create an arcade object and call the required methods.
Python3
# Driver Code if __name__ = = "__main__" : screen = snowfall( 800 , 600 , "Snow" ) screen.start_snowfall() arcade.run() |
Below is the complete program based on the above approach:
Python3
# Import required modules import random import math import arcade # Adjust window attributes Width = 800 Height = 600 Title = "SnowFall" class snow_fall: def __init__( self ): self .x = 0 self .y = 0 def reset_snow( self ): # Reset flake to random position above screen self .y = random.randrange(Height, Height + 100 ) self .x = random.randrange(Width) class snowfall(arcade.Window): def __init__( self , width, height, title): # Calls "__init__" of parent class # (arcade.Window) to setup screen super ().__init__(width, height, title) def start_snowfall( self ): # Set up snowfall and initialize variables. self .snowfall_list = [] for i in range ( 50 ): # Create snowfall instance snowfall = snow_fall() # Randomly position snowfall snowfall.x = random.randrange(Width) snowfall.y = random.randrange(Height + 200 ) # Set other variables for the snowfall snowfall.size = random.randrange( 8 ) snowfall.speed = random.randrange( 20 , 40 ) snowfall.angle = random.uniform(math.pi, math.pi * 2 ) # Add snowflake to snowfall list self .snowfall_list.append(snowfall) # Set the background color arcade.set_background_color(arcade.color.BLUE) def on_draw( self ): # This command is necessary before drawing arcade.start_render() # Draw the current position of each snowfall for snowfall in self .snowfall_list: arcade.draw_circle_filled(snowfall.x, snowfall.y, snowfall.size, arcade.color.WHITE) def on_update( self , delta_time): # Animate all the snowfall falling for snowfall in self .snowfall_list: snowfall.y - = snowfall.speed * delta_time # Check if snowfall has fallen below screen if snowfall.y < 0 : snowfall.reset_snow() # Some math to make the snowfall move side to side snowfall.x + = snowfall.speed * \ math.cos(snowfall.angle) * delta_time snowfall.angle + = 1 * delta_time # Driver Code if __name__ = = "__main__" : screen = snowfall( 800 , 600 , "Snow" ) screen.start_snowfall() arcade.run() |
Output: