~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Demo/curses/xmas.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# asciixmas
 
2
# December 1989             Larry Bartz           Indianapolis, IN
 
3
#
 
4
# $Id: xmas.py 46754 2006-06-08 15:35:45Z thomas.wouters $
 
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)