/Demo/curses/xmas.py

http://unladen-swallow.googlecode.com/ · Python · 906 lines · 681 code · 154 blank · 71 comment · 41 complexity · 946c15bbbfda84f92e03e94937ce8923 MD5 · raw file

  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. import curses
  26. import sys
  27. FROMWHO = "Thomas Gellekum <tg@FreeBSD.org>"
  28. def set_color(win, color):
  29. if curses.has_colors():
  30. n = color + 1
  31. curses.init_pair(n, color, my_bg)
  32. win.attroff(curses.A_COLOR)
  33. win.attron(curses.color_pair(n))
  34. def unset_color(win):
  35. if curses.has_colors():
  36. win.attrset(curses.color_pair(0))
  37. def look_out(msecs):
  38. curses.napms(msecs)
  39. if stdscr.getch() != -1:
  40. curses.beep()
  41. sys.exit(0)
  42. def boxit():
  43. for y in range(0, 20):
  44. stdscr.addch(y, 7, ord('|'))
  45. for x in range(8, 80):
  46. stdscr.addch(19, x, ord('_'))
  47. for x in range(0, 80):
  48. stdscr.addch(22, x, ord('_'))
  49. return
  50. def seas():
  51. stdscr.addch(4, 1, ord('S'))
  52. stdscr.addch(6, 1, ord('E'))
  53. stdscr.addch(8, 1, ord('A'))
  54. stdscr.addch(10, 1, ord('S'))
  55. stdscr.addch(12, 1, ord('O'))
  56. stdscr.addch(14, 1, ord('N'))
  57. stdscr.addch(16, 1, ord("'"))
  58. stdscr.addch(18, 1, ord('S'))
  59. return
  60. def greet():
  61. stdscr.addch(3, 5, ord('G'))
  62. stdscr.addch(5, 5, ord('R'))
  63. stdscr.addch(7, 5, ord('E'))
  64. stdscr.addch(9, 5, ord('E'))
  65. stdscr.addch(11, 5, ord('T'))
  66. stdscr.addch(13, 5, ord('I'))
  67. stdscr.addch(15, 5, ord('N'))
  68. stdscr.addch(17, 5, ord('G'))
  69. stdscr.addch(19, 5, ord('S'))
  70. return
  71. def fromwho():
  72. stdscr.addstr(21, 13, FROMWHO)
  73. return
  74. def tree():
  75. set_color(treescrn, curses.COLOR_GREEN)
  76. treescrn.addch(1, 11, ord('/'))
  77. treescrn.addch(2, 11, ord('/'))
  78. treescrn.addch(3, 10, ord('/'))
  79. treescrn.addch(4, 9, ord('/'))
  80. treescrn.addch(5, 9, ord('/'))
  81. treescrn.addch(6, 8, ord('/'))
  82. treescrn.addch(7, 7, ord('/'))
  83. treescrn.addch(8, 6, ord('/'))
  84. treescrn.addch(9, 6, ord('/'))
  85. treescrn.addch(10, 5, ord('/'))
  86. treescrn.addch(11, 3, ord('/'))
  87. treescrn.addch(12, 2, ord('/'))
  88. treescrn.addch(1, 13, ord('\\'))
  89. treescrn.addch(2, 13, ord('\\'))
  90. treescrn.addch(3, 14, ord('\\'))
  91. treescrn.addch(4, 15, ord('\\'))
  92. treescrn.addch(5, 15, ord('\\'))
  93. treescrn.addch(6, 16, ord('\\'))
  94. treescrn.addch(7, 17, ord('\\'))
  95. treescrn.addch(8, 18, ord('\\'))
  96. treescrn.addch(9, 18, ord('\\'))
  97. treescrn.addch(10, 19, ord('\\'))
  98. treescrn.addch(11, 21, ord('\\'))
  99. treescrn.addch(12, 22, ord('\\'))
  100. treescrn.addch(4, 10, ord('_'))
  101. treescrn.addch(4, 14, ord('_'))
  102. treescrn.addch(8, 7, ord('_'))
  103. treescrn.addch(8, 17, ord('_'))
  104. treescrn.addstr(13, 0, "//////////// \\\\\\\\\\\\\\\\\\\\\\\\")
  105. treescrn.addstr(14, 11, "| |")
  106. treescrn.addstr(15, 11, "|_|")
  107. unset_color(treescrn)
  108. treescrn.refresh()
  109. w_del_msg.refresh()
  110. return
  111. def balls():
  112. treescrn.overlay(treescrn2)
  113. set_color(treescrn2, curses.COLOR_BLUE)
  114. treescrn2.addch(3, 9, ord('@'))
  115. treescrn2.addch(3, 15, ord('@'))
  116. treescrn2.addch(4, 8, ord('@'))
  117. treescrn2.addch(4, 16, ord('@'))
  118. treescrn2.addch(5, 7, ord('@'))
  119. treescrn2.addch(5, 17, ord('@'))
  120. treescrn2.addch(7, 6, ord('@'))
  121. treescrn2.addch(7, 18, ord('@'))
  122. treescrn2.addch(8, 5, ord('@'))
  123. treescrn2.addch(8, 19, ord('@'))
  124. treescrn2.addch(10, 4, ord('@'))
  125. treescrn2.addch(10, 20, ord('@'))
  126. treescrn2.addch(11, 2, ord('@'))
  127. treescrn2.addch(11, 22, ord('@'))
  128. treescrn2.addch(12, 1, ord('@'))
  129. treescrn2.addch(12, 23, ord('@'))
  130. unset_color(treescrn2)
  131. treescrn2.refresh()
  132. w_del_msg.refresh()
  133. return
  134. def star():
  135. treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
  136. set_color(treescrn2, curses.COLOR_YELLOW)
  137. treescrn2.addch(0, 12, ord('*'))
  138. treescrn2.standend()
  139. unset_color(treescrn2)
  140. treescrn2.refresh()
  141. w_del_msg.refresh()
  142. return
  143. def strng1():
  144. treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
  145. set_color(treescrn2, curses.COLOR_WHITE)
  146. treescrn2.addch(3, 13, ord('\''))
  147. treescrn2.addch(3, 12, ord(':'))
  148. treescrn2.addch(3, 11, ord('.'))
  149. treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
  150. unset_color(treescrn2)
  151. treescrn2.refresh()
  152. w_del_msg.refresh()
  153. return
  154. def strng2():
  155. treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
  156. set_color(treescrn2, curses.COLOR_WHITE)
  157. treescrn2.addch(5, 14, ord('\''))
  158. treescrn2.addch(5, 13, ord(':'))
  159. treescrn2.addch(5, 12, ord('.'))
  160. treescrn2.addch(5, 11, ord(','))
  161. treescrn2.addch(6, 10, ord('\''))
  162. treescrn2.addch(6, 9, ord(':'))
  163. treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
  164. unset_color(treescrn2)
  165. treescrn2.refresh()
  166. w_del_msg.refresh()
  167. return
  168. def strng3():
  169. treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
  170. set_color(treescrn2, curses.COLOR_WHITE)
  171. treescrn2.addch(7, 16, ord('\''))
  172. treescrn2.addch(7, 15, ord(':'))
  173. treescrn2.addch(7, 14, ord('.'))
  174. treescrn2.addch(7, 13, ord(','))
  175. treescrn2.addch(8, 12, ord('\''))
  176. treescrn2.addch(8, 11, ord(':'))
  177. treescrn2.addch(8, 10, ord('.'))
  178. treescrn2.addch(8, 9, ord(','))
  179. treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
  180. unset_color(treescrn2)
  181. treescrn2.refresh()
  182. w_del_msg.refresh()
  183. return
  184. def strng4():
  185. treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
  186. set_color(treescrn2, curses.COLOR_WHITE)
  187. treescrn2.addch(9, 17, ord('\''))
  188. treescrn2.addch(9, 16, ord(':'))
  189. treescrn2.addch(9, 15, ord('.'))
  190. treescrn2.addch(9, 14, ord(','))
  191. treescrn2.addch(10, 13, ord('\''))
  192. treescrn2.addch(10, 12, ord(':'))
  193. treescrn2.addch(10, 11, ord('.'))
  194. treescrn2.addch(10, 10, ord(','))
  195. treescrn2.addch(11, 9, ord('\''))
  196. treescrn2.addch(11, 8, ord(':'))
  197. treescrn2.addch(11, 7, ord('.'))
  198. treescrn2.addch(11, 6, ord(','))
  199. treescrn2.addch(12, 5, ord('\''))
  200. treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
  201. unset_color(treescrn2)
  202. treescrn2.refresh()
  203. w_del_msg.refresh()
  204. return
  205. def strng5():
  206. treescrn2.attrset(curses.A_BOLD | curses.A_BLINK)
  207. set_color(treescrn2, curses.COLOR_WHITE)
  208. treescrn2.addch(11, 19, ord('\''))
  209. treescrn2.addch(11, 18, ord(':'))
  210. treescrn2.addch(11, 17, ord('.'))
  211. treescrn2.addch(11, 16, ord(','))
  212. treescrn2.addch(12, 15, ord('\''))
  213. treescrn2.addch(12, 14, ord(':'))
  214. treescrn2.addch(12, 13, ord('.'))
  215. treescrn2.addch(12, 12, ord(','))
  216. treescrn2.attroff(curses.A_BOLD | curses.A_BLINK)
  217. unset_color(treescrn2)
  218. # save a fully lit tree
  219. treescrn2.overlay(treescrn)
  220. treescrn2.refresh()
  221. w_del_msg.refresh()
  222. return
  223. def blinkit():
  224. treescrn8.touchwin()
  225. for cycle in range(5):
  226. if cycle == 0:
  227. treescrn3.overlay(treescrn8)
  228. treescrn8.refresh()
  229. w_del_msg.refresh()
  230. break
  231. elif cycle == 1:
  232. treescrn4.overlay(treescrn8)
  233. treescrn8.refresh()
  234. w_del_msg.refresh()
  235. break
  236. elif cycle == 2:
  237. treescrn5.overlay(treescrn8)
  238. treescrn8.refresh()
  239. w_del_msg.refresh()
  240. break
  241. elif cycle == 3:
  242. treescrn6.overlay(treescrn8)
  243. treescrn8.refresh()
  244. w_del_msg.refresh()
  245. break
  246. elif cycle == 4:
  247. treescrn7.overlay(treescrn8)
  248. treescrn8.refresh()
  249. w_del_msg.refresh()
  250. break
  251. treescrn8.touchwin()
  252. # ALL ON
  253. treescrn.overlay(treescrn8)
  254. treescrn8.refresh()
  255. w_del_msg.refresh()
  256. return
  257. def deer_step(win, y, x):
  258. win.mvwin(y, x)
  259. win.refresh()
  260. w_del_msg.refresh()
  261. look_out(5)
  262. def reindeer():
  263. y_pos = 0
  264. for x_pos in range(70, 62, -1):
  265. if x_pos < 66: y_pos = 1
  266. for looper in range(0, 4):
  267. dotdeer0.addch(y_pos, x_pos, ord('.'))
  268. dotdeer0.refresh()
  269. w_del_msg.refresh()
  270. dotdeer0.erase()
  271. dotdeer0.refresh()
  272. w_del_msg.refresh()
  273. look_out(50)
  274. y_pos = 2
  275. for x_pos in range(x_pos - 1, 50, -1):
  276. for looper in range(0, 4):
  277. if x_pos < 56:
  278. y_pos = 3
  279. try:
  280. stardeer0.addch(y_pos, x_pos, ord('*'))
  281. except curses.error:
  282. pass
  283. stardeer0.refresh()
  284. w_del_msg.refresh()
  285. stardeer0.erase()
  286. stardeer0.refresh()
  287. w_del_msg.refresh()
  288. else:
  289. dotdeer0.addch(y_pos, x_pos, ord('*'))
  290. dotdeer0.refresh()
  291. w_del_msg.refresh()
  292. dotdeer0.erase()
  293. dotdeer0.refresh()
  294. w_del_msg.refresh()
  295. x_pos = 58
  296. for y_pos in range(2, 5):
  297. lildeer0.touchwin()
  298. lildeer0.refresh()
  299. w_del_msg.refresh()
  300. for looper in range(0, 4):
  301. deer_step(lildeer3, y_pos, x_pos)
  302. deer_step(lildeer2, y_pos, x_pos)
  303. deer_step(lildeer1, y_pos, x_pos)
  304. deer_step(lildeer2, y_pos, x_pos)
  305. deer_step(lildeer3, y_pos, x_pos)
  306. lildeer0.touchwin()
  307. lildeer0.refresh()
  308. w_del_msg.refresh()
  309. x_pos -= 2
  310. x_pos = 35
  311. for y_pos in range(5, 10):
  312. middeer0.touchwin()
  313. middeer0.refresh()
  314. w_del_msg.refresh()
  315. for looper in range(2):
  316. deer_step(middeer3, y_pos, x_pos)
  317. deer_step(middeer2, y_pos, x_pos)
  318. deer_step(middeer1, y_pos, x_pos)
  319. deer_step(middeer2, y_pos, x_pos)
  320. deer_step(middeer3, y_pos, x_pos)
  321. middeer0.touchwin()
  322. middeer0.refresh()
  323. w_del_msg.refresh()
  324. x_pos -= 3
  325. look_out(300)
  326. y_pos = 1
  327. for x_pos in range(8, 16):
  328. deer_step(bigdeer4, y_pos, x_pos)
  329. deer_step(bigdeer3, y_pos, x_pos)
  330. deer_step(bigdeer2, y_pos, x_pos)
  331. deer_step(bigdeer1, y_pos, x_pos)
  332. deer_step(bigdeer2, y_pos, x_pos)
  333. deer_step(bigdeer3, y_pos, x_pos)
  334. deer_step(bigdeer4, y_pos, x_pos)
  335. deer_step(bigdeer0, y_pos, x_pos)
  336. x_pos -= 1
  337. for looper in range(0, 6):
  338. deer_step(lookdeer4, y_pos, x_pos)
  339. deer_step(lookdeer3, y_pos, x_pos)
  340. deer_step(lookdeer2, y_pos, x_pos)
  341. deer_step(lookdeer1, y_pos, x_pos)
  342. deer_step(lookdeer2, y_pos, x_pos)
  343. deer_step(lookdeer3, y_pos, x_pos)
  344. deer_step(lookdeer4, y_pos, x_pos)
  345. deer_step(lookdeer0, y_pos, x_pos)
  346. for y_pos in range(y_pos, 10):
  347. for looper in range(0, 2):
  348. deer_step(bigdeer4, y_pos, x_pos)
  349. deer_step(bigdeer3, y_pos, x_pos)
  350. deer_step(bigdeer2, y_pos, x_pos)
  351. deer_step(bigdeer1, y_pos, x_pos)
  352. deer_step(bigdeer2, y_pos, x_pos)
  353. deer_step(bigdeer3, y_pos, x_pos)
  354. deer_step(bigdeer4, y_pos, x_pos)
  355. deer_step(bigdeer0, y_pos, x_pos)
  356. y_pos -= 1
  357. deer_step(lookdeer3, y_pos, x_pos)
  358. return
  359. def main(win):
  360. global stdscr
  361. stdscr = win
  362. global my_bg, y_pos, x_pos
  363. global treescrn, treescrn2, treescrn3, treescrn4
  364. global treescrn5, treescrn6, treescrn7, treescrn8
  365. global dotdeer0, stardeer0
  366. global lildeer0, lildeer1, lildeer2, lildeer3
  367. global middeer0, middeer1, middeer2, middeer3
  368. global bigdeer0, bigdeer1, bigdeer2, bigdeer3, bigdeer4
  369. global lookdeer0, lookdeer1, lookdeer2, lookdeer3, lookdeer4
  370. global w_holiday, w_del_msg
  371. my_bg = curses.COLOR_BLACK
  372. # curses.curs_set(0)
  373. treescrn = curses.newwin(16, 27, 3, 53)
  374. treescrn2 = curses.newwin(16, 27, 3, 53)
  375. treescrn3 = curses.newwin(16, 27, 3, 53)
  376. treescrn4 = curses.newwin(16, 27, 3, 53)
  377. treescrn5 = curses.newwin(16, 27, 3, 53)
  378. treescrn6 = curses.newwin(16, 27, 3, 53)
  379. treescrn7 = curses.newwin(16, 27, 3, 53)
  380. treescrn8 = curses.newwin(16, 27, 3, 53)
  381. dotdeer0 = curses.newwin(3, 71, 0, 8)
  382. stardeer0 = curses.newwin(4, 56, 0, 8)
  383. lildeer0 = curses.newwin(7, 53, 0, 8)
  384. lildeer1 = curses.newwin(2, 4, 0, 0)
  385. lildeer2 = curses.newwin(2, 4, 0, 0)
  386. lildeer3 = curses.newwin(2, 4, 0, 0)
  387. middeer0 = curses.newwin(15, 42, 0, 8)
  388. middeer1 = curses.newwin(3, 7, 0, 0)
  389. middeer2 = curses.newwin(3, 7, 0, 0)
  390. middeer3 = curses.newwin(3, 7, 0, 0)
  391. bigdeer0 = curses.newwin(10, 23, 0, 0)
  392. bigdeer1 = curses.newwin(10, 23, 0, 0)
  393. bigdeer2 = curses.newwin(10, 23, 0, 0)
  394. bigdeer3 = curses.newwin(10, 23, 0, 0)
  395. bigdeer4 = curses.newwin(10, 23, 0, 0)
  396. lookdeer0 = curses.newwin(10, 25, 0, 0)
  397. lookdeer1 = curses.newwin(10, 25, 0, 0)
  398. lookdeer2 = curses.newwin(10, 25, 0, 0)
  399. lookdeer3 = curses.newwin(10, 25, 0, 0)
  400. lookdeer4 = curses.newwin(10, 25, 0, 0)
  401. w_holiday = curses.newwin(1, 27, 3, 27)
  402. w_del_msg = curses.newwin(1, 20, 23, 60)
  403. try:
  404. w_del_msg.addstr(0, 0, "Hit any key to quit")
  405. except curses.error:
  406. pass
  407. try:
  408. w_holiday.addstr(0, 0, "H A P P Y H O L I D A Y S")
  409. except curses.error:
  410. pass
  411. # set up the windows for our various reindeer
  412. lildeer1.addch(0, 0, ord('V'))
  413. lildeer1.addch(1, 0, ord('@'))
  414. lildeer1.addch(1, 1, ord('<'))
  415. lildeer1.addch(1, 2, ord('>'))
  416. try:
  417. lildeer1.addch(1, 3, ord('~'))
  418. except curses.error:
  419. pass
  420. lildeer2.addch(0, 0, ord('V'))
  421. lildeer2.addch(1, 0, ord('@'))
  422. lildeer2.addch(1, 1, ord('|'))
  423. lildeer2.addch(1, 2, ord('|'))
  424. try:
  425. lildeer2.addch(1, 3, ord('~'))
  426. except curses.error:
  427. pass
  428. lildeer3.addch(0, 0, ord('V'))
  429. lildeer3.addch(1, 0, ord('@'))
  430. lildeer3.addch(1, 1, ord('>'))
  431. lildeer3.addch(1, 2, ord('<'))
  432. try:
  433. lildeer2.addch(1, 3, ord('~')) # XXX
  434. except curses.error:
  435. pass
  436. middeer1.addch(0, 2, ord('y'))
  437. middeer1.addch(0, 3, ord('y'))
  438. middeer1.addch(1, 2, ord('0'))
  439. middeer1.addch(1, 3, ord('('))
  440. middeer1.addch(1, 4, ord('='))
  441. middeer1.addch(1, 5, ord(')'))
  442. middeer1.addch(1, 6, ord('~'))
  443. middeer1.addch(2, 3, ord('\\'))
  444. middeer1.addch(2, 5, ord('/'))
  445. middeer2.addch(0, 2, ord('y'))
  446. middeer2.addch(0, 3, ord('y'))
  447. middeer2.addch(1, 2, ord('0'))
  448. middeer2.addch(1, 3, ord('('))
  449. middeer2.addch(1, 4, ord('='))
  450. middeer2.addch(1, 5, ord(')'))
  451. middeer2.addch(1, 6, ord('~'))
  452. middeer2.addch(2, 3, ord('|'))
  453. middeer2.addch(2, 5, ord('|'))
  454. middeer3.addch(0, 2, ord('y'))
  455. middeer3.addch(0, 3, ord('y'))
  456. middeer3.addch(1, 2, ord('0'))
  457. middeer3.addch(1, 3, ord('('))
  458. middeer3.addch(1, 4, ord('='))
  459. middeer3.addch(1, 5, ord(')'))
  460. middeer3.addch(1, 6, ord('~'))
  461. middeer3.addch(2, 3, ord('/'))
  462. middeer3.addch(2, 5, ord('\\'))
  463. bigdeer1.addch(0, 17, ord('\\'))
  464. bigdeer1.addch(0, 18, ord('/'))
  465. bigdeer1.addch(0, 19, ord('\\'))
  466. bigdeer1.addch(0, 20, ord('/'))
  467. bigdeer1.addch(1, 18, ord('\\'))
  468. bigdeer1.addch(1, 20, ord('/'))
  469. bigdeer1.addch(2, 19, ord('|'))
  470. bigdeer1.addch(2, 20, ord('_'))
  471. bigdeer1.addch(3, 18, ord('/'))
  472. bigdeer1.addch(3, 19, ord('^'))
  473. bigdeer1.addch(3, 20, ord('0'))
  474. bigdeer1.addch(3, 21, ord('\\'))
  475. bigdeer1.addch(4, 17, ord('/'))
  476. bigdeer1.addch(4, 18, ord('/'))
  477. bigdeer1.addch(4, 19, ord('\\'))
  478. bigdeer1.addch(4, 22, ord('\\'))
  479. bigdeer1.addstr(5, 7, "^~~~~~~~~// ~~U")
  480. bigdeer1.addstr(6, 7, "( \\_____( /") # ))
  481. bigdeer1.addstr(7, 8, "( ) /")
  482. bigdeer1.addstr(8, 9, "\\\\ /")
  483. bigdeer1.addstr(9, 11, "\\>/>")
  484. bigdeer2.addch(0, 17, ord('\\'))
  485. bigdeer2.addch(0, 18, ord('/'))
  486. bigdeer2.addch(0, 19, ord('\\'))
  487. bigdeer2.addch(0, 20, ord('/'))
  488. bigdeer2.addch(1, 18, ord('\\'))
  489. bigdeer2.addch(1, 20, ord('/'))
  490. bigdeer2.addch(2, 19, ord('|'))
  491. bigdeer2.addch(2, 20, ord('_'))
  492. bigdeer2.addch(3, 18, ord('/'))
  493. bigdeer2.addch(3, 19, ord('^'))
  494. bigdeer2.addch(3, 20, ord('0'))
  495. bigdeer2.addch(3, 21, ord('\\'))
  496. bigdeer2.addch(4, 17, ord('/'))
  497. bigdeer2.addch(4, 18, ord('/'))
  498. bigdeer2.addch(4, 19, ord('\\'))
  499. bigdeer2.addch(4, 22, ord('\\'))
  500. bigdeer2.addstr(5, 7, "^~~~~~~~~// ~~U")
  501. bigdeer2.addstr(6, 7, "(( )____( /") # ))
  502. bigdeer2.addstr(7, 7, "( / |")
  503. bigdeer2.addstr(8, 8, "\\/ |")
  504. bigdeer2.addstr(9, 9, "|> |>")
  505. bigdeer3.addch(0, 17, ord('\\'))
  506. bigdeer3.addch(0, 18, ord('/'))
  507. bigdeer3.addch(0, 19, ord('\\'))
  508. bigdeer3.addch(0, 20, ord('/'))
  509. bigdeer3.addch(1, 18, ord('\\'))
  510. bigdeer3.addch(1, 20, ord('/'))
  511. bigdeer3.addch(2, 19, ord('|'))
  512. bigdeer3.addch(2, 20, ord('_'))
  513. bigdeer3.addch(3, 18, ord('/'))
  514. bigdeer3.addch(3, 19, ord('^'))
  515. bigdeer3.addch(3, 20, ord('0'))
  516. bigdeer3.addch(3, 21, ord('\\'))
  517. bigdeer3.addch(4, 17, ord('/'))
  518. bigdeer3.addch(4, 18, ord('/'))
  519. bigdeer3.addch(4, 19, ord('\\'))
  520. bigdeer3.addch(4, 22, ord('\\'))
  521. bigdeer3.addstr(5, 7, "^~~~~~~~~// ~~U")
  522. bigdeer3.addstr(6, 6, "( ()_____( /") # ))
  523. bigdeer3.addstr(7, 6, "/ / /")
  524. bigdeer3.addstr(8, 5, "|/ \\")
  525. bigdeer3.addstr(9, 5, "/> \\>")
  526. bigdeer4.addch(0, 17, ord('\\'))
  527. bigdeer4.addch(0, 18, ord('/'))
  528. bigdeer4.addch(0, 19, ord('\\'))
  529. bigdeer4.addch(0, 20, ord('/'))
  530. bigdeer4.addch(1, 18, ord('\\'))
  531. bigdeer4.addch(1, 20, ord('/'))
  532. bigdeer4.addch(2, 19, ord('|'))
  533. bigdeer4.addch(2, 20, ord('_'))
  534. bigdeer4.addch(3, 18, ord('/'))
  535. bigdeer4.addch(3, 19, ord('^'))
  536. bigdeer4.addch(3, 20, ord('0'))
  537. bigdeer4.addch(3, 21, ord('\\'))
  538. bigdeer4.addch(4, 17, ord('/'))
  539. bigdeer4.addch(4, 18, ord('/'))
  540. bigdeer4.addch(4, 19, ord('\\'))
  541. bigdeer4.addch(4, 22, ord('\\'))
  542. bigdeer4.addstr(5, 7, "^~~~~~~~~// ~~U")
  543. bigdeer4.addstr(6, 6, "( )______( /") # )
  544. bigdeer4.addstr(7, 5, "(/ \\") # )
  545. bigdeer4.addstr(8, 0, "v___= ----^")
  546. lookdeer1.addstr(0, 16, "\\/ \\/")
  547. lookdeer1.addstr(1, 17, "\\Y/ \\Y/")
  548. lookdeer1.addstr(2, 19, "\\=/")
  549. lookdeer1.addstr(3, 17, "^\\o o/^")
  550. lookdeer1.addstr(4, 17, "//( )")
  551. lookdeer1.addstr(5, 7, "^~~~~~~~~// \\O/")
  552. lookdeer1.addstr(6, 7, "( \\_____( /") # ))
  553. lookdeer1.addstr(7, 8, "( ) /")
  554. lookdeer1.addstr(8, 9, "\\\\ /")
  555. lookdeer1.addstr(9, 11, "\\>/>")
  556. lookdeer2.addstr(0, 16, "\\/ \\/")
  557. lookdeer2.addstr(1, 17, "\\Y/ \\Y/")
  558. lookdeer2.addstr(2, 19, "\\=/")
  559. lookdeer2.addstr(3, 17, "^\\o o/^")
  560. lookdeer2.addstr(4, 17, "//( )")
  561. lookdeer2.addstr(5, 7, "^~~~~~~~~// \\O/")
  562. lookdeer2.addstr(6, 7, "(( )____( /") # ))
  563. lookdeer2.addstr(7, 7, "( / |")
  564. lookdeer2.addstr(8, 8, "\\/ |")
  565. lookdeer2.addstr(9, 9, "|> |>")
  566. lookdeer3.addstr(0, 16, "\\/ \\/")
  567. lookdeer3.addstr(1, 17, "\\Y/ \\Y/")
  568. lookdeer3.addstr(2, 19, "\\=/")
  569. lookdeer3.addstr(3, 17, "^\\o o/^")
  570. lookdeer3.addstr(4, 17, "//( )")
  571. lookdeer3.addstr(5, 7, "^~~~~~~~~// \\O/")
  572. lookdeer3.addstr(6, 6, "( ()_____( /") # ))
  573. lookdeer3.addstr(7, 6, "/ / /")
  574. lookdeer3.addstr(8, 5, "|/ \\")
  575. lookdeer3.addstr(9, 5, "/> \\>")
  576. lookdeer4.addstr(0, 16, "\\/ \\/")
  577. lookdeer4.addstr(1, 17, "\\Y/ \\Y/")
  578. lookdeer4.addstr(2, 19, "\\=/")
  579. lookdeer4.addstr(3, 17, "^\\o o/^")
  580. lookdeer4.addstr(4, 17, "//( )")
  581. lookdeer4.addstr(5, 7, "^~~~~~~~~// \\O/")
  582. lookdeer4.addstr(6, 6, "( )______( /") # )
  583. lookdeer4.addstr(7, 5, "(/ \\") # )
  584. lookdeer4.addstr(8, 0, "v___= ----^")
  585. ###############################################
  586. curses.cbreak()
  587. stdscr.nodelay(1)
  588. while 1:
  589. stdscr.clear()
  590. treescrn.erase()
  591. w_del_msg.touchwin()
  592. treescrn.touchwin()
  593. treescrn2.erase()
  594. treescrn2.touchwin()
  595. treescrn8.erase()
  596. treescrn8.touchwin()
  597. stdscr.refresh()
  598. look_out(150)
  599. boxit()
  600. stdscr.refresh()
  601. look_out(150)
  602. seas()
  603. stdscr.refresh()
  604. greet()
  605. stdscr.refresh()
  606. look_out(150)
  607. fromwho()
  608. stdscr.refresh()
  609. look_out(150)
  610. tree()
  611. look_out(150)
  612. balls()
  613. look_out(150)
  614. star()
  615. look_out(150)
  616. strng1()
  617. strng2()
  618. strng3()
  619. strng4()
  620. strng5()
  621. # set up the windows for our blinking trees
  622. #
  623. # treescrn3
  624. treescrn.overlay(treescrn3)
  625. # balls
  626. treescrn3.addch(4, 18, ord(' '))
  627. treescrn3.addch(7, 6, ord(' '))
  628. treescrn3.addch(8, 19, ord(' '))
  629. treescrn3.addch(11, 22, ord(' '))
  630. # star
  631. treescrn3.addch(0, 12, ord('*'))
  632. # strng1
  633. treescrn3.addch(3, 11, ord(' '))
  634. # strng2
  635. treescrn3.addch(5, 13, ord(' '))
  636. treescrn3.addch(6, 10, ord(' '))
  637. # strng3
  638. treescrn3.addch(7, 16, ord(' '))
  639. treescrn3.addch(7, 14, ord(' '))
  640. # strng4
  641. treescrn3.addch(10, 13, ord(' '))
  642. treescrn3.addch(10, 10, ord(' '))
  643. treescrn3.addch(11, 8, ord(' '))
  644. # strng5
  645. treescrn3.addch(11, 18, ord(' '))
  646. treescrn3.addch(12, 13, ord(' '))
  647. # treescrn4
  648. treescrn.overlay(treescrn4)
  649. # balls
  650. treescrn4.addch(3, 9, ord(' '))
  651. treescrn4.addch(4, 16, ord(' '))
  652. treescrn4.addch(7, 6, ord(' '))
  653. treescrn4.addch(8, 19, ord(' '))
  654. treescrn4.addch(11, 2, ord(' '))
  655. treescrn4.addch(12, 23, ord(' '))
  656. # star
  657. treescrn4.standout()
  658. treescrn4.addch(0, 12, ord('*'))
  659. treescrn4.standend()
  660. # strng1
  661. treescrn4.addch(3, 13, ord(' '))
  662. # strng2
  663. # strng3
  664. treescrn4.addch(7, 15, ord(' '))
  665. treescrn4.addch(8, 11, ord(' '))
  666. # strng4
  667. treescrn4.addch(9, 16, ord(' '))
  668. treescrn4.addch(10, 12, ord(' '))
  669. treescrn4.addch(11, 8, ord(' '))
  670. # strng5
  671. treescrn4.addch(11, 18, ord(' '))
  672. treescrn4.addch(12, 14, ord(' '))
  673. # treescrn5
  674. treescrn.overlay(treescrn5)
  675. # balls
  676. treescrn5.addch(3, 15, ord(' '))
  677. treescrn5.addch(10, 20, ord(' '))
  678. treescrn5.addch(12, 1, ord(' '))
  679. # star
  680. treescrn5.addch(0, 12, ord(' '))
  681. # strng1
  682. treescrn5.addch(3, 11, ord(' '))
  683. # strng2
  684. treescrn5.addch(5, 12, ord(' '))
  685. # strng3
  686. treescrn5.addch(7, 14, ord(' '))
  687. treescrn5.addch(8, 10, ord(' '))
  688. # strng4
  689. treescrn5.addch(9, 15, ord(' '))
  690. treescrn5.addch(10, 11, ord(' '))
  691. treescrn5.addch(11, 7, ord(' '))
  692. # strng5
  693. treescrn5.addch(11, 17, ord(' '))
  694. treescrn5.addch(12, 13, ord(' '))
  695. # treescrn6
  696. treescrn.overlay(treescrn6)
  697. # balls
  698. treescrn6.addch(6, 7, ord(' '))
  699. treescrn6.addch(7, 18, ord(' '))
  700. treescrn6.addch(10, 4, ord(' '))
  701. treescrn6.addch(11, 23, ord(' '))
  702. # star
  703. treescrn6.standout()
  704. treescrn6.addch(0, 12, ord('*'))
  705. treescrn6.standend()
  706. # strng1
  707. # strng2
  708. treescrn6.addch(5, 11, ord(' '))
  709. # strng3
  710. treescrn6.addch(7, 13, ord(' '))
  711. treescrn6.addch(8, 9, ord(' '))
  712. # strng4
  713. treescrn6.addch(9, 14, ord(' '))
  714. treescrn6.addch(10, 10, ord(' '))
  715. treescrn6.addch(11, 6, ord(' '))
  716. # strng5
  717. treescrn6.addch(11, 16, ord(' '))
  718. treescrn6.addch(12, 12, ord(' '))
  719. # treescrn7
  720. treescrn.overlay(treescrn7)
  721. # balls
  722. treescrn7.addch(3, 15, ord(' '))
  723. treescrn7.addch(6, 7, ord(' '))
  724. treescrn7.addch(7, 18, ord(' '))
  725. treescrn7.addch(10, 4, ord(' '))
  726. treescrn7.addch(11, 22, ord(' '))
  727. # star
  728. treescrn7.addch(0, 12, ord('*'))
  729. # strng1
  730. treescrn7.addch(3, 12, ord(' '))
  731. # strng2
  732. treescrn7.addch(5, 13, ord(' '))
  733. treescrn7.addch(6, 9, ord(' '))
  734. # strng3
  735. treescrn7.addch(7, 15, ord(' '))
  736. treescrn7.addch(8, 11, ord(' '))
  737. # strng4
  738. treescrn7.addch(9, 16, ord(' '))
  739. treescrn7.addch(10, 12, ord(' '))
  740. treescrn7.addch(11, 8, ord(' '))
  741. # strng5
  742. treescrn7.addch(11, 18, ord(' '))
  743. treescrn7.addch(12, 14, ord(' '))
  744. look_out(150)
  745. reindeer()
  746. w_holiday.touchwin()
  747. w_holiday.refresh()
  748. w_del_msg.refresh()
  749. look_out(500)
  750. for i in range(0, 20):
  751. blinkit()
  752. curses.wrapper(main)