| #!/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) |