summaryrefslogtreecommitdiffstats
path: root/Demo/curses/rain.py
diff options
context:
space:
mode:
authorAndrew M. Kuchling <amk@amk.ca>2000-12-15 00:41:48 (GMT)
committerAndrew M. Kuchling <amk@amk.ca>2000-12-15 00:41:48 (GMT)
commit15c3c2bdf84aa333e213d8f5ac2b4b30a2595231 (patch)
tree7c2d45ae1febeb48cf10b68c7da96e816e283221 /Demo/curses/rain.py
parent61c64c9de0f9b9a8355b4c365537cdfe15489eab (diff)
downloadcpython-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.py94
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)