-
-
Save sontek/1508912 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env python | |
| import os | |
| import random | |
| import time | |
| import platform | |
| snowflakes = {} | |
| try: | |
| # Windows Support | |
| from colorama import init | |
| init() | |
| except ImportError: | |
| pass | |
| def get_terminal_size(): | |
| def ioctl_GWINSZ(fd): | |
| try: | |
| import fcntl | |
| import termios | |
| import struct | |
| cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ, | |
| '1234')) | |
| except: | |
| return None | |
| return cr | |
| cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) | |
| if not cr: | |
| try: | |
| fd = os.open(os.ctermid(), os.O_RDONLY) | |
| cr = ioctl_GWINSZ(fd) | |
| os.close(fd) | |
| except: | |
| pass | |
| if not cr: | |
| try: | |
| cr = (os.environ['LINES'], os.environ['COLUMNS']) | |
| except: | |
| cr = (25, 80) | |
| return int(cr[1]), int(cr[0]) | |
| columns, rows = get_terminal_size() | |
| def clear_screen(numlines=100): | |
| """Clear the console. | |
| numlines is an optional argument used only as a fall-back. | |
| """ | |
| if os.name == "posix": | |
| # Unix/Linux/MacOS/BSD/etc | |
| os.system('clear') | |
| elif os.name in ("nt", "dos", "ce"): | |
| # DOS/Windows | |
| os.system('cls') | |
| else: | |
| # Fallback for other operating systems. | |
| print('\n' * rows) | |
| def get_random_flake(): | |
| if not platform.system() == 'Windows': | |
| try: | |
| # python3 support | |
| try: | |
| cmd = unichr | |
| except NameError: | |
| cmd = chr | |
| flake = cmd(random.choice(range(0x2740, 0x2749))) | |
| return flake | |
| except: | |
| pass | |
| return " *" | |
| def move_flake(col): | |
| if snowflakes[col][0]+1 == rows: | |
| snowflakes[col] = [1, get_random_flake()] | |
| else: | |
| print("\033[%s;%sH " % (snowflakes[col][0], col)) | |
| snowflakes[col][0] += 1 | |
| print("\033[%s;%sH%s" % (snowflakes[col][0], col, snowflakes[col][1])) | |
| print("\033[1;1H") | |
| if __name__ == "__main__": | |
| clear_screen() | |
| while True: | |
| col = random.choice(range(1, int(columns))) | |
| # its already on the screen, move it | |
| if col in snowflakes.keys(): | |
| move_flake(col) | |
| else: | |
| # otherwise put it on the screen | |
| flake = get_random_flake() | |
| snowflakes[col] = [1, flake] | |
| print("\033[%s;%sH%s" % (snowflakes[col][0], col, | |
| snowflakes[col][1])) | |
| # key any flakes on the screen moving | |
| for flake in snowflakes.keys(): | |
| move_flake(flake) | |
| time.sleep(0.1) |
It now supports python3 and windows (hopefully)
This is neat :) I forked it and added varying speeds to the snow flakes to give it a pseudo-parallax effect.
Awesome, yours looks really nice
Wasn't working for me at first, kept getting stuff like:
Traceback (most recent call last):
File "snowjob.py", line 107, in
snowflakes[col][1]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2747' in position 7: ordinal not in range(128)
I forced 80x25 screen size on SL4A, replaced get_random_flake() with
def get_random_flake():
return "*"and this runs on Android. Thank you!
Very good and very nice looking. I couldn't get it to run without problems on the windows console (Python 2.7) but on Cygwin it works like a charm.
Merry Christmas!
Works like a charm py3k @ win64. :)
Doesn't work in either py3.2.1 or py 2.7 in Windows for me. I've tried a number of character sets, all I get is output like this:
[5;69H
[6;69H *
[1;1H
[14;71H
[15;71H *
[1;1H
It IS animated, though.... :)
That's neat man, I love it.
@tensigh you need to install colorama for it to work in windows
Beautiful! Nice little script mate :)
This latest version gives you random snowflakes, if your terminal doesn't support the characters drop to the old version that uses * or modify get_random_flake to always return *