|
1 # asciixmas |
|
2 # December 1989 Larry Bartz Indianapolis, IN |
|
3 # |
|
4 # $Id: xmas.py 46623 2006-06-03 22:59:23Z andrew.kuchling $ |
|
5 # |
|
6 # I'm dreaming of an ascii character-based monochrome Christmas, |
|
7 # Just like the ones I used to know! |
|
8 # Via a full duplex communications channel, |
|
9 # At 9600 bits per second, |
|
10 # Even though it's kinda slow. |
|
11 # |
|
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)! |
|
17 # |
|
18 # |
|
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. |
|
24 # |
|
25 |
|
26 import curses |
|
27 import sys |
|
28 |
|
29 FROMWHO = "Thomas Gellekum <tg@FreeBSD.org>" |
|
30 |
|
31 def set_color(win, color): |
|
32 if curses.has_colors(): |
|
33 n = color + 1 |
|
34 curses.init_pair(n, color, my_bg) |
|
35 win.attroff(curses.A_COLOR) |
|
36 win.attron(curses.color_pair(n)) |
|
37 |
|
38 def unset_color(win): |
|
39 if curses.has_colors(): |
|
40 win.attrset(curses.color_pair(0)) |
|
41 |
|
42 def look_out(msecs): |
|
43 curses.napms(msecs) |
|
44 if stdscr.getch() != -1: |
|
45 curses.beep() |
|
46 sys.exit(0) |
|
47 |
|
48 def boxit(): |
|
49 for y in range(0, 20): |
|
50 stdscr.addch(y, 7, ord('|')) |
|
51 |
|
52 for x in range(8, 80): |
|
53 stdscr.addch(19, x, ord('_')) |
|
54 |
|
55 for x in range(0, 80): |
|
56 stdscr.addch(22, x, ord('_')) |
|
57 |
|
58 return |
|
59 |
|
60 def seas(): |
|
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')) |
|
69 |
|
70 return |
|
71 |
|
72 def greet(): |
|
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')) |
|
82 |
|
83 return |
|
84 |
|
85 def fromwho(): |
|
86 stdscr.addstr(21, 13, FROMWHO) |
|
87 return |
|
88 |
|
89 def tree(): |
|
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('/')) |
|
103 |
|
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('\\')) |
|
116 |
|
117 treescrn.addch(4, 10, ord('_')) |
|
118 treescrn.addch(4, 14, ord('_')) |
|
119 treescrn.addch(8, 7, ord('_')) |
|
120 treescrn.addch(8, 17, ord('_')) |
|
121 |
|
122 treescrn.addstr(13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\") |
|
123 |
|
124 treescrn.addstr(14, 11, "| |") |
|
125 treescrn.addstr(15, 11, "|_|") |
|
126 |
|
127 unset_color(treescrn) |
|
128 treescrn.refresh() |
|
129 w_del_msg.refresh() |
|
130 |
|
131 return |
|
132 |
|
133 def balls(): |
|
134 treescrn.overlay(treescrn2) |
|
135 |
|
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('@')) |
|
153 |
|
154 unset_color(treescrn2) |
|
155 treescrn2.refresh() |
|
156 w_del_msg.refresh() |
|
157 return |
|
158 |
|
159 def star(): |
|
160 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) |
|
161 set_color(treescrn2, curses.COLOR_YELLOW) |
|
162 |
|
163 treescrn2.addch(0, 12, ord('*')) |
|
164 treescrn2.standend() |
|
165 |
|
166 unset_color(treescrn2) |
|
167 treescrn2.refresh() |
|
168 w_del_msg.refresh() |
|
169 return |
|
170 |
|
171 def strng1(): |
|
172 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) |
|
173 set_color(treescrn2, curses.COLOR_WHITE) |
|
174 |
|
175 treescrn2.addch(3, 13, ord('\'')) |
|
176 treescrn2.addch(3, 12, ord(':')) |
|
177 treescrn2.addch(3, 11, ord('.')) |
|
178 |
|
179 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) |
|
180 unset_color(treescrn2) |
|
181 |
|
182 treescrn2.refresh() |
|
183 w_del_msg.refresh() |
|
184 return |
|
185 |
|
186 def strng2(): |
|
187 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) |
|
188 set_color(treescrn2, curses.COLOR_WHITE) |
|
189 |
|
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(':')) |
|
196 |
|
197 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) |
|
198 unset_color(treescrn2) |
|
199 |
|
200 treescrn2.refresh() |
|
201 w_del_msg.refresh() |
|
202 return |
|
203 |
|
204 def strng3(): |
|
205 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) |
|
206 set_color(treescrn2, curses.COLOR_WHITE) |
|
207 |
|
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(',')) |
|
216 |
|
217 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) |
|
218 unset_color(treescrn2) |
|
219 |
|
220 treescrn2.refresh() |
|
221 w_del_msg.refresh() |
|
222 return |
|
223 |
|
224 def strng4(): |
|
225 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) |
|
226 set_color(treescrn2, curses.COLOR_WHITE) |
|
227 |
|
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('\'')) |
|
241 |
|
242 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) |
|
243 unset_color(treescrn2) |
|
244 |
|
245 treescrn2.refresh() |
|
246 w_del_msg.refresh() |
|
247 return |
|
248 |
|
249 def strng5(): |
|
250 treescrn2.attrset(curses.A_BOLD | curses.A_BLINK) |
|
251 set_color(treescrn2, curses.COLOR_WHITE) |
|
252 |
|
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(',')) |
|
261 |
|
262 treescrn2.attroff(curses.A_BOLD | curses.A_BLINK) |
|
263 unset_color(treescrn2) |
|
264 |
|
265 # save a fully lit tree |
|
266 treescrn2.overlay(treescrn) |
|
267 |
|
268 treescrn2.refresh() |
|
269 w_del_msg.refresh() |
|
270 return |
|
271 |
|
272 def blinkit(): |
|
273 treescrn8.touchwin() |
|
274 |
|
275 for cycle in range(5): |
|
276 if cycle == 0: |
|
277 treescrn3.overlay(treescrn8) |
|
278 treescrn8.refresh() |
|
279 w_del_msg.refresh() |
|
280 break |
|
281 elif cycle == 1: |
|
282 treescrn4.overlay(treescrn8) |
|
283 treescrn8.refresh() |
|
284 w_del_msg.refresh() |
|
285 break |
|
286 elif cycle == 2: |
|
287 treescrn5.overlay(treescrn8) |
|
288 treescrn8.refresh() |
|
289 w_del_msg.refresh() |
|
290 break |
|
291 elif cycle == 3: |
|
292 treescrn6.overlay(treescrn8) |
|
293 treescrn8.refresh() |
|
294 w_del_msg.refresh() |
|
295 break |
|
296 elif cycle == 4: |
|
297 treescrn7.overlay(treescrn8) |
|
298 treescrn8.refresh() |
|
299 w_del_msg.refresh() |
|
300 break |
|
301 |
|
302 treescrn8.touchwin() |
|
303 |
|
304 # ALL ON |
|
305 treescrn.overlay(treescrn8) |
|
306 treescrn8.refresh() |
|
307 w_del_msg.refresh() |
|
308 |
|
309 return |
|
310 |
|
311 def deer_step(win, y, x): |
|
312 win.mvwin(y, x) |
|
313 win.refresh() |
|
314 w_del_msg.refresh() |
|
315 look_out(5) |
|
316 |
|
317 def reindeer(): |
|
318 y_pos = 0 |
|
319 |
|
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('.')) |
|
324 dotdeer0.refresh() |
|
325 w_del_msg.refresh() |
|
326 dotdeer0.erase() |
|
327 dotdeer0.refresh() |
|
328 w_del_msg.refresh() |
|
329 look_out(50) |
|
330 |
|
331 y_pos = 2 |
|
332 |
|
333 for x_pos in range(x_pos - 1, 50, -1): |
|
334 for looper in range(0, 4): |
|
335 if x_pos < 56: |
|
336 y_pos = 3 |
|
337 |
|
338 try: |
|
339 stardeer0.addch(y_pos, x_pos, ord('*')) |
|
340 except curses.error: |
|
341 pass |
|
342 stardeer0.refresh() |
|
343 w_del_msg.refresh() |
|
344 stardeer0.erase() |
|
345 stardeer0.refresh() |
|
346 w_del_msg.refresh() |
|
347 else: |
|
348 dotdeer0.addch(y_pos, x_pos, ord('*')) |
|
349 dotdeer0.refresh() |
|
350 w_del_msg.refresh() |
|
351 dotdeer0.erase() |
|
352 dotdeer0.refresh() |
|
353 w_del_msg.refresh() |
|
354 |
|
355 x_pos = 58 |
|
356 |
|
357 for y_pos in range(2, 5): |
|
358 lildeer0.touchwin() |
|
359 lildeer0.refresh() |
|
360 w_del_msg.refresh() |
|
361 |
|
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) |
|
368 |
|
369 lildeer0.touchwin() |
|
370 lildeer0.refresh() |
|
371 w_del_msg.refresh() |
|
372 |
|
373 x_pos -= 2 |
|
374 |
|
375 x_pos = 35 |
|
376 |
|
377 for y_pos in range(5, 10): |
|
378 |
|
379 middeer0.touchwin() |
|
380 middeer0.refresh() |
|
381 w_del_msg.refresh() |
|
382 |
|
383 for looper in range(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) |
|
389 |
|
390 middeer0.touchwin() |
|
391 middeer0.refresh() |
|
392 w_del_msg.refresh() |
|
393 |
|
394 x_pos -= 3 |
|
395 |
|
396 look_out(300) |
|
397 |
|
398 y_pos = 1 |
|
399 |
|
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) |
|
409 |
|
410 x_pos -= 1 |
|
411 |
|
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) |
|
420 |
|
421 deer_step(lookdeer0, y_pos, x_pos) |
|
422 |
|
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) |
|
433 |
|
434 y_pos -= 1 |
|
435 |
|
436 deer_step(lookdeer3, y_pos, x_pos) |
|
437 return |
|
438 |
|
439 def main(win): |
|
440 global stdscr |
|
441 stdscr = win |
|
442 |
|
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 |
|
452 |
|
453 my_bg = curses.COLOR_BLACK |
|
454 # curses.curs_set(0) |
|
455 |
|
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) |
|
464 |
|
465 dotdeer0 = curses.newwin(3, 71, 0, 8) |
|
466 |
|
467 stardeer0 = curses.newwin(4, 56, 0, 8) |
|
468 |
|
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) |
|
473 |
|
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) |
|
478 |
|
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) |
|
484 |
|
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) |
|
490 |
|
491 w_holiday = curses.newwin(1, 27, 3, 27) |
|
492 |
|
493 w_del_msg = curses.newwin(1, 20, 23, 60) |
|
494 |
|
495 try: |
|
496 w_del_msg.addstr(0, 0, "Hit any key to quit") |
|
497 except curses.error: |
|
498 pass |
|
499 |
|
500 try: |
|
501 w_holiday.addstr(0, 0, "H A P P Y H O L I D A Y S") |
|
502 except curses.error: |
|
503 pass |
|
504 |
|
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('>')) |
|
510 try: |
|
511 lildeer1.addch(1, 3, ord('~')) |
|
512 except curses.error: |
|
513 pass |
|
514 |
|
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('|')) |
|
519 try: |
|
520 lildeer2.addch(1, 3, ord('~')) |
|
521 except curses.error: |
|
522 pass |
|
523 |
|
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('<')) |
|
528 try: |
|
529 lildeer2.addch(1, 3, ord('~')) # XXX |
|
530 except curses.error: |
|
531 pass |
|
532 |
|
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('/')) |
|
542 |
|
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('|')) |
|
552 |
|
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('\\')) |
|
562 |
|
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, "\\>/>") |
|
584 |
|
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, "|> |>") |
|
606 |
|
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, "/> \\>") |
|
628 |
|
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___= ----^") |
|
649 |
|
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, "\\>/>") |
|
660 |
|
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, "|> |>") |
|
671 |
|
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, "/> \\>") |
|
682 |
|
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___= ----^") |
|
692 |
|
693 ############################################### |
|
694 curses.cbreak() |
|
695 stdscr.nodelay(1) |
|
696 |
|
697 while 1: |
|
698 stdscr.clear() |
|
699 treescrn.erase() |
|
700 w_del_msg.touchwin() |
|
701 treescrn.touchwin() |
|
702 treescrn2.erase() |
|
703 treescrn2.touchwin() |
|
704 treescrn8.erase() |
|
705 treescrn8.touchwin() |
|
706 stdscr.refresh() |
|
707 look_out(150) |
|
708 boxit() |
|
709 stdscr.refresh() |
|
710 look_out(150) |
|
711 seas() |
|
712 stdscr.refresh() |
|
713 greet() |
|
714 stdscr.refresh() |
|
715 look_out(150) |
|
716 fromwho() |
|
717 stdscr.refresh() |
|
718 look_out(150) |
|
719 tree() |
|
720 look_out(150) |
|
721 balls() |
|
722 look_out(150) |
|
723 star() |
|
724 look_out(150) |
|
725 strng1() |
|
726 strng2() |
|
727 strng3() |
|
728 strng4() |
|
729 strng5() |
|
730 |
|
731 # set up the windows for our blinking trees |
|
732 # |
|
733 # treescrn3 |
|
734 treescrn.overlay(treescrn3) |
|
735 |
|
736 # balls |
|
737 treescrn3.addch(4, 18, ord(' ')) |
|
738 treescrn3.addch(7, 6, ord(' ')) |
|
739 treescrn3.addch(8, 19, ord(' ')) |
|
740 treescrn3.addch(11, 22, ord(' ')) |
|
741 |
|
742 # star |
|
743 treescrn3.addch(0, 12, ord('*')) |
|
744 |
|
745 # strng1 |
|
746 treescrn3.addch(3, 11, ord(' ')) |
|
747 |
|
748 # strng2 |
|
749 treescrn3.addch(5, 13, ord(' ')) |
|
750 treescrn3.addch(6, 10, ord(' ')) |
|
751 |
|
752 # strng3 |
|
753 treescrn3.addch(7, 16, ord(' ')) |
|
754 treescrn3.addch(7, 14, ord(' ')) |
|
755 |
|
756 # strng4 |
|
757 treescrn3.addch(10, 13, ord(' ')) |
|
758 treescrn3.addch(10, 10, ord(' ')) |
|
759 treescrn3.addch(11, 8, ord(' ')) |
|
760 |
|
761 # strng5 |
|
762 treescrn3.addch(11, 18, ord(' ')) |
|
763 treescrn3.addch(12, 13, ord(' ')) |
|
764 |
|
765 # treescrn4 |
|
766 treescrn.overlay(treescrn4) |
|
767 |
|
768 # balls |
|
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(' ')) |
|
775 |
|
776 # star |
|
777 treescrn4.standout() |
|
778 treescrn4.addch(0, 12, ord('*')) |
|
779 treescrn4.standend() |
|
780 |
|
781 # strng1 |
|
782 treescrn4.addch(3, 13, ord(' ')) |
|
783 |
|
784 # strng2 |
|
785 |
|
786 # strng3 |
|
787 treescrn4.addch(7, 15, ord(' ')) |
|
788 treescrn4.addch(8, 11, ord(' ')) |
|
789 |
|
790 # strng4 |
|
791 treescrn4.addch(9, 16, ord(' ')) |
|
792 treescrn4.addch(10, 12, ord(' ')) |
|
793 treescrn4.addch(11, 8, ord(' ')) |
|
794 |
|
795 # strng5 |
|
796 treescrn4.addch(11, 18, ord(' ')) |
|
797 treescrn4.addch(12, 14, ord(' ')) |
|
798 |
|
799 # treescrn5 |
|
800 treescrn.overlay(treescrn5) |
|
801 |
|
802 # balls |
|
803 treescrn5.addch(3, 15, ord(' ')) |
|
804 treescrn5.addch(10, 20, ord(' ')) |
|
805 treescrn5.addch(12, 1, ord(' ')) |
|
806 |
|
807 # star |
|
808 treescrn5.addch(0, 12, ord(' ')) |
|
809 |
|
810 # strng1 |
|
811 treescrn5.addch(3, 11, ord(' ')) |
|
812 |
|
813 # strng2 |
|
814 treescrn5.addch(5, 12, ord(' ')) |
|
815 |
|
816 # strng3 |
|
817 treescrn5.addch(7, 14, ord(' ')) |
|
818 treescrn5.addch(8, 10, ord(' ')) |
|
819 |
|
820 # strng4 |
|
821 treescrn5.addch(9, 15, ord(' ')) |
|
822 treescrn5.addch(10, 11, ord(' ')) |
|
823 treescrn5.addch(11, 7, ord(' ')) |
|
824 |
|
825 # strng5 |
|
826 treescrn5.addch(11, 17, ord(' ')) |
|
827 treescrn5.addch(12, 13, ord(' ')) |
|
828 |
|
829 # treescrn6 |
|
830 treescrn.overlay(treescrn6) |
|
831 |
|
832 # balls |
|
833 treescrn6.addch(6, 7, ord(' ')) |
|
834 treescrn6.addch(7, 18, ord(' ')) |
|
835 treescrn6.addch(10, 4, ord(' ')) |
|
836 treescrn6.addch(11, 23, ord(' ')) |
|
837 |
|
838 # star |
|
839 treescrn6.standout() |
|
840 treescrn6.addch(0, 12, ord('*')) |
|
841 treescrn6.standend() |
|
842 |
|
843 # strng1 |
|
844 |
|
845 # strng2 |
|
846 treescrn6.addch(5, 11, ord(' ')) |
|
847 |
|
848 # strng3 |
|
849 treescrn6.addch(7, 13, ord(' ')) |
|
850 treescrn6.addch(8, 9, ord(' ')) |
|
851 |
|
852 # strng4 |
|
853 treescrn6.addch(9, 14, ord(' ')) |
|
854 treescrn6.addch(10, 10, ord(' ')) |
|
855 treescrn6.addch(11, 6, ord(' ')) |
|
856 |
|
857 # strng5 |
|
858 treescrn6.addch(11, 16, ord(' ')) |
|
859 treescrn6.addch(12, 12, ord(' ')) |
|
860 |
|
861 # treescrn7 |
|
862 |
|
863 treescrn.overlay(treescrn7) |
|
864 |
|
865 # balls |
|
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(' ')) |
|
871 |
|
872 # star |
|
873 treescrn7.addch(0, 12, ord('*')) |
|
874 |
|
875 # strng1 |
|
876 treescrn7.addch(3, 12, ord(' ')) |
|
877 |
|
878 # strng2 |
|
879 treescrn7.addch(5, 13, ord(' ')) |
|
880 treescrn7.addch(6, 9, ord(' ')) |
|
881 |
|
882 # strng3 |
|
883 treescrn7.addch(7, 15, ord(' ')) |
|
884 treescrn7.addch(8, 11, ord(' ')) |
|
885 |
|
886 # strng4 |
|
887 treescrn7.addch(9, 16, ord(' ')) |
|
888 treescrn7.addch(10, 12, ord(' ')) |
|
889 treescrn7.addch(11, 8, ord(' ')) |
|
890 |
|
891 # strng5 |
|
892 treescrn7.addch(11, 18, ord(' ')) |
|
893 treescrn7.addch(12, 14, ord(' ')) |
|
894 |
|
895 look_out(150) |
|
896 reindeer() |
|
897 |
|
898 w_holiday.touchwin() |
|
899 w_holiday.refresh() |
|
900 w_del_msg.refresh() |
|
901 |
|
902 look_out(500) |
|
903 for i in range(0, 20): |
|
904 blinkit() |
|
905 |
|
906 curses.wrapper(main) |