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或/\
- '-|' 树干填充'|', 树枝随机'-|'
- 树枝最后一行中间部分替换成树干
- 树顶宽度是1,所以树干应该为奇数,宽度为2,树干宽度取偶数, 以保证树居中
- frame 生成
- 若字符为全宽字符, 数据中后面使用一个-1来占位
- [0, 1, 201(★), -1, 1, 0]
- 舍弃雪或星过少的行
- 若字符为全宽字符, 数据中后面使用一个-1来占位
- 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边各留一圈空白,观感刚好,右边一列空白也能防止行宽度超出自动换行