[c++] Greenrain | Matrix屏幕特效的curses实现(视频)

 photo IMG_5496_zps5189dc55.jpg

Greenrain, Matrix Code Rain,是Matrix系列电影中的经典屏幕特效,相信能搜到我博客的朋友对这些也都有印象。电影播出的时期,正是笔者的编程启蒙时期。当时就想着哪天要实现这个东西。可是当时一说到编程,就是拿vb往窗口上拖按钮了,很现在回想起来,简直弱爆了。不过这个想法始终没有灭。现在,终于有了实现它的能力~

如果是在窗口上整这个特效感觉一样比较弱,当然要在终端里面运行才带感。毕竟是在战舰上看到的东西么,从后门登录到Matrix,那么展现出来的,当然就是Matrix的终端界面呀。这总不能消耗太多的系统资源,直白粗暴的展现Matrix的代码(命令行?log?)才更霸气一些。而说到要比较全面的控制终端的显示,在Linux GCC这边,就会用到 curses 库。能够实现定点的打印。

程序也比较简单,虽然小,但也是一个C++的OO实现。将屏幕显示的最小单位,即单元字符流封装成子类。一开始完成水平方向的实现,再从这个实现中继承出一个垂直方向的子类,就可以很方便扩展程序。

单元字符流的特点是:

  • 以一定的速度像特定方向平移,时不时会更改行进速度。
  • 子字符按照一定的比例,进行随机替换。
  • 子字符串首的字体使用粗体显示。

剩下的事情就是不停刷屏咯。程序按’q’退出。

在不同的终端运行这个程序,效果会略有差异,因为没有特别定义字体,显示的也都是ASCII字符(没有那么多日文片甲名),字体大小也根据当前终端的设置。在Ubuntu的桌面系统终端中,需要修改 Terminal 的 Profile Preference > Colors > Palette 才会获得比较理想的效果。我选的是 Tango 。照片视频中左下角小屏幕上的显示,其实是在 树莓派 Raspberry Pi 上运行这个程序的效果,没有进入 X 桌面,登录系统以后没有startx就直接运行。要在RPi上正确编译和执行,需要先行安装 build-essential 和 libncurses5-dev。

动画效果

YouTube 链接:https://www.youtube.com/watch?v=6uaShGXmBa8
代码托管地址:https://github.com/aguegu/greenrain

Enjoy~

关于aGuegu

阿古 真名:官微宏,技术Geek,玩Arduino,玩Linux,爱Google,爱开源;现居福州
此条目发表在C/C++分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。