diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2000-12-15 00:41:48 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2000-12-15 00:41:48 (GMT) |
commit | 15c3c2bdf84aa333e213d8f5ac2b4b30a2595231 (patch) | |
tree | 7c2d45ae1febeb48cf10b68c7da96e816e283221 /Demo/curses/rain.py | |
parent | 61c64c9de0f9b9a8355b4c365537cdfe15489eab (diff) | |
download | cpython-15c3c2bdf84aa333e213d8f5ac2b4b30a2595231.zip cpython-15c3c2bdf84aa333e213d8f5ac2b4b30a2595231.tar.gz cpython-15c3c2bdf84aa333e213d8f5ac2b4b30a2595231.tar.bz2 |
Curses demos contributed by Thomas Gellekum <tg@FreeBSD.org>.
ncurses.py requires panel support, and therefore doesn't work yet.
Diffstat (limited to 'Demo/curses/rain.py')
-rw-r--r-- | Demo/curses/rain.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/Demo/curses/rain.py b/Demo/curses/rain.py new file mode 100644 index 0000000..2399d7f --- /dev/null +++ b/Demo/curses/rain.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# +# $Id$ +# +# somebody should probably check the randrange()s... + +import curses +from random import randrange + +def next_j(j): + if j == 0: + j = 4 + else: + j -= 1 + + if curses.has_colors(): + z = randrange(0, 3) + color = curses.color_pair(z) + if z: + color = color | curses.A_BOLD + stdscr.attrset(color) + + return j + +def main(win): + # we know that the first argument from curses.wrapper() is stdscr. + # Initialize it globally for convenience. + global stdscr + stdscr = win + + if curses.has_colors(): + bg = curses.COLOR_BLACK + curses.init_pair(1, curses.COLOR_BLUE, bg) + curses.init_pair(2, curses.COLOR_CYAN, bg) + + curses.nl() + curses.noecho() + # XXX curs_set() always returns ERR + # curses.curs_set(0) + stdscr.timeout(0) + + c = curses.COLS - 4 + r = curses.LINES - 4 + xpos = [0] * c + ypos = [0] * r + for j in range(4, -1, -1): + xpos[j] = randrange(0, c) + 2 + ypos[j] = randrange(0, r) + 2 + + j = 0 + while 1: + x = randrange(0, c) + 2 + y = randrange(0, r) + 2 + + stdscr.addch(y, x, ord('.')) + + stdscr.addch(ypos[j], xpos[j], ord('o')) + + j = next_j(j) + stdscr.addch(ypos[j], xpos[j], ord('O')) + + j = next_j(j) + stdscr.addch( ypos[j] - 1, xpos[j], ord('-')) + stdscr.addstr(ypos[j], xpos[j] - 1, "|.|") + stdscr.addch( ypos[j] + 1, xpos[j], ord('-')) + + j = next_j(j) + stdscr.addch( ypos[j] - 2, xpos[j], ord('-')) + stdscr.addstr(ypos[j] - 1, xpos[j] - 1, "/ \\") + stdscr.addstr(ypos[j], xpos[j] - 2, "| O |") + stdscr.addstr(ypos[j] + 1, xpos[j] - 1, "\\ /") + stdscr.addch( ypos[j] + 2, xpos[j], ord('-')) + + j = next_j(j) + stdscr.addch( ypos[j] - 2, xpos[j], ord(' ')) + stdscr.addstr(ypos[j] - 1, xpos[j] - 1, " ") + stdscr.addstr(ypos[j], xpos[j] - 2, " ") + stdscr.addstr(ypos[j] + 1, xpos[j] - 1, " ") + stdscr.addch( ypos[j] + 2, xpos[j], ord(' ')) + + xpos[j] = x + ypos[j] = y + + ch = stdscr.getch() + if ch == ord('q') or ch == ord('Q'): + return 0 + elif ch == ord('s'): + stdscr.nodelay(0) + elif ch == ord(' '): + stdscr.nodelay(1) + + curses.napms(50) + +curses.wrapper(main) |