2 # December 1989 Larry Bartz Indianapolis, IN
6 # I'm dreaming of an ascii character-based monochrome Christmas,
7 # Just like the one's I used to know!
8 # Via a full duplex communications channel,
9 # At 9600 bits per second,
10 # Even though it's kinda slow.
12 # I'm dreaming of an ascii character-based monochrome Christmas,
13 # With ev'ry C program I write!
14 # May your screen be merry and bright!
15 # And may all your Christmases be amber or green,
16 # (for reduced eyestrain and improved visibility)!
19 # Notes on the Python version:
20 # I used a couple of `try...except curses.error' to get around some functions
21 # returning ERR. The errors come from using wrapping functions to fill
22 # windows to the last character cell. The C version doesn't have this problem,
23 # it simply ignores any return values.
29 FROMWHO
= "Thomas Gellekum <tg@FreeBSD.org>"
31 def set_color(win
, color
):
32 if curses
.has_colors():
34 curses
.init_pair(n
, color
, my_bg
)
35 win
.attroff(curses
.A_COLOR
)
36 win
.attron(curses
.color_pair(n
))
39 if curses
.has_colors():
40 win
.attrset(curses
.color_pair(0))
44 if stdscr
.getch() != -1:
49 for y
in range(0, 20):
50 stdscr
.addch(y
, 7, ord('|'))
52 for x
in range(8, 80):
53 stdscr
.addch(19, x
, ord('_'))
55 for x
in range(0, 80):
56 stdscr
.addch(22, x
, ord('_'))
61 stdscr
.addch(4, 1, ord('S'))
62 stdscr
.addch(6, 1, ord('E'))
63 stdscr
.addch(8, 1, ord('A'))
64 stdscr
.addch(10, 1, ord('S'))
65 stdscr
.addch(12, 1, ord('O'))
66 stdscr
.addch(14, 1, ord('N'))
67 stdscr
.addch(16, 1, ord("'"))
68 stdscr
.addch(18, 1, ord('S'))
73 stdscr
.addch(3, 5, ord('G'))
74 stdscr
.addch(5, 5, ord('R'))
75 stdscr
.addch(7, 5, ord('E'))
76 stdscr
.addch(9, 5, ord('E'))
77 stdscr
.addch(11, 5, ord('T'))
78 stdscr
.addch(13, 5, ord('I'))
79 stdscr
.addch(15, 5, ord('N'))
80 stdscr
.addch(17, 5, ord('G'))
81 stdscr
.addch(19, 5, ord('S'))
86 stdscr
.addstr(21, 13, FROMWHO
)
90 set_color(treescrn
, curses
.COLOR_GREEN
)
91 treescrn
.addch(1, 11, ord('/'))
92 treescrn
.addch(2, 11, ord('/'))
93 treescrn
.addch(3, 10, ord('/'))
94 treescrn
.addch(4, 9, ord('/'))
95 treescrn
.addch(5, 9, ord('/'))
96 treescrn
.addch(6, 8, ord('/'))
97 treescrn
.addch(7, 7, ord('/'))
98 treescrn
.addch(8, 6, ord('/'))
99 treescrn
.addch(9, 6, ord('/'))
100 treescrn
.addch(10, 5, ord('/'))
101 treescrn
.addch(11, 3, ord('/'))
102 treescrn
.addch(12, 2, ord('/'))
104 treescrn
.addch(1, 13, ord('\\'))
105 treescrn
.addch(2, 13, ord('\\'))
106 treescrn
.addch(3, 14, ord('\\'))
107 treescrn
.addch(4, 15, ord('\\'))
108 treescrn
.addch(5, 15, ord('\\'))
109 treescrn
.addch(6, 16, ord('\\'))
110 treescrn
.addch(7, 17, ord('\\'))
111 treescrn
.addch(8, 18, ord('\\'))
112 treescrn
.addch(9, 18, ord('\\'))
113 treescrn
.addch(10, 19, ord('\\'))
114 treescrn
.addch(11, 21, ord('\\'))
115 treescrn
.addch(12, 22, ord('\\'))
117 treescrn
.addch(4, 10, ord('_'))
118 treescrn
.addch(4, 14, ord('_'))
119 treescrn
.addch(8, 7, ord('_'))
120 treescrn
.addch(8, 17, ord('_'))
122 treescrn
.addstr(13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\")
124 treescrn
.addstr(14, 11, "| |")
125 treescrn
.addstr(15, 11, "|_|")
127 unset_color(treescrn
)
134 treescrn
.overlay(treescrn2
)
136 set_color(treescrn2
, curses
.COLOR_BLUE
)
137 treescrn2
.addch(3, 9, ord('@'))
138 treescrn2
.addch(3, 15, ord('@'))
139 treescrn2
.addch(4, 8, ord('@'))
140 treescrn2
.addch(4, 16, ord('@'))
141 treescrn2
.addch(5, 7, ord('@'))
142 treescrn2
.addch(5, 17, ord('@'))
143 treescrn2
.addch(7, 6, ord('@'))
144 treescrn2
.addch(7, 18, ord('@'))
145 treescrn2
.addch(8, 5, ord('@'))
146 treescrn2
.addch(8, 19, ord('@'))
147 treescrn2
.addch(10, 4, ord('@'))
148 treescrn2
.addch(10, 20, ord('@'))
149 treescrn2
.addch(11, 2, ord('@'))
150 treescrn2
.addch(11, 22, ord('@'))
151 treescrn2
.addch(12, 1, ord('@'))
152 treescrn2
.addch(12, 23, ord('@'))
154 unset_color(treescrn2
)
160 treescrn2
.attrset(curses
.A_BOLD | curses
.A_BLINK
)
161 set_color(treescrn2
, curses
.COLOR_YELLOW
)
163 treescrn2
.addch(0, 12, ord('*'))
166 unset_color(treescrn2
)
172 treescrn2
.attrset(curses
.A_BOLD | curses
.A_BLINK
)
173 set_color(treescrn2
, curses
.COLOR_WHITE
)
175 treescrn2
.addch(3, 13, ord('\''))
176 treescrn2
.addch(3, 12, ord(':'))
177 treescrn2
.addch(3, 11, ord('.'))
179 treescrn2
.attroff(curses
.A_BOLD | curses
.A_BLINK
)
180 unset_color(treescrn2
)
187 treescrn2
.attrset(curses
.A_BOLD | curses
.A_BLINK
)
188 set_color(treescrn2
, curses
.COLOR_WHITE
)
190 treescrn2
.addch(5, 14, ord('\''))
191 treescrn2
.addch(5, 13, ord(':'))
192 treescrn2
.addch(5, 12, ord('.'))
193 treescrn2
.addch(5, 11, ord(','))
194 treescrn2
.addch(6, 10, ord('\''))
195 treescrn2
.addch(6, 9, ord(':'))
197 treescrn2
.attroff(curses
.A_BOLD | curses
.A_BLINK
)
198 unset_color(treescrn2
)
205 treescrn2
.attrset(curses
.A_BOLD | curses
.A_BLINK
)
206 set_color(treescrn2
, curses
.COLOR_WHITE
)
208 treescrn2
.addch(7, 16, ord('\''))
209 treescrn2
.addch(7, 15, ord(':'))
210 treescrn2
.addch(7, 14, ord('.'))
211 treescrn2
.addch(7, 13, ord(','))
212 treescrn2
.addch(8, 12, ord('\''))
213 treescrn2
.addch(8, 11, ord(':'))
214 treescrn2
.addch(8, 10, ord('.'))
215 treescrn2
.addch(8, 9, ord(','))
217 treescrn2
.attroff(curses
.A_BOLD | curses
.A_BLINK
)
218 unset_color(treescrn2
)
225 treescrn2
.attrset(curses
.A_BOLD | curses
.A_BLINK
)
226 set_color(treescrn2
, curses
.COLOR_WHITE
)
228 treescrn2
.addch(9, 17, ord('\''))
229 treescrn2
.addch(9, 16, ord(':'))
230 treescrn2
.addch(9, 15, ord('.'))
231 treescrn2
.addch(9, 14, ord(','))
232 treescrn2
.addch(10, 13, ord('\''))
233 treescrn2
.addch(10, 12, ord(':'))
234 treescrn2
.addch(10, 11, ord('.'))
235 treescrn2
.addch(10, 10, ord(','))
236 treescrn2
.addch(11, 9, ord('\''))
237 treescrn2
.addch(11, 8, ord(':'))
238 treescrn2
.addch(11, 7, ord('.'))
239 treescrn2
.addch(11, 6, ord(','))
240 treescrn2
.addch(12, 5, ord('\''))
242 treescrn2
.attroff(curses
.A_BOLD | curses
.A_BLINK
)
243 unset_color(treescrn2
)
250 treescrn2
.attrset(curses
.A_BOLD | curses
.A_BLINK
)
251 set_color(treescrn2
, curses
.COLOR_WHITE
)
253 treescrn2
.addch(11, 19, ord('\''))
254 treescrn2
.addch(11, 18, ord(':'))
255 treescrn2
.addch(11, 17, ord('.'))
256 treescrn2
.addch(11, 16, ord(','))
257 treescrn2
.addch(12, 15, ord('\''))
258 treescrn2
.addch(12, 14, ord(':'))
259 treescrn2
.addch(12, 13, ord('.'))
260 treescrn2
.addch(12, 12, ord(','))
262 treescrn2
.attroff(curses
.A_BOLD | curses
.A_BLINK
)
263 unset_color(treescrn2
)
265 # save a fully lit tree
266 treescrn2
.overlay(treescrn
)
275 for cycle
in range(0, 5):
277 treescrn3
.overlay(treescrn8
)
282 treescrn4
.overlay(treescrn8
)
287 treescrn5
.overlay(treescrn8
)
292 treescrn6
.overlay(treescrn8
)
297 treescrn7
.overlay(treescrn8
)
305 treescrn
.overlay(treescrn8
)
311 def deer_step(win
, y
, x
):
320 for x_pos
in range(70, 62, -1):
321 if x_pos
< 66: y_pos
= 1
322 for looper
in range(0, 4):
323 dotdeer0
.addch(y_pos
, x_pos
, ord('.'))
333 for x_pos
in range(x_pos
- 1, 50, -1):
334 for looper
in range(0, 4):
339 stardeer0
.addch(y_pos
, x_pos
, ord('*'))
348 dotdeer0
.addch(y_pos
, x_pos
, ord('*'))
357 for y_pos
in range(2, 5):
362 for looper
in range(0, 4):
363 deer_step(lildeer3
, y_pos
, x_pos
)
364 deer_step(lildeer2
, y_pos
, x_pos
)
365 deer_step(lildeer1
, y_pos
, x_pos
)
366 deer_step(lildeer2
, y_pos
, x_pos
)
367 deer_step(lildeer3
, y_pos
, x_pos
)
377 for y_pos
in range(5, 10):
383 for looper
in range(0, 2):
384 deer_step(middeer3
, y_pos
, x_pos
)
385 deer_step(middeer2
, y_pos
, x_pos
)
386 deer_step(middeer1
, y_pos
, x_pos
)
387 deer_step(middeer2
, y_pos
, x_pos
)
388 deer_step(middeer3
, y_pos
, x_pos
)
400 for x_pos
in range(8, 16):
401 deer_step(bigdeer4
, y_pos
, x_pos
)
402 deer_step(bigdeer3
, y_pos
, x_pos
)
403 deer_step(bigdeer2
, y_pos
, x_pos
)
404 deer_step(bigdeer1
, y_pos
, x_pos
)
405 deer_step(bigdeer2
, y_pos
, x_pos
)
406 deer_step(bigdeer3
, y_pos
, x_pos
)
407 deer_step(bigdeer4
, y_pos
, x_pos
)
408 deer_step(bigdeer0
, y_pos
, x_pos
)
412 for looper
in range(0, 6):
413 deer_step(lookdeer4
, y_pos
, x_pos
)
414 deer_step(lookdeer3
, y_pos
, x_pos
)
415 deer_step(lookdeer2
, y_pos
, x_pos
)
416 deer_step(lookdeer1
, y_pos
, x_pos
)
417 deer_step(lookdeer2
, y_pos
, x_pos
)
418 deer_step(lookdeer3
, y_pos
, x_pos
)
419 deer_step(lookdeer4
, y_pos
, x_pos
)
421 deer_step(lookdeer0
, y_pos
, x_pos
)
423 for y_pos
in range(y_pos
, 10):
424 for looper
in range(0, 2):
425 deer_step(bigdeer4
, y_pos
, x_pos
)
426 deer_step(bigdeer3
, y_pos
, x_pos
)
427 deer_step(bigdeer2
, y_pos
, x_pos
)
428 deer_step(bigdeer1
, y_pos
, x_pos
)
429 deer_step(bigdeer2
, y_pos
, x_pos
)
430 deer_step(bigdeer3
, y_pos
, x_pos
)
431 deer_step(bigdeer4
, y_pos
, x_pos
)
432 deer_step(bigdeer0
, y_pos
, x_pos
)
436 deer_step(lookdeer3
, y_pos
, x_pos
)
443 global my_bg
, y_pos
, x_pos
444 global treescrn
, treescrn2
, treescrn3
, treescrn4
445 global treescrn5
, treescrn6
, treescrn7
, treescrn8
446 global dotdeer0
, stardeer0
447 global lildeer0
, lildeer1
, lildeer2
, lildeer3
448 global middeer0
, middeer1
, middeer2
, middeer3
449 global bigdeer0
, bigdeer1
, bigdeer2
, bigdeer3
, bigdeer4
450 global lookdeer0
, lookdeer1
, lookdeer2
, lookdeer3
, lookdeer4
451 global w_holiday
, w_del_msg
453 my_bg
= curses
.COLOR_BLACK
456 treescrn
= curses
.newwin(16, 27, 3, 53)
457 treescrn2
= curses
.newwin(16, 27, 3, 53)
458 treescrn3
= curses
.newwin(16, 27, 3, 53)
459 treescrn4
= curses
.newwin(16, 27, 3, 53)
460 treescrn5
= curses
.newwin(16, 27, 3, 53)
461 treescrn6
= curses
.newwin(16, 27, 3, 53)
462 treescrn7
= curses
.newwin(16, 27, 3, 53)
463 treescrn8
= curses
.newwin(16, 27, 3, 53)
465 dotdeer0
= curses
.newwin(3, 71, 0, 8)
467 stardeer0
= curses
.newwin(4, 56, 0, 8)
469 lildeer0
= curses
.newwin(7, 53, 0, 8)
470 lildeer1
= curses
.newwin(2, 4, 0, 0)
471 lildeer2
= curses
.newwin(2, 4, 0, 0)
472 lildeer3
= curses
.newwin(2, 4, 0, 0)
474 middeer0
= curses
.newwin(15, 42, 0, 8)
475 middeer1
= curses
.newwin(3, 7, 0, 0)
476 middeer2
= curses
.newwin(3, 7, 0, 0)
477 middeer3
= curses
.newwin(3, 7, 0, 0)
479 bigdeer0
= curses
.newwin(10, 23, 0, 0)
480 bigdeer1
= curses
.newwin(10, 23, 0, 0)
481 bigdeer2
= curses
.newwin(10, 23, 0, 0)
482 bigdeer3
= curses
.newwin(10, 23, 0, 0)
483 bigdeer4
= curses
.newwin(10, 23, 0, 0)
485 lookdeer0
= curses
.newwin(10, 25, 0, 0)
486 lookdeer1
= curses
.newwin(10, 25, 0, 0)
487 lookdeer2
= curses
.newwin(10, 25, 0, 0)
488 lookdeer3
= curses
.newwin(10, 25, 0, 0)
489 lookdeer4
= curses
.newwin(10, 25, 0, 0)
491 w_holiday
= curses
.newwin(1, 27, 3, 27)
493 w_del_msg
= curses
.newwin(1, 20, 23, 60)
496 w_del_msg
.addstr(0, 0, "Hit any key to quit")
501 w_holiday
.addstr(0, 0, "H A P P Y H O L I D A Y S")
505 # set up the windows for our various reindeer
506 lildeer1
.addch(0, 0, ord('V'))
507 lildeer1
.addch(1, 0, ord('@'))
508 lildeer1
.addch(1, 1, ord('<'))
509 lildeer1
.addch(1, 2, ord('>'))
511 lildeer1
.addch(1, 3, ord('~'))
515 lildeer2
.addch(0, 0, ord('V'))
516 lildeer2
.addch(1, 0, ord('@'))
517 lildeer2
.addch(1, 1, ord('|'))
518 lildeer2
.addch(1, 2, ord('|'))
520 lildeer2
.addch(1, 3, ord('~'))
524 lildeer3
.addch(0, 0, ord('V'))
525 lildeer3
.addch(1, 0, ord('@'))
526 lildeer3
.addch(1, 1, ord('>'))
527 lildeer3
.addch(1, 2, ord('<'))
529 lildeer2
.addch(1, 3, ord('~')) # XXX
533 middeer1
.addch(0, 2, ord('y'))
534 middeer1
.addch(0, 3, ord('y'))
535 middeer1
.addch(1, 2, ord('0'))
536 middeer1
.addch(1, 3, ord('('))
537 middeer1
.addch(1, 4, ord('='))
538 middeer1
.addch(1, 5, ord(')'))
539 middeer1
.addch(1, 6, ord('~'))
540 middeer1
.addch(2, 3, ord('\\'))
541 middeer1
.addch(2, 5, ord('/'))
543 middeer2
.addch(0, 2, ord('y'))
544 middeer2
.addch(0, 3, ord('y'))
545 middeer2
.addch(1, 2, ord('0'))
546 middeer2
.addch(1, 3, ord('('))
547 middeer2
.addch(1, 4, ord('='))
548 middeer2
.addch(1, 5, ord(')'))
549 middeer2
.addch(1, 6, ord('~'))
550 middeer2
.addch(2, 3, ord('|'))
551 middeer2
.addch(2, 5, ord('|'))
553 middeer3
.addch(0, 2, ord('y'))
554 middeer3
.addch(0, 3, ord('y'))
555 middeer3
.addch(1, 2, ord('0'))
556 middeer3
.addch(1, 3, ord('('))
557 middeer3
.addch(1, 4, ord('='))
558 middeer3
.addch(1, 5, ord(')'))
559 middeer3
.addch(1, 6, ord('~'))
560 middeer3
.addch(2, 3, ord('/'))
561 middeer3
.addch(2, 5, ord('\\'))
563 bigdeer1
.addch(0, 17, ord('\\'))
564 bigdeer1
.addch(0, 18, ord('/'))
565 bigdeer1
.addch(0, 19, ord('\\'))
566 bigdeer1
.addch(0, 20, ord('/'))
567 bigdeer1
.addch(1, 18, ord('\\'))
568 bigdeer1
.addch(1, 20, ord('/'))
569 bigdeer1
.addch(2, 19, ord('|'))
570 bigdeer1
.addch(2, 20, ord('_'))
571 bigdeer1
.addch(3, 18, ord('/'))
572 bigdeer1
.addch(3, 19, ord('^'))
573 bigdeer1
.addch(3, 20, ord('0'))
574 bigdeer1
.addch(3, 21, ord('\\'))
575 bigdeer1
.addch(4, 17, ord('/'))
576 bigdeer1
.addch(4, 18, ord('/'))
577 bigdeer1
.addch(4, 19, ord('\\'))
578 bigdeer1
.addch(4, 22, ord('\\'))
579 bigdeer1
.addstr(5, 7, "^~~~~~~~~// ~~U")
580 bigdeer1
.addstr(6, 7, "( \\_____( /") # ))
581 bigdeer1
.addstr(7, 8, "( ) /")
582 bigdeer1
.addstr(8, 9, "\\\\ /")
583 bigdeer1
.addstr(9, 11, "\\>/>")
585 bigdeer2
.addch(0, 17, ord('\\'))
586 bigdeer2
.addch(0, 18, ord('/'))
587 bigdeer2
.addch(0, 19, ord('\\'))
588 bigdeer2
.addch(0, 20, ord('/'))
589 bigdeer2
.addch(1, 18, ord('\\'))
590 bigdeer2
.addch(1, 20, ord('/'))
591 bigdeer2
.addch(2, 19, ord('|'))
592 bigdeer2
.addch(2, 20, ord('_'))
593 bigdeer2
.addch(3, 18, ord('/'))
594 bigdeer2
.addch(3, 19, ord('^'))
595 bigdeer2
.addch(3, 20, ord('0'))
596 bigdeer2
.addch(3, 21, ord('\\'))
597 bigdeer2
.addch(4, 17, ord('/'))
598 bigdeer2
.addch(4, 18, ord('/'))
599 bigdeer2
.addch(4, 19, ord('\\'))
600 bigdeer2
.addch(4, 22, ord('\\'))
601 bigdeer2
.addstr(5, 7, "^~~~~~~~~// ~~U")
602 bigdeer2
.addstr(6, 7, "(( )____( /") # ))
603 bigdeer2
.addstr(7, 7, "( / |")
604 bigdeer2
.addstr(8, 8, "\\/ |")
605 bigdeer2
.addstr(9, 9, "|> |>")
607 bigdeer3
.addch(0, 17, ord('\\'))
608 bigdeer3
.addch(0, 18, ord('/'))
609 bigdeer3
.addch(0, 19, ord('\\'))
610 bigdeer3
.addch(0, 20, ord('/'))
611 bigdeer3
.addch(1, 18, ord('\\'))
612 bigdeer3
.addch(1, 20, ord('/'))
613 bigdeer3
.addch(2, 19, ord('|'))
614 bigdeer3
.addch(2, 20, ord('_'))
615 bigdeer3
.addch(3, 18, ord('/'))
616 bigdeer3
.addch(3, 19, ord('^'))
617 bigdeer3
.addch(3, 20, ord('0'))
618 bigdeer3
.addch(3, 21, ord('\\'))
619 bigdeer3
.addch(4, 17, ord('/'))
620 bigdeer3
.addch(4, 18, ord('/'))
621 bigdeer3
.addch(4, 19, ord('\\'))
622 bigdeer3
.addch(4, 22, ord('\\'))
623 bigdeer3
.addstr(5, 7, "^~~~~~~~~// ~~U")
624 bigdeer3
.addstr(6, 6, "( ()_____( /") # ))
625 bigdeer3
.addstr(7, 6, "/ / /")
626 bigdeer3
.addstr(8, 5, "|/ \\")
627 bigdeer3
.addstr(9, 5, "/> \\>")
629 bigdeer4
.addch(0, 17, ord('\\'))
630 bigdeer4
.addch(0, 18, ord('/'))
631 bigdeer4
.addch(0, 19, ord('\\'))
632 bigdeer4
.addch(0, 20, ord('/'))
633 bigdeer4
.addch(1, 18, ord('\\'))
634 bigdeer4
.addch(1, 20, ord('/'))
635 bigdeer4
.addch(2, 19, ord('|'))
636 bigdeer4
.addch(2, 20, ord('_'))
637 bigdeer4
.addch(3, 18, ord('/'))
638 bigdeer4
.addch(3, 19, ord('^'))
639 bigdeer4
.addch(3, 20, ord('0'))
640 bigdeer4
.addch(3, 21, ord('\\'))
641 bigdeer4
.addch(4, 17, ord('/'))
642 bigdeer4
.addch(4, 18, ord('/'))
643 bigdeer4
.addch(4, 19, ord('\\'))
644 bigdeer4
.addch(4, 22, ord('\\'))
645 bigdeer4
.addstr(5, 7, "^~~~~~~~~// ~~U")
646 bigdeer4
.addstr(6, 6, "( )______( /") # )
647 bigdeer4
.addstr(7, 5, "(/ \\") # )
648 bigdeer4
.addstr(8, 0, "v___= ----^")
650 lookdeer1
.addstr(0, 16, "\\/ \\/")
651 lookdeer1
.addstr(1, 17, "\\Y/ \\Y/")
652 lookdeer1
.addstr(2, 19, "\\=/")
653 lookdeer1
.addstr(3, 17, "^\\o o/^")
654 lookdeer1
.addstr(4, 17, "//( )")
655 lookdeer1
.addstr(5, 7, "^~~~~~~~~// \\O/")
656 lookdeer1
.addstr(6, 7, "( \\_____( /") # ))
657 lookdeer1
.addstr(7, 8, "( ) /")
658 lookdeer1
.addstr(8, 9, "\\\\ /")
659 lookdeer1
.addstr(9, 11, "\\>/>")
661 lookdeer2
.addstr(0, 16, "\\/ \\/")
662 lookdeer2
.addstr(1, 17, "\\Y/ \\Y/")
663 lookdeer2
.addstr(2, 19, "\\=/")
664 lookdeer2
.addstr(3, 17, "^\\o o/^")
665 lookdeer2
.addstr(4, 17, "//( )")
666 lookdeer2
.addstr(5, 7, "^~~~~~~~~// \\O/")
667 lookdeer2
.addstr(6, 7, "(( )____( /") # ))
668 lookdeer2
.addstr(7, 7, "( / |")
669 lookdeer2
.addstr(8, 8, "\\/ |")
670 lookdeer2
.addstr(9, 9, "|> |>")
672 lookdeer3
.addstr(0, 16, "\\/ \\/")
673 lookdeer3
.addstr(1, 17, "\\Y/ \\Y/")
674 lookdeer3
.addstr(2, 19, "\\=/")
675 lookdeer3
.addstr(3, 17, "^\\o o/^")
676 lookdeer3
.addstr(4, 17, "//( )")
677 lookdeer3
.addstr(5, 7, "^~~~~~~~~// \\O/")
678 lookdeer3
.addstr(6, 6, "( ()_____( /") # ))
679 lookdeer3
.addstr(7, 6, "/ / /")
680 lookdeer3
.addstr(8, 5, "|/ \\")
681 lookdeer3
.addstr(9, 5, "/> \\>")
683 lookdeer4
.addstr(0, 16, "\\/ \\/")
684 lookdeer4
.addstr(1, 17, "\\Y/ \\Y/")
685 lookdeer4
.addstr(2, 19, "\\=/")
686 lookdeer4
.addstr(3, 17, "^\\o o/^")
687 lookdeer4
.addstr(4, 17, "//( )")
688 lookdeer4
.addstr(5, 7, "^~~~~~~~~// \\O/")
689 lookdeer4
.addstr(6, 6, "( )______( /") # )
690 lookdeer4
.addstr(7, 5, "(/ \\") # )
691 lookdeer4
.addstr(8, 0, "v___= ----^")
693 ###############################################
731 # set up the windows for our blinking trees
734 treescrn
.overlay(treescrn3
)
737 treescrn3
.addch(4, 18, ord(' '))
738 treescrn3
.addch(7, 6, ord(' '))
739 treescrn3
.addch(8, 19, ord(' '))
740 treescrn3
.addch(11, 22, ord(' '))
743 treescrn3
.addch(0, 12, ord('*'))
746 treescrn3
.addch(3, 11, ord(' '))
749 treescrn3
.addch(5, 13, ord(' '))
750 treescrn3
.addch(6, 10, ord(' '))
753 treescrn3
.addch(7, 16, ord(' '))
754 treescrn3
.addch(7, 14, ord(' '))
757 treescrn3
.addch(10, 13, ord(' '))
758 treescrn3
.addch(10, 10, ord(' '))
759 treescrn3
.addch(11, 8, ord(' '))
762 treescrn3
.addch(11, 18, ord(' '))
763 treescrn3
.addch(12, 13, ord(' '))
766 treescrn
.overlay(treescrn4
)
769 treescrn4
.addch(3, 9, ord(' '))
770 treescrn4
.addch(4, 16, ord(' '))
771 treescrn4
.addch(7, 6, ord(' '))
772 treescrn4
.addch(8, 19, ord(' '))
773 treescrn4
.addch(11, 2, ord(' '))
774 treescrn4
.addch(12, 23, ord(' '))
778 treescrn4
.addch(0, 12, ord('*'))
782 treescrn4
.addch(3, 13, ord(' '))
787 treescrn4
.addch(7, 15, ord(' '))
788 treescrn4
.addch(8, 11, ord(' '))
791 treescrn4
.addch(9, 16, ord(' '))
792 treescrn4
.addch(10, 12, ord(' '))
793 treescrn4
.addch(11, 8, ord(' '))
796 treescrn4
.addch(11, 18, ord(' '))
797 treescrn4
.addch(12, 14, ord(' '))
800 treescrn
.overlay(treescrn5
)
803 treescrn5
.addch(3, 15, ord(' '))
804 treescrn5
.addch(10, 20, ord(' '))
805 treescrn5
.addch(12, 1, ord(' '))
808 treescrn5
.addch(0, 12, ord(' '))
811 treescrn5
.addch(3, 11, ord(' '))
814 treescrn5
.addch(5, 12, ord(' '))
817 treescrn5
.addch(7, 14, ord(' '))
818 treescrn5
.addch(8, 10, ord(' '))
821 treescrn5
.addch(9, 15, ord(' '))
822 treescrn5
.addch(10, 11, ord(' '))
823 treescrn5
.addch(11, 7, ord(' '))
826 treescrn5
.addch(11, 17, ord(' '))
827 treescrn5
.addch(12, 13, ord(' '))
830 treescrn
.overlay(treescrn6
)
833 treescrn6
.addch(6, 7, ord(' '))
834 treescrn6
.addch(7, 18, ord(' '))
835 treescrn6
.addch(10, 4, ord(' '))
836 treescrn6
.addch(11, 23, ord(' '))
840 treescrn6
.addch(0, 12, ord('*'))
846 treescrn6
.addch(5, 11, ord(' '))
849 treescrn6
.addch(7, 13, ord(' '))
850 treescrn6
.addch(8, 9, ord(' '))
853 treescrn6
.addch(9, 14, ord(' '))
854 treescrn6
.addch(10, 10, ord(' '))
855 treescrn6
.addch(11, 6, ord(' '))
858 treescrn6
.addch(11, 16, ord(' '))
859 treescrn6
.addch(12, 12, ord(' '))
863 treescrn
.overlay(treescrn7
)
866 treescrn7
.addch(3, 15, ord(' '))
867 treescrn7
.addch(6, 7, ord(' '))
868 treescrn7
.addch(7, 18, ord(' '))
869 treescrn7
.addch(10, 4, ord(' '))
870 treescrn7
.addch(11, 22, ord(' '))
873 treescrn7
.addch(0, 12, ord('*'))
876 treescrn7
.addch(3, 12, ord(' '))
879 treescrn7
.addch(5, 13, ord(' '))
880 treescrn7
.addch(6, 9, ord(' '))
883 treescrn7
.addch(7, 15, ord(' '))
884 treescrn7
.addch(8, 11, ord(' '))
887 treescrn7
.addch(9, 16, ord(' '))
888 treescrn7
.addch(10, 12, ord(' '))
889 treescrn7
.addch(11, 8, ord(' '))
892 treescrn7
.addch(11, 18, ord(' '))
893 treescrn7
.addch(12, 14, ord(' '))
903 for i
in range(0, 20):