| # asciixmas | |
| # December 1989 Larry Bartz Indianapolis, IN | |
| # | |
| # $Id$ | |
| # | |
| # 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 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(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: | |
| 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) |