mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Curses demos contributed by Thomas Gellekum <tg@FreeBSD.org>.
ncurses.py requires panel support, and therefore doesn't work yet.
This commit is contained in:
parent
61c64c9de0
commit
15c3c2bdf8
4 changed files with 541 additions and 1 deletions
94
Demo/curses/rain.py
Normal file
94
Demo/curses/rain.py
Normal file
|
|
@ -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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue