symbian-qemu-0.9.1-12/python-2.6.1/Demo/curses/rain.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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)