diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2000-12-21 16:26:37 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2000-12-21 16:26:37 (GMT) |
commit | 23382f50475de957aca69b2c2b648ce3ca70fa4b (patch) | |
tree | 08b5fa6072f45ac29a61509dd111e5b87e5239c3 /Demo/curses | |
parent | 68a6f5a0a23a55e958bfcda303cc31955b095ea4 (diff) | |
download | cpython-23382f50475de957aca69b2c2b648ce3ca70fa4b.zip cpython-23382f50475de957aca69b2c2b648ce3ca70fa4b.tar.gz cpython-23382f50475de957aca69b2c2b648ce3ca70fa4b.tar.bz2 |
Another demo from Thomas Gellekum (seasonally-themed, too)
Diffstat (limited to 'Demo/curses')
-rw-r--r-- | Demo/curses/README | 1 | ||||
-rw-r--r-- | Demo/curses/xmas.py | 906 |
2 files changed, 907 insertions, 0 deletions
diff --git a/Demo/curses/README b/Demo/curses/README index 2fb1159..7635c3d 100644 --- a/Demo/curses/README +++ b/Demo/curses/README @@ -14,6 +14,7 @@ ncurses.py -- currently only a panels demo XXX this won't work until panel support is checked in rain.py -- raindrops keep falling on my desktop tclock.py -- ASCII clock, by Howard Jones +xmas.py -- I'm dreaming of an ASCII christmas Please send bugfixes and new contributions to me or, even better, submit them to the Python Bug Tracker on SourceForge diff --git a/Demo/curses/xmas.py b/Demo/curses/xmas.py new file mode 100644 index 0000000..99c7087 --- /dev/null +++ b/Demo/curses/xmas.py @@ -0,0 +1,906 @@ +# asciixmas +# December 1989 Larry Bartz Indianapolis, IN +# +# $Id$ +# +# I'm dreaming of an ascii character-based monochrome Christmas, +# Just like the one's I used to know! +# Via a full duplex communications channel, +# At 9600 bits per second, +# Even though it's kinda slow. +# +# I'm dreaming of an ascii character-based monochrome Christmas, +# With ev'ry C program I write! +# May your screen be merry and bright! +# And may all your Christmases be amber or green, +# (for reduced eyestrain and improved visibility)! +# +# +# Notes on the Python version: +# I used a couple of `try...except curses.error' to get around some functions +# returning ERR. The errors come from using wrapping functions to fill +# windows to the last character cell. The C version doesn't have this problem, +# it simply ignores any return values. +# + +import curses +import sys + +FROMWHO = "Thomas Gellekum <tg@FreeBSD.org>" + +def set_color(win, color): + if curses.has_colors(): + n = color + 1 + curses.init_pair(n, color, my_bg) + win.attroff(curses.A_COLOR) + win.attron(curses.color_pair(n)) + +def unset_color(win): + if curses.has_colors(): + win.attrset(curses.color_pair(0)) + +def look_out(msecs): + curses.napms(msecs) + if stdscr.getch() != -1: + curses.beep() + sys.exit(0) + +def boxit(): + for y in range(0, 20): + stdscr.addch(y, 7, ord('|')) + + for x in range(8, 80): + stdscr.addch(19, x, ord('_')) + + for x in range(0, 80): + stdscr.addch(22, x, ord('_')) + + return + +def seas(): + stdscr.addch(4, 1, ord('S')) + stdscr.addch(6, 1, ord('E')) + stdscr.addch(8, 1, ord('A')) + stdscr.addch(10, 1, ord('S')) + stdscr.addch(12, 1, ord('O')) + stdscr.addch(14, 1, ord('N')) + stdscr.addch(16, 1, ord("'")) + stdscr.addch(18, 1, ord('S')) + + return + +def greet(): + stdscr.addch(3, 5, ord('G')) + stdscr.addch(5, 5, ord('R')) + stdscr.addch(7, 5, ord('E')) + stdscr.addch(9, 5, ord('E')) + stdscr.addch(11, 5, ord('T')) + stdscr.addch(13, 5, ord('I')) + stdscr.addch(15, 5, ord('N')) + stdscr.addch(17, 5, ord('G')) + stdscr.addch(19, 5, ord('S')) + + return + +def fromwho(): + stdscr.addstr(21, 13, FROMWHO) + return + +def tree(): + set_color(treescrn, curses.COLOR_GREEN) + treescrn.addch(1, 11, ord('/')) + treescrn.addch(2, 11, ord('/')) + treescrn.addch(3, 10, ord('/')) + treescrn.addch(4, 9, ord('/')) + treescrn.addch(5, 9, ord('/')) + treescrn.addch(6, 8, ord('/')) + treescrn.addch(7, 7, ord('/')) + treescrn.addch(8, 6, ord('/')) + treescrn.addch(9, 6, ord('/')) + treescrn.addch(10, 5, ord('/')) + treescrn.addch(11, 3, ord('/')) + treescrn.addch(12, 2, ord('/')) + + treescrn.addch(1, 13, ord('\\')) + treescrn.addch(2, 13, ord('\\')) + treescrn.addch(3, 14, ord('\\')) + treescrn.addch(4, 15, ord('\\')) + treescrn.addch(5, 15, ord('\\')) + treescrn.addch(6, 16, ord('\\')) + treescrn.addch(7, 17, ord('\\')) + treescrn.addch(8, 18, ord('\\')) + treescrn.addch(9, 18, ord('\\')) + treescrn.addch(10, 19, ord('\\')) + treescrn.addch(11, 21, ord('\\')) + treescrn.addch(12, 22, ord('\\')) + + treescrn.addch(4, 10, ord('_')) + treescrn.addch(4, 14, ord('_')) + treescrn.addch(8, 7, ord('_')) + treescrn.addch(8, 17, ord('_')) + + treescrn.addstr(13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\") + + treescrn.addstr(14, 11, "| |") + treescrn.addstr(15, 11, "|_|") + + unset_color(treescrn) + treescrn.refresh() + w_del_msg.refresh() + + return + +def balls(): + treescrn.overlay(treescrn2) + + set_color(treescrn2, curses.COLOR_BLUE) + treescrn2.addch(3, 9, ord('@')) + treescrn2.addch(3, 15, ord('@')) + treescrn2.addch(4, 8, ord('@')) + treescrn2.addch(4, 16, ord('@')) + treescrn2.addch(5, 7, ord('@')) + treescrn2.addch(5, 17, ord('@')) + treescrn2.addch(7, 6, ord('@')) + treescrn2.addch(7, 18, ord('@')) + treescrn2.addch(8, 5, ord('@')) + treescrn2.addch(8, 19, ord('@')) + treescrn2.addch(10, 4, ord('@')) + treescrn2.addch(10, 20, ord('@')) + treescrn2.addch(11, 2, ord('@')) + treescrn2.addch(11, 22, ord('@')) + treescrn2.addch(12, 1, ord('@')) + treescrn2.addch(12, 23, ord('@')) + + unset_color(treescrn2) + treescrn2.refresh() + w_del_msg.refresh() + return + +def star(): + treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) + set_color(treescrn2, curses.COLOR_YELLOW) + + treescrn2.addch(0, 12, ord('*')) + treescrn2.standend() + + unset_color(treescrn2) + treescrn2.refresh() + w_del_msg.refresh() + return + +def strng1(): + treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) + set_color(treescrn2, curses.COLOR_WHITE) + + treescrn2.addch(3, 13, ord('\'')) + treescrn2.addch(3, 12, ord(':')) + treescrn2.addch(3, 11, ord('.')) + + treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) + unset_color(treescrn2) + + treescrn2.refresh() + w_del_msg.refresh() + return + +def strng2(): + treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) + set_color(treescrn2, curses.COLOR_WHITE) + + treescrn2.addch(5, 14, ord('\'')) + treescrn2.addch(5, 13, ord(':')) + treescrn2.addch(5, 12, ord('.')) + treescrn2.addch(5, 11, ord(',')) + treescrn2.addch(6, 10, ord('\'')) + treescrn2.addch(6, 9, ord(':')) + + treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) + unset_color(treescrn2) + + treescrn2.refresh() + w_del_msg.refresh() + return + +def strng3(): + treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) + set_color(treescrn2, curses.COLOR_WHITE) + + treescrn2.addch(7, 16, ord('\'')) + treescrn2.addch(7, 15, ord(':')) + treescrn2.addch(7, 14, ord('.')) + treescrn2.addch(7, 13, ord(',')) + treescrn2.addch(8, 12, ord('\'')) + treescrn2.addch(8, 11, ord(':')) + treescrn2.addch(8, 10, ord('.')) + treescrn2.addch(8, 9, ord(',')) + + treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) + unset_color(treescrn2) + + treescrn2.refresh() + w_del_msg.refresh() + return + +def strng4(): + treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) + set_color(treescrn2, curses.COLOR_WHITE) + + treescrn2.addch(9, 17, ord('\'')) + treescrn2.addch(9, 16, ord(':')) + treescrn2.addch(9, 15, ord('.')) + treescrn2.addch(9, 14, ord(',')) + treescrn2.addch(10, 13, ord('\'')) + treescrn2.addch(10, 12, ord(':')) + treescrn2.addch(10, 11, ord('.')) + treescrn2.addch(10, 10, ord(',')) + treescrn2.addch(11, 9, ord('\'')) + treescrn2.addch(11, 8, ord(':')) + treescrn2.addch(11, 7, ord('.')) + treescrn2.addch(11, 6, ord(',')) + treescrn2.addch(12, 5, ord('\'')) + + treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) + unset_color(treescrn2) + + treescrn2.refresh() + w_del_msg.refresh() + return + +def strng5(): + treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) + set_color(treescrn2, curses.COLOR_WHITE) + + treescrn2.addch(11, 19, ord('\'')) + treescrn2.addch(11, 18, ord(':')) + treescrn2.addch(11, 17, ord('.')) + treescrn2.addch(11, 16, ord(',')) + treescrn2.addch(12, 15, ord('\'')) + treescrn2.addch(12, 14, ord(':')) + treescrn2.addch(12, 13, ord('.')) + treescrn2.addch(12, 12, ord(',')) + + treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) + unset_color(treescrn2) + + # save a fully lit tree + treescrn2.overlay(treescrn) + + treescrn2.refresh() + w_del_msg.refresh() + return + +def blinkit(): + treescrn8.touchwin() + + for cycle in range(0, 5): + if cycle == 0: + treescrn3.overlay(treescrn8) + treescrn8.refresh() + w_del_msg.refresh() + break + elif cycle == 1: + treescrn4.overlay(treescrn8) + treescrn8.refresh() + w_del_msg.refresh() + break + elif cycle == 2: + treescrn5.overlay(treescrn8) + treescrn8.refresh() + w_del_msg.refresh() + break + elif cycle == 3: + treescrn6.overlay(treescrn8) + treescrn8.refresh() + w_del_msg.refresh() + break + elif cycle == 4: + treescrn7.overlay(treescrn8) + treescrn8.refresh() + w_del_msg.refresh() + break + + treescrn8.touchwin() + + # ALL ON + treescrn.overlay(treescrn8) + treescrn8.refresh() + w_del_msg.refresh() + + return + +def deer_step(win, y, x): + win.mvwin(y, x) + win.refresh() + w_del_msg.refresh() + look_out(5) + +def reindeer(): + y_pos = 0 + + for x_pos in range(70, 62, -1): + if x_pos < 66: y_pos = 1 + for looper in range(0, 4): + dotdeer0.addch(y_pos, x_pos, ord('.')) + dotdeer0.refresh() + w_del_msg.refresh() + dotdeer0.erase() + dotdeer0.refresh() + w_del_msg.refresh() + look_out(50) + + y_pos = 2 + + for x_pos in range(x_pos - 1, 50, -1): + for looper in range(0, 4): + if x_pos < 56: + y_pos = 3 + + try: + stardeer0.addch(y_pos, x_pos, ord('*')) + except curses.error: + pass + stardeer0.refresh() + w_del_msg.refresh() + stardeer0.erase() + stardeer0.refresh() + w_del_msg.refresh() + else: + dotdeer0.addch(y_pos, x_pos, ord('*')) + dotdeer0.refresh() + w_del_msg.refresh() + dotdeer0.erase() + dotdeer0.refresh() + w_del_msg.refresh() + + x_pos = 58 + + for y_pos in range(2, 5): + lildeer0.touchwin() + lildeer0.refresh() + w_del_msg.refresh() + + for looper in range(0, 4): + deer_step(lildeer3, y_pos, x_pos) + deer_step(lildeer2, y_pos, x_pos) + deer_step(lildeer1, y_pos, x_pos) + deer_step(lildeer2, y_pos, x_pos) + deer_step(lildeer3, y_pos, x_pos) + + lildeer0.touchwin() + lildeer0.refresh() + w_del_msg.refresh() + + x_pos -= 2 + + x_pos = 35 + + for y_pos in range(5, 10): + + middeer0.touchwin() + middeer0.refresh() + w_del_msg.refresh() + + for looper in range(0, 2): + deer_step(middeer3, y_pos, x_pos) + deer_step(middeer2, y_pos, x_pos) + deer_step(middeer1, y_pos, x_pos) + deer_step(middeer2, y_pos, x_pos) + deer_step(middeer3, y_pos, x_pos) + + middeer0.touchwin() + middeer0.refresh() + w_del_msg.refresh() + + x_pos -= 3 + + look_out(300) + + y_pos = 1 + + for x_pos in range(8, 16): + deer_step(bigdeer4, y_pos, x_pos) + deer_step(bigdeer3, y_pos, x_pos) + deer_step(bigdeer2, y_pos, x_pos) + deer_step(bigdeer1, y_pos, x_pos) + deer_step(bigdeer2, y_pos, x_pos) + deer_step(bigdeer3, y_pos, x_pos) + deer_step(bigdeer4, y_pos, x_pos) + deer_step(bigdeer0, y_pos, x_pos) + + x_pos -= 1 + + for looper in range(0, 6): + deer_step(lookdeer4, y_pos, x_pos) + deer_step(lookdeer3, y_pos, x_pos) + deer_step(lookdeer2, y_pos, x_pos) + deer_step(lookdeer1, y_pos, x_pos) + deer_step(lookdeer2, y_pos, x_pos) + deer_step(lookdeer3, y_pos, x_pos) + deer_step(lookdeer4, y_pos, x_pos) + + deer_step(lookdeer0, y_pos, x_pos) + + for y_pos in range(y_pos, 10): + for looper in range(0, 2): + deer_step(bigdeer4, y_pos, x_pos) + deer_step(bigdeer3, y_pos, x_pos) + deer_step(bigdeer2, y_pos, x_pos) + deer_step(bigdeer1, y_pos, x_pos) + deer_step(bigdeer2, y_pos, x_pos) + deer_step(bigdeer3, y_pos, x_pos) + deer_step(bigdeer4, y_pos, x_pos) + deer_step(bigdeer0, y_pos, x_pos) + + y_pos -= 1 + + deer_step(lookdeer3, y_pos, x_pos) + return + +def main(win): + global stdscr + stdscr = win + + global my_bg, y_pos, x_pos + global treescrn, treescrn2, treescrn3, treescrn4 + global treescrn5, treescrn6, treescrn7, treescrn8 + global dotdeer0, stardeer0 + global lildeer0, lildeer1, lildeer2, lildeer3 + global middeer0, middeer1, middeer2, middeer3 + global bigdeer0, bigdeer1, bigdeer2, bigdeer3, bigdeer4 + global lookdeer0, lookdeer1, lookdeer2, lookdeer3, lookdeer4 + global w_holiday, w_del_msg + + my_bg = curses.COLOR_BLACK + # curses.curs_set(0) + + treescrn = curses.newwin(16, 27, 3, 53) + treescrn2 = curses.newwin(16, 27, 3, 53) + treescrn3 = curses.newwin(16, 27, 3, 53) + treescrn4 = curses.newwin(16, 27, 3, 53) + treescrn5 = curses.newwin(16, 27, 3, 53) + treescrn6 = curses.newwin(16, 27, 3, 53) + treescrn7 = curses.newwin(16, 27, 3, 53) + treescrn8 = curses.newwin(16, 27, 3, 53) + + dotdeer0 = curses.newwin(3, 71, 0, 8) + + stardeer0 = curses.newwin(4, 56, 0, 8) + + lildeer0 = curses.newwin(7, 53, 0, 8) + lildeer1 = curses.newwin(2, 4, 0, 0) + lildeer2 = curses.newwin(2, 4, 0, 0) + lildeer3 = curses.newwin(2, 4, 0, 0) + + middeer0 = curses.newwin(15, 42, 0, 8) + middeer1 = curses.newwin(3, 7, 0, 0) + middeer2 = curses.newwin(3, 7, 0, 0) + middeer3 = curses.newwin(3, 7, 0, 0) + + bigdeer0 = curses.newwin(10, 23, 0, 0) + bigdeer1 = curses.newwin(10, 23, 0, 0) + bigdeer2 = curses.newwin(10, 23, 0, 0) + bigdeer3 = curses.newwin(10, 23, 0, 0) + bigdeer4 = curses.newwin(10, 23, 0, 0) + + lookdeer0 = curses.newwin(10, 25, 0, 0) + lookdeer1 = curses.newwin(10, 25, 0, 0) + lookdeer2 = curses.newwin(10, 25, 0, 0) + lookdeer3 = curses.newwin(10, 25, 0, 0) + lookdeer4 = curses.newwin(10, 25, 0, 0) + + w_holiday = curses.newwin(1, 27, 3, 27) + + w_del_msg = curses.newwin(1, 20, 23, 60) + + try: + w_del_msg.addstr(0, 0, "Hit any key to quit") + except curses.error: + pass + + try: + w_holiday.addstr(0, 0, "H A P P Y H O L I D A Y S") + except curses.error: + pass + + # set up the windows for our various reindeer + lildeer1.addch(0, 0, ord('V')) + lildeer1.addch(1, 0, ord('@')) + lildeer1.addch(1, 1, ord('<')) + lildeer1.addch(1, 2, ord('>')) + try: + lildeer1.addch(1, 3, ord('~')) + except curses.error: + pass + + lildeer2.addch(0, 0, ord('V')) + lildeer2.addch(1, 0, ord('@')) + lildeer2.addch(1, 1, ord('|')) + lildeer2.addch(1, 2, ord('|')) + try: + lildeer2.addch(1, 3, ord('~')) + except curses.error: + pass + + lildeer3.addch(0, 0, ord('V')) + lildeer3.addch(1, 0, ord('@')) + lildeer3.addch(1, 1, ord('>')) + lildeer3.addch(1, 2, ord('<')) + try: + lildeer2.addch(1, 3, ord('~')) # XXX + except curses.error: + pass + + middeer1.addch(0, 2, ord('y')) + middeer1.addch(0, 3, ord('y')) + middeer1.addch(1, 2, ord('0')) + middeer1.addch(1, 3, ord('(')) + middeer1.addch(1, 4, ord('=')) + middeer1.addch(1, 5, ord(')')) + middeer1.addch(1, 6, ord('~')) + middeer1.addch(2, 3, ord('\\')) + middeer1.addch(2, 5, ord('/')) + + middeer2.addch(0, 2, ord('y')) + middeer2.addch(0, 3, ord('y')) + middeer2.addch(1, 2, ord('0')) + middeer2.addch(1, 3, ord('(')) + middeer2.addch(1, 4, ord('=')) + middeer2.addch(1, 5, ord(')')) + middeer2.addch(1, 6, ord('~')) + middeer2.addch(2, 3, ord('|')) + middeer2.addch(2, 5, ord('|')) + + middeer3.addch(0, 2, ord('y')) + middeer3.addch(0, 3, ord('y')) + middeer3.addch(1, 2, ord('0')) + middeer3.addch(1, 3, ord('(')) + middeer3.addch(1, 4, ord('=')) + middeer3.addch(1, 5, ord(')')) + middeer3.addch(1, 6, ord('~')) + middeer3.addch(2, 3, ord('/')) + middeer3.addch(2, 5, ord('\\')) + + bigdeer1.addch(0, 17, ord('\\')) + bigdeer1.addch(0, 18, ord('/')) + bigdeer1.addch(0, 19, ord('\\')) + bigdeer1.addch(0, 20, ord('/')) + bigdeer1.addch(1, 18, ord('\\')) + bigdeer1.addch(1, 20, ord('/')) + bigdeer1.addch(2, 19, ord('|')) + bigdeer1.addch(2, 20, ord('_')) + bigdeer1.addch(3, 18, ord('/')) + bigdeer1.addch(3, 19, ord('^')) + bigdeer1.addch(3, 20, ord('0')) + bigdeer1.addch(3, 21, ord('\\')) + bigdeer1.addch(4, 17, ord('/')) + bigdeer1.addch(4, 18, ord('/')) + bigdeer1.addch(4, 19, ord('\\')) + bigdeer1.addch(4, 22, ord('\\')) + bigdeer1.addstr(5, 7, "^~~~~~~~~// ~~U") + bigdeer1.addstr(6, 7, "( \\_____( /") # )) + bigdeer1.addstr(7, 8, "( ) /") + bigdeer1.addstr(8, 9, "\\\\ /") + bigdeer1.addstr(9, 11, "\\>/>") + + bigdeer2.addch(0, 17, ord('\\')) + bigdeer2.addch(0, 18, ord('/')) + bigdeer2.addch(0, 19, ord('\\')) + bigdeer2.addch(0, 20, ord('/')) + bigdeer2.addch(1, 18, ord('\\')) + bigdeer2.addch(1, 20, ord('/')) + bigdeer2.addch(2, 19, ord('|')) + bigdeer2.addch(2, 20, ord('_')) + bigdeer2.addch(3, 18, ord('/')) + bigdeer2.addch(3, 19, ord('^')) + bigdeer2.addch(3, 20, ord('0')) + bigdeer2.addch(3, 21, ord('\\')) + bigdeer2.addch(4, 17, ord('/')) + bigdeer2.addch(4, 18, ord('/')) + bigdeer2.addch(4, 19, ord('\\')) + bigdeer2.addch(4, 22, ord('\\')) + bigdeer2.addstr(5, 7, "^~~~~~~~~// ~~U") + bigdeer2.addstr(6, 7, "(( )____( /") # )) + bigdeer2.addstr(7, 7, "( / |") + bigdeer2.addstr(8, 8, "\\/ |") + bigdeer2.addstr(9, 9, "|> |>") + + bigdeer3.addch(0, 17, ord('\\')) + bigdeer3.addch(0, 18, ord('/')) + bigdeer3.addch(0, 19, ord('\\')) + bigdeer3.addch(0, 20, ord('/')) + bigdeer3.addch(1, 18, ord('\\')) + bigdeer3.addch(1, 20, ord('/')) + bigdeer3.addch(2, 19, ord('|')) + bigdeer3.addch(2, 20, ord('_')) + bigdeer3.addch(3, 18, ord('/')) + bigdeer3.addch(3, 19, ord('^')) + bigdeer3.addch(3, 20, ord('0')) + bigdeer3.addch(3, 21, ord('\\')) + bigdeer3.addch(4, 17, ord('/')) + bigdeer3.addch(4, 18, ord('/')) + bigdeer3.addch(4, 19, ord('\\')) + bigdeer3.addch(4, 22, ord('\\')) + bigdeer3.addstr(5, 7, "^~~~~~~~~// ~~U") + bigdeer3.addstr(6, 6, "( ()_____( /") # )) + bigdeer3.addstr(7, 6, "/ / /") + bigdeer3.addstr(8, 5, "|/ \\") + bigdeer3.addstr(9, 5, "/> \\>") + + bigdeer4.addch(0, 17, ord('\\')) + bigdeer4.addch(0, 18, ord('/')) + bigdeer4.addch(0, 19, ord('\\')) + bigdeer4.addch(0, 20, ord('/')) + bigdeer4.addch(1, 18, ord('\\')) + bigdeer4.addch(1, 20, ord('/')) + bigdeer4.addch(2, 19, ord('|')) + bigdeer4.addch(2, 20, ord('_')) + bigdeer4.addch(3, 18, ord('/')) + bigdeer4.addch(3, 19, ord('^')) + bigdeer4.addch(3, 20, ord('0')) + bigdeer4.addch(3, 21, ord('\\')) + bigdeer4.addch(4, 17, ord('/')) + bigdeer4.addch(4, 18, ord('/')) + bigdeer4.addch(4, 19, ord('\\')) + bigdeer4.addch(4, 22, ord('\\')) + bigdeer4.addstr(5, 7, "^~~~~~~~~// ~~U") + bigdeer4.addstr(6, 6, "( )______( /") # ) + bigdeer4.addstr(7, 5, "(/ \\") # ) + bigdeer4.addstr(8, 0, "v___= ----^") + + lookdeer1.addstr(0, 16, "\\/ \\/") + lookdeer1.addstr(1, 17, "\\Y/ \\Y/") + lookdeer1.addstr(2, 19, "\\=/") + lookdeer1.addstr(3, 17, "^\\o o/^") + lookdeer1.addstr(4, 17, "//( )") + lookdeer1.addstr(5, 7, "^~~~~~~~~// \\O/") + lookdeer1.addstr(6, 7, "( \\_____( /") # )) + lookdeer1.addstr(7, 8, "( ) /") + lookdeer1.addstr(8, 9, "\\\\ /") + lookdeer1.addstr(9, 11, "\\>/>") + + lookdeer2.addstr(0, 16, "\\/ \\/") + lookdeer2.addstr(1, 17, "\\Y/ \\Y/") + lookdeer2.addstr(2, 19, "\\=/") + lookdeer2.addstr(3, 17, "^\\o o/^") + lookdeer2.addstr(4, 17, "//( )") + lookdeer2.addstr(5, 7, "^~~~~~~~~// \\O/") + lookdeer2.addstr(6, 7, "(( )____( /") # )) + lookdeer2.addstr(7, 7, "( / |") + lookdeer2.addstr(8, 8, "\\/ |") + lookdeer2.addstr(9, 9, "|> |>") + + lookdeer3.addstr(0, 16, "\\/ \\/") + lookdeer3.addstr(1, 17, "\\Y/ \\Y/") + lookdeer3.addstr(2, 19, "\\=/") + lookdeer3.addstr(3, 17, "^\\o o/^") + lookdeer3.addstr(4, 17, "//( )") + lookdeer3.addstr(5, 7, "^~~~~~~~~// \\O/") + lookdeer3.addstr(6, 6, "( ()_____( /") # )) + lookdeer3.addstr(7, 6, "/ / /") + lookdeer3.addstr(8, 5, "|/ \\") + lookdeer3.addstr(9, 5, "/> \\>") + + lookdeer4.addstr(0, 16, "\\/ \\/") + lookdeer4.addstr(1, 17, "\\Y/ \\Y/") + lookdeer4.addstr(2, 19, "\\=/") + lookdeer4.addstr(3, 17, "^\\o o/^") + lookdeer4.addstr(4, 17, "//( )") + lookdeer4.addstr(5, 7, "^~~~~~~~~// \\O/") + lookdeer4.addstr(6, 6, "( )______( /") # ) + lookdeer4.addstr(7, 5, "(/ \\") # ) + lookdeer4.addstr(8, 0, "v___= ----^") + + ############################################### + curses.cbreak() + stdscr.nodelay(1) + + while 1: + stdscr.clear() + treescrn.erase() + w_del_msg.touchwin() + treescrn.touchwin() + treescrn2.erase() + treescrn2.touchwin() + treescrn8.erase() + treescrn8.touchwin() + stdscr.refresh() + look_out(150) + boxit() + stdscr.refresh() + look_out(150) + seas() + stdscr.refresh() + greet() + stdscr.refresh() + look_out(150) + fromwho() + stdscr.refresh() + look_out(150) + tree() + look_out(150) + balls() + look_out(150) + star() + look_out(150) + strng1() + strng2() + strng3() + strng4() + strng5() + + # set up the windows for our blinking trees + # + # treescrn3 + treescrn.overlay(treescrn3) + + # balls + treescrn3.addch(4, 18, ord(' ')) + treescrn3.addch(7, 6, ord(' ')) + treescrn3.addch(8, 19, ord(' ')) + treescrn3.addch(11, 22, ord(' ')) + + # star + treescrn3.addch(0, 12, ord('*')) + + # strng1 + treescrn3.addch(3, 11, ord(' ')) + + # strng2 + treescrn3.addch(5, 13, ord(' ')) + treescrn3.addch(6, 10, ord(' ')) + + # strng3 + treescrn3.addch(7, 16, ord(' ')) + treescrn3.addch(7, 14, ord(' ')) + + # strng4 + treescrn3.addch(10, 13, ord(' ')) + treescrn3.addch(10, 10, ord(' ')) + treescrn3.addch(11, 8, ord(' ')) + + # strng5 + treescrn3.addch(11, 18, ord(' ')) + treescrn3.addch(12, 13, ord(' ')) + + # treescrn4 + treescrn.overlay(treescrn4) + + # balls + treescrn4.addch(3, 9, ord(' ')) + treescrn4.addch(4, 16, ord(' ')) + treescrn4.addch(7, 6, ord(' ')) + treescrn4.addch(8, 19, ord(' ')) + treescrn4.addch(11, 2, ord(' ')) + treescrn4.addch(12, 23, ord(' ')) + + # star + treescrn4.standout() + treescrn4.addch(0, 12, ord('*')) + treescrn4.standend() + + # strng1 + treescrn4.addch(3, 13, ord(' ')) + + # strng2 + + # strng3 + treescrn4.addch(7, 15, ord(' ')) + treescrn4.addch(8, 11, ord(' ')) + + # strng4 + treescrn4.addch(9, 16, ord(' ')) + treescrn4.addch(10, 12, ord(' ')) + treescrn4.addch(11, 8, ord(' ')) + + # strng5 + treescrn4.addch(11, 18, ord(' ')) + treescrn4.addch(12, 14, ord(' ')) + + # treescrn5 + treescrn.overlay(treescrn5) + + # balls + treescrn5.addch(3, 15, ord(' ')) + treescrn5.addch(10, 20, ord(' ')) + treescrn5.addch(12, 1, ord(' ')) + + # star + treescrn5.addch(0, 12, ord(' ')) + + # strng1 + treescrn5.addch(3, 11, ord(' ')) + + # strng2 + treescrn5.addch(5, 12, ord(' ')) + + # strng3 + treescrn5.addch(7, 14, ord(' ')) + treescrn5.addch(8, 10, ord(' ')) + + # strng4 + treescrn5.addch(9, 15, ord(' ')) + treescrn5.addch(10, 11, ord(' ')) + treescrn5.addch(11, 7, ord(' ')) + + # strng5 + treescrn5.addch(11, 17, ord(' ')) + treescrn5.addch(12, 13, ord(' ')) + + # treescrn6 + treescrn.overlay(treescrn6) + + # balls + treescrn6.addch(6, 7, ord(' ')) + treescrn6.addch(7, 18, ord(' ')) + treescrn6.addch(10, 4, ord(' ')) + treescrn6.addch(11, 23, ord(' ')) + + # star + treescrn6.standout() + treescrn6.addch(0, 12, ord('*')) + treescrn6.standend() + + # strng1 + + # strng2 + treescrn6.addch(5, 11, ord(' ')) + + # strng3 + treescrn6.addch(7, 13, ord(' ')) + treescrn6.addch(8, 9, ord(' ')) + + # strng4 + treescrn6.addch(9, 14, ord(' ')) + treescrn6.addch(10, 10, ord(' ')) + treescrn6.addch(11, 6, ord(' ')) + + # strng5 + treescrn6.addch(11, 16, ord(' ')) + treescrn6.addch(12, 12, ord(' ')) + + # treescrn7 + + treescrn.overlay(treescrn7) + + # balls + treescrn7.addch(3, 15, ord(' ')) + treescrn7.addch(6, 7, ord(' ')) + treescrn7.addch(7, 18, ord(' ')) + treescrn7.addch(10, 4, ord(' ')) + treescrn7.addch(11, 22, ord(' ')) + + # star + treescrn7.addch(0, 12, ord('*')) + + # strng1 + treescrn7.addch(3, 12, ord(' ')) + + # strng2 + treescrn7.addch(5, 13, ord(' ')) + treescrn7.addch(6, 9, ord(' ')) + + # strng3 + treescrn7.addch(7, 15, ord(' ')) + treescrn7.addch(8, 11, ord(' ')) + + # strng4 + treescrn7.addch(9, 16, ord(' ')) + treescrn7.addch(10, 12, ord(' ')) + treescrn7.addch(11, 8, ord(' ')) + + # strng5 + treescrn7.addch(11, 18, ord(' ')) + treescrn7.addch(12, 14, ord(' ')) + + look_out(150) + reindeer() + + w_holiday.touchwin() + w_holiday.refresh() + w_del_msg.refresh() + + look_out(500) + for i in range(0, 20): + blinkit() + +curses.wrapper(main) |