|
1 #!/usr/bin/env python |
|
2 # |
|
3 # $Id: rain.py 46625 2006-06-03 23:02:15Z andrew.kuchling $ |
|
4 # |
|
5 # somebody should probably check the randrange()s... |
|
6 |
|
7 import curses |
|
8 from random import randrange |
|
9 |
|
10 def next_j(j): |
|
11 if j == 0: |
|
12 j = 4 |
|
13 else: |
|
14 j -= 1 |
|
15 |
|
16 if curses.has_colors(): |
|
17 z = randrange(0, 3) |
|
18 color = curses.color_pair(z) |
|
19 if z: |
|
20 color = color | curses.A_BOLD |
|
21 stdscr.attrset(color) |
|
22 |
|
23 return j |
|
24 |
|
25 def main(win): |
|
26 # we know that the first argument from curses.wrapper() is stdscr. |
|
27 # Initialize it globally for convenience. |
|
28 global stdscr |
|
29 stdscr = win |
|
30 |
|
31 if curses.has_colors(): |
|
32 bg = curses.COLOR_BLACK |
|
33 curses.init_pair(1, curses.COLOR_BLUE, bg) |
|
34 curses.init_pair(2, curses.COLOR_CYAN, bg) |
|
35 |
|
36 curses.nl() |
|
37 curses.noecho() |
|
38 # XXX curs_set() always returns ERR |
|
39 # curses.curs_set(0) |
|
40 stdscr.timeout(0) |
|
41 |
|
42 c = curses.COLS - 4 |
|
43 r = curses.LINES - 4 |
|
44 xpos = [0] * c |
|
45 ypos = [0] * r |
|
46 for j in range(4, -1, -1): |
|
47 xpos[j] = randrange(0, c) + 2 |
|
48 ypos[j] = randrange(0, r) + 2 |
|
49 |
|
50 j = 0 |
|
51 while True: |
|
52 x = randrange(0, c) + 2 |
|
53 y = randrange(0, r) + 2 |
|
54 |
|
55 stdscr.addch(y, x, ord('.')) |
|
56 |
|
57 stdscr.addch(ypos[j], xpos[j], ord('o')) |
|
58 |
|
59 j = next_j(j) |
|
60 stdscr.addch(ypos[j], xpos[j], ord('O')) |
|
61 |
|
62 j = next_j(j) |
|
63 stdscr.addch( ypos[j] - 1, xpos[j], ord('-')) |
|
64 stdscr.addstr(ypos[j], xpos[j] - 1, "|.|") |
|
65 stdscr.addch( ypos[j] + 1, xpos[j], ord('-')) |
|
66 |
|
67 j = next_j(j) |
|
68 stdscr.addch( ypos[j] - 2, xpos[j], ord('-')) |
|
69 stdscr.addstr(ypos[j] - 1, xpos[j] - 1, "/ \\") |
|
70 stdscr.addstr(ypos[j], xpos[j] - 2, "| O |") |
|
71 stdscr.addstr(ypos[j] + 1, xpos[j] - 1, "\\ /") |
|
72 stdscr.addch( ypos[j] + 2, xpos[j], ord('-')) |
|
73 |
|
74 j = next_j(j) |
|
75 stdscr.addch( ypos[j] - 2, xpos[j], ord(' ')) |
|
76 stdscr.addstr(ypos[j] - 1, xpos[j] - 1, " ") |
|
77 stdscr.addstr(ypos[j], xpos[j] - 2, " ") |
|
78 stdscr.addstr(ypos[j] + 1, xpos[j] - 1, " ") |
|
79 stdscr.addch( ypos[j] + 2, xpos[j], ord(' ')) |
|
80 |
|
81 xpos[j] = x |
|
82 ypos[j] = y |
|
83 |
|
84 ch = stdscr.getch() |
|
85 if ch == ord('q') or ch == ord('Q'): |
|
86 return |
|
87 elif ch == ord('s'): |
|
88 stdscr.nodelay(0) |
|
89 elif ch == ord(' '): |
|
90 stdscr.nodelay(1) |
|
91 |
|
92 curses.napms(50) |
|
93 |
|
94 curses.wrapper(main) |