前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:William Mannard
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。
使用Python模拟电影《黑客帝国/The Matrix》中代码雨效果。该项目支持用户自定义显示的字符集,接受键盘控制。
开发工具
Python版本:3.6.4
相关模块:
random模块;
pygame模块;
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
由于个人喜欢中国古典文学,对项目代码作了细微的改动,增加了自定义字符集,部分效果展示如下:
下面逐步介绍如何产生代码雨:
- 模块安装
- 使用方法
- 帮助文档
1.模块安装
Windows下Anaconda安装:
char_set = { 'a': 'qwertyuiopasdfghjklzxcvbnm', 'A': 'QWERTYUIOPASDFGHJKLZXCVBNM', 'c': 'абвгдежзиклмнопрстуфхцчшщъыьэюя', 'C': 'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'e': '', 'g': 'αβγδεζηθικλμνξοπρστυφχψως', 'G': 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ', 'k': 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン', 'm': 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン1234567890', 'n': '1234567890', 'o': 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890', 'r': 'mcclllxxxxvvvvviiiiii', 'R': 'MCCLLLXXXXVVVVVIIIIII', 's': '-=*_+|:<>"', 'S': '`-=~!@#$%^&*()_+[]{}|\;\':",./<>?"', 'z': '元一二三四五六七八九仪才象行卦宫阴阳太易初始素休生伤杜景死惊开', 'Z': '乾坎艮震巽离坤兑临兵斗者皆阵列前行甲乙丙丁戊己庚辛壬癸子丑寅卯辰巳午未申酉戌亥', 'u': args.custom_characters}
Linux下安装:
sudo curl -L https://raw.githubusercontent.com/will8211/unimatrix/master/unimatrix.py -o /usr/local/bin/unimatrix
sudo chmod a+rx /usr/local/bin/unimatrix
2.使用方法
改动部分:在代码中增加了中文字符(即z/Z):
char_set = { 'a': 'qwertyuiopasdfghjklzxcvbnm', 'A': 'QWERTYUIOPASDFGHJKLZXCVBNM', 'c': 'абвгдежзиклмнопрстуфхцчшщъыьэюя', 'C': 'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'e': '', 'g': 'αβγδεζηθικλμνξοπρστυφχψως', 'G': 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ', 'k': 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン', 'm': 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン1234567890', 'n': '1234567890', 'o': 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890', 'r': 'mcclllxxxxvvvvviiiiii', 'R': 'MCCLLLXXXXVVVVVIIIIII', 's': '-=*_+|:<>"', 'S': '`-=~!@#$%^&*()_+[]{}|\;\':",./<>?"', 'z': '元一二三四五六七八九仪才象行卦宫阴阳太易初始素休生伤杜景死惊开', 'Z': '乾坎艮震巽离坤兑临兵斗者皆阵列前行甲乙丙丁戊己庚辛壬癸子丑寅卯辰巳午未申酉戌亥', 'u': args.custom_characters}
项目中使用argparse模块解析命令行参数和选项;使用curses库提供的绘制字符屏幕和键盘处理的独立于终端的方法。
项目的使用方法:启动Anaconda Prompt,执行帮助文档中的相关命令即可。
通过unimatrix -h调用帮助文档:
例1:unimatrix -n -l o
例2:unimatrix -n -l s
例3:unimatrix -a -n -f -s 75 -l Z
还可通过键盘输入更改颜色:
3.帮助文档
语法: unimatrix [-a] [-b] [-c 颜色] [-f] [-g 颜色] [-h] [-l 字符串] [-n] [-o] [-s 速度] [-u 字定义字符] 参数: -a 异步滚动, 每列移动速度不同. -b 仅使用粗体字符. -c 颜色之一: 绿(默认), 红, 蓝, 白, 黄, 青, 品红, 黑. -f 启动"flashers, "即字符不断变化. -g 背景颜色(参照-c). -h 显示此帮助信息和退出. -l 选择字符集(参见下述字符集). -n 禁用粗体(重写-b) -o 禁用屏幕状态 -s 整数, 最大100. 0为1s刷新延迟, 100无延迟, 负数可降低速度. 默认85. -t t秒后退出进程. -u 字定义显示的字符. 用单引号('')引起特殊转移字符. 例如: -u '#$(' -w 单波模式: 激发绿色代码雨, 退出. 长参数: -a --asynchronous -b --all-bold -c --color=COLOR -f --flashers -g --bg-color=COLOR -h --help -l --character-list=CHARACTER_LIST -s --speed=SPEED -n --no-bold -o --status-off -t --time -u --custom_characters=CUSTOM_CHARACTERS -w --single_wave 字符集: 当使用 '-l' 或 '--character_list=' 选项, 其后加上以下1个或多个字母: a 小写字母表 A 大写字母表 c 小写俄罗斯Cyrillic字母表 C 大写俄罗斯Cyrillic字母表 e 常见表情() g 小写希腊字母 G 大写希腊字母 k 日本katakana(半角) m 默认'Matrix'集, 等于'knnssss' n 数字0-9 o 旧风格non-unicode集, 像cmatrix. 等于'AaSn' r 小写罗马数字(mcclllxxxxvvvvviiiiii) R 大写罗马数字(MCCLLLXXXXVVVVVIIIIII) s 黑客帝国中使用的字符子集(-=*_+|:<>") S 所有常用键盘符号(`-=~!z#$%^&*()_+[]{}|\;':",./<>?") z 周易1(自定义中文) Z 周易2(自定义中文) u 使用-u开关选择自定义字符 例如: '-l naAS' 或 '--character_list=naAS' 提供类似cmatrix输出内容. '-l ACG' 使 用所有大写字符集. 多次使用同一字母可增加字符集的频率。例如,默认设置为'-l knnssss'. 键盘控制: SPACE, CTRL-c or q 退出 - or LEFT 速度降1 + or RIGHT 速度增1 [ or DOWN 速度降10 ] or UP 速度增10 a 切换异步滚动 b 循环使用粗体字符(bold off-->bold on-->all bold) f 切换闪烁字符 o 切换屏幕状态 1 to 9 设置颜色: 1绿,2红,3蓝,4白,5黄,6青,7品红,8黑,9终端默认 ! to ( 设置背景颜色, 颜色同上, shift+数字 示例: 模拟cmatrix的默认输出(无unicode字符): $ unimatrix -n -s 96 -l o 周易: $ unimatrix -a -n -f -s 75 -l Z 以粗蓝显示字母Linux: $ unimatrix -B -u Linux -c blue 使用默认字符集, 加美元符(注意单引号特殊字符): $ unimatrix -l knnssssu -u '$' 不用粗体, 慢速, 表情符号, 数字和其他字符: $ unimatrix -n -l ens -s 50