Skip to content

a cli-based christmas greeting wrote in Python, with all random tree, star, snow and bling.

License

Notifications You must be signed in to change notification settings

winuxx/merry-christmas

Repository files navigation

merry-christmas

a cli-based christmas greeting wrote in Python, with all random tree, star, snow and bling.

一些想法

  • 自定义设置
    • 祝福语, 星密集度, 雪密集度, 速度, 闪烁频率
    • 由于设置项较多,所以先确认是否自定义 (y/N)
    • 雪花字符
      • ✡✶✱✲✻✼✽✾❃❅❆❄ (❉)
    • 雪花刚开始不要满屏,从无到有
    • 雪可以不用pair来实现闪烁,三种不同重量的雪组成list
      • 顺序 [1 2 3]
      • 乒乓 [1 2 3 2 1](影响初始雪花状态的概率)[1 2 3 3 2 1](影响闪烁概率,3 to 3不闪)
      • 每闪烁一次,这个点 (key+1) % len(钟算)
      • 雪花种类较多时,调整 list 顺序即可,将最重的放中间
    • 树顶宽度是1,所以树干应该为奇数,宽度为2,树干宽度取偶数, 以保证树居中
      • 树顶为★则宽度为2
    • 树顶应该是一颗★,或多个字符组成一颗大的★ -树顶用★,长亮或一直闪烁
    • 当右边为宽字符且一行宽度超出了最大宽度,替换成半宽,以保证对称
    • 树填充
      • 树填充换成填充较轻的字符,比如 Y X,以增加整体的层次感
      • 树干和树枝可以用不同字符填充,如 + |
      • 可以随机选取填充字符,顶端用A,边缘用A或/\
      • '-|' 树干填充'|', 树枝随机'-|'
      • 树枝最后一行中间部分替换成树干
  • frame 生成
    • 若字符为全宽字符, 数据中后面使用一个-1来占位
      • [0, 1, 201(★), -1, 1, 0]
    • 舍弃雪或星过少的行
  • frame 合成
    • 雪和树分别为1个图层, 每个图层以点阵的方式存储数据 snow_layer: [ [col1, col2, col3] (row1) [col1, col2, col3] (row2) ]
    • 树和雪数据存放在数组如 [0 0 2 1 3 0 0],2个frame合成只需要元素相加即可
      • 0 air
      • 1 wood
      • 11 stars[1]
      • 20 snows[0]
    • frame 合成使用 or。按点,如 0 or 2 = 2。2个图层(雪、树)或3个图层(雪、树、星),最上层的图层放在最前面,如 1 or 0 or 2 = 1
    • 允许雪飘过树,星星默认为亮的,雪飘过星星时则星星变暗
      • ✡✶✱ 雪飘过树时变成✡/✶, 飘过星时变成 ✱
  • 闪烁
    • 闪烁概率设置
    • 闪烁:雪,每次都随机取,闪烁概率一半。星,增加空心星星的概率,这样效果是大部分星星是暗的,少量闪烁
  • 其它
    • 窗口4边各留一圈空白,观感刚好,右边一列空白也能防止行宽度超出自动换行

About

a cli-based christmas greeting wrote in Python, with all random tree, star, snow and bling.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages