-
Notifications
You must be signed in to change notification settings - Fork 0
/
matrix-rain.py
57 lines (45 loc) · 1.7 KB
/
matrix-rain.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import curses
import random
import time
def main(stdscr):
# Set up the color of the text
curses.start_color()
curses.init_pair(1, curses.COLOR_GREEN, curses.COLOR_BLACK)
stdscr.attron(curses.color_pair(1))
# Hide the cursor
curses.curs_set(0)
# Get the size of the terminal
h, w = stdscr.getmaxyx()
# Create a list to hold the 'streamers'
streamers = [[0]*5 for _ in range(w)]
while True:
# Randomly reset a streamer to the top
i = random.randint(0, w-1)
streamers[i] = [0]*5
# Draw each streamer
for i in range(w):
for j in range(5):
# Only draw the streamer if it's in bounds
if 0 <= streamers[i][j] < h and 0 <= i < w:
# Generate a random character
char = chr(random.randint(33, 126))
try:
# Draw the character
stdscr.addch(streamers[i][j], i, char)
except curses.error:
pass
# Move the streamer down
streamers[i][j] += 1
# Clear the character that's no longer part of the streamer
if 0 <= streamers[i][j] - 5 < h and 0 <= i < w:
try:
stdscr.addch(streamers[i][j] - 5, i, ' ')
except curses.error:
pass
# Refresh the screen
stdscr.refresh()
# Wait for a bit
time.sleep(0.1)
if __name__ == "__main__":
time.sleep(1) # Add a delay to give the terminal time to initialize
curses.wrapper(main)