The following script creates an animated snowfall effect in a terminal window. It continuously updates and displays snowflakes falling from the top of the terminal to the bottom. The snowflakes are represented by Unicode characters (feel free to change!) and their movement is simulated by updating their positions in a grid that represents the terminal window.
import time
import random
import sys
def snow():
# Manually set the terminal size
h, w = 20, 80 # Adjust these values as needed
flakes = [" ", " ", "βοΈ", "β
", "β"]
# Initialize air space
air = [[1 for _ in range(h)] for _ in range(w)]
try:
while True:
# Update snowflakes
for x in range(w):
for y in range(h - 1, -1, -1):
if y == 0:
# Generate new snowflake
air[x][y] = random.choice(range(1, len(flakes))) if random.random() < 0.1 else 1
else:
# Move snowflake down
air[x][y] = air[x][y - 1]
# Print snowflakes
for y in range(h):
for x in range(w):
print(flakes[air[x][y]], end="")
print()
# Reset cursor to top
sys.stdout.write("\033[F" * h)
time.sleep(0.2)
except KeyboardInterrupt:
pass
snow()
It is a Python variation of the code provided for Julia here.
Let’s break down the Python script for a terminal-based snowfall animation in a coherent and structured way.
I use the following three modules:
time: Used for introducing delays in the animation loop.random: Generates random numbers for the random placement of snowflakes.sys: Handles terminal operations, like cursor positioning.
The snow() function is the core function where the snowfall animation is implemented.
- Setting the Terminal Size:
h, w = 20, 80: Defines the dimensions of the terminal window for the animation (hfor height,wfor width).
- Snowflake Characters:
flakes = [" ", " ", "βοΈ", "β ", "β"]: A list of characters used to display snowflakes and empty space. You could insert any snowflake character here.
- Initializing the Air Space:
air = [[1 for _ in range(h)] for _ in range(w)]: Initializes a 2D grid representing the terminal window. Each cell can either have a snowflake or be empty. I love Python One-Liners. π
The following loop is repeated forever until you terminate the computation:
- Continual Update: The
while Trueloop keeps the animation running until manually stopped. - Updating Snowflakes: Snowflakes at the top row have a chance to be newly generated. Snowflakes in other rows move down by one position.
- Displaying Snowflakes: The grid is iterated over to print snowflakes as per their updated positions.
- Resetting Cursor: Moves the cursor back to the top of the terminal to overwrite the previous frame.
- Frame Delay:
time.sleep(0.2)pauses the loop briefly to control the snowfall speed.
You can stop the animation with a keyboard interrupt (like Ctrl+C).
The call to snow() activates the function and starts the snowfall animation. However, you need to do it from a terminal (Linux) or Powershell/cmd (Windows) by running python your_script.py assuming you’ve stored the code in a file your_script.py. Easy. βοΈ
β¨ Recommended: How to Make a Beep Sound in Python? [Linux/macOS/Win]
