906 lines · 24.9 KB · Python
RawDownload
# asciixmas# December 1989             Larry Bartz           Indianapolis, IN## $Id: xmas.py 46623 2006-06-03 22:59:23Z andrew.kuchling $## I'm dreaming of an ascii character-based monochrome Christmas,# Just like the ones 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 cursesimport 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(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(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:

Lines 1–500 of 906.