94 lines · 2.4 KB · Python
RawDownload
#!/bin/python## $Id: rain.py 46625 2006-06-03 23:02:15Z andrew.kuchling $## somebody should probably check the randrange()s... import cursesfrom 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 True:        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        elif ch == ord('s'):            stdscr.nodelay(0)        elif ch == ord(' '):            stdscr.nodelay(1)         curses.napms(50) curses.wrapper(main)