可用C语言编程来达到黑客文字雨的效果 。。。
效果如下:
代码如下,vc++编译通过 。。
#include windows.h
#define ID_TIMER 1
#define STRMAXLEN 25 //一个显示列的最大长度
#define STRMINLEN 8 //一个显示列的最小长度
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
typedef struct tagCharChain //整个当作屏幕的一个显示列,这是个双向列表
{
struct tagCharChain *prev; //链表的前个元素
TCHAR ch; //一个显示列中的一个字符
struct tagCharChain *next; //链表的后个元素
}CharChain, *pCharChain;
typedef struct tagCharColumn
{
CharChain *head, *current, *point;
int x, y, iStrLen; //显示列的开始显示的x,y坐标,iStrLen是这个列的长度
int iStopTimes, iMustStopTimes; //已经停滞的次数和必须停滞的次数,必须停滞的次数是随机的
}CharColumn, *pCharColumn;
int main(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("matrix") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if(!RegisterClass (wndclass))
{
MessageBox (NULL, TEXT ("此程序必须运行在NT下!"), szAppName, MB_ICONERROR) ;
return 0;
}
hwnd = CreateWindow (szAppName, NULL,
WS_DLGFRAME | WS_THICKFRAME | WS_POPUP,
0, 0,
GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
NULL, NULL, hInstance,
NULL) ;
ShowWindow (hwnd, SW_SHOWMAXIMIZED) ; //最大化显示
UpdateWindow (hwnd) ;
ShowCursor(FALSE); //隐藏鼠标光标
srand ((int) GetCurrentTime ()) ; //初始化随机数发生器
while (GetMessage (msg, NULL, 0, 0))
{
TranslateMessage (msg) ;
DispatchMessage (msg) ;
}
ShowCursor(TRUE); //显示鼠标光标
return msg.wParam ;
}
TCHAR randomChar() //随机字符产生函数
{
return (TCHAR)(rand()%(126-33)+33); //33到126之间
}
int init(CharColumn *cc, int cyScreen, int x) //初始化
{
int j;
cc-iStrLen = rand()%(STRMAXLEN-STRMINLEN) + STRMINLEN; //显示列的长度
cc-x = x+3 ; //显示列的开始显示的x坐标
cc-y =rand()%3?rand()%cyScreen:0; //显示列的开始显示的y坐标
cc-iMustStopTimes = rand()%6 ;
cc-iStopTimes = 0 ;
cc-head = cc-current =
(pCharChain)calloc(cc-iStrLen, sizeof(CharChain)); //生成显示列
for(j=0; jcc-iStrLen-1; j++)
{
cc-current-prev = cc-point; //cc-point一个显示列的前个元素
cc-current-ch = '\0';
cc-current-next = cc-current+1; //cc-current+1一个显示列的后个元素
cc-point = cc-current++; //cc-point = cc-current; cc-current++;
}
cc-current-prev = cc-point; //最后一个节点
cc-current-ch = '\0';
cc-current-next = cc-head;
cc-head-prev = cc-current; //头节点的前一个为此链的最后一个元素
cc-current = cc-point = cc-head; //free掉申请的内存要用current当参数
cc-head-ch = randomChar(); // 对链表头的 元素填充
return 0;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
//ctn 用来确定一个显示链是否 向下前进,如果等待次数超过必须等待的次数,ctn就代表要向下前进
int i, j, temp, ctn; //j为一个显示链中除链表头外的在屏幕上显示的y坐标,temp绿色过度到黑色之用
static HDC hdcMem;
HFONT hFont;
static HBITMAP hBitmap;
static int cxScreen, cyScreen; //屏幕的宽度 高度.
static int iFontWidth=10, iFontHeight=15, iColumnCount; //字体的宽度 高度, 列数
static CharColumn *ccChain;
switch (message)
{
case WM_CREATE:
cxScreen = GetSystemMetrics(SM_CXSCREEN) ; //屏幕宽度
cyScreen = GetSystemMetrics(SM_CYSCREEN) ;
SetTimer (hwnd, ID_TIMER, 10, NULL) ;
hdc = GetDC(hwnd);
hdcMem = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, cxScreen, cyScreen);
SelectObject(hdcMem, hBitmap);
ReleaseDC(hwnd, hdc);
//创建字体
hFont = CreateFont(iFontHeight, iFontWidth-5, 0, 0, FW_BOLD, 0, 0, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DRAFT_QUALITY, FIXED_PITCH | FF_SWISS, TEXT("Fixedsys"));
SelectObject(hdcMem, hFont);
DeleteObject (hFont) ;
SetBkMode(hdcMem, TRANSPARENT); //设置背景模式为 透明
iColumnCount = cxScreen/(iFontWidth*3/2); //屏幕所显示字母雨的列数
ccChain = (pCharColumn)calloc(iColumnCount, sizeof(CharColumn));
for(i=0; iiColumnCount; i++)
{
init(ccChain+i, cyScreen, (iFontWidth*3/2)*i);
}
return 0 ;
case WM_TIMER:
hdc = GetDC(hwnd);
PatBlt (hdcMem, 0, 0, cxScreen, cyScreen, BLACKNESS) ; //将内存设备映像刷成黑色
for(i=0; iiColumnCount; i++)
{
ctn = (ccChain+i)-iStopTimes++ (ccChain+i)-iMustStopTimes;
//
(ccChain+i)-point = (ccChain+i)-head; //point用于遍历整个显示列
//第一个字符显示为 白色
SetTextColor(hdcMem, RGB(255, 255, 255));
TextOut(hdcMem, (ccChain+i)-x, (ccChain+i)-y, ((ccChain+i)-point-ch), 1);
j = (ccChain+i)-y;
(ccChain+i)-point = (ccChain+i)-point-next;
//遍历整个显示列,将这个显示列里的字符从下往上显示
temp = 0 ; //temp绿色过度到黑色之用
while((ccChain+i)-point != (ccChain+i)-head (ccChain+i)-point-ch)
{
SetTextColor(hdcMem, RGB(0, 255-(255*(temp++)/(ccChain+i)-iStrLen), 0));
TextOut(hdcMem, (ccChain+i)-x, j-=iFontHeight, ((ccChain+i)-point-ch), 1);
(ccChain+i)-point = (ccChain+i)-point-next;
}
if(ctn)
(ccChain+i)-iStopTimes = 0 ;
else continue;
(ccChain+i)-y += iFontHeight; //下次开始显示的y坐标 为当前的y坐标加上 一个字符的高度
//如果开始显示的y坐标减去 整个显示列的长度超过了屏幕的高度
if( (ccChain+i)-y-(ccChain+i)-iStrLen*iFontHeight cyScreen)
{
free( (ccChain+i)-current );
init(ccChain+i, cyScreen, (iFontWidth*3/2)*i);
}
//链表的头 为此链表的前个元素,因为下次开始显示的时候 就相当与在整个显示列的开头添加个元素,然后在开始往上显示
(ccChain+i)-head = (ccChain+i)-head-prev;
(ccChain+i)-head-ch = randomChar();
}
BitBlt(hdc, 0, 0, cxScreen, cyScreen, hdcMem, 0, 0, SRCCOPY);
ReleaseDC(hwnd, hdc);
return 0;
case WM_RBUTTONDOWN:
KillTimer (hwnd, ID_TIMER) ;
return 0;
case WM_RBUTTONUP:
SetTimer (hwnd, ID_TIMER, 10, NULL) ;
return 0;
//处理善后工作
case WM_KEYDOWN:
case WM_LBUTTONDOWN:
case WM_DESTROY:
KillTimer (hwnd, ID_TIMER) ;
DeleteObject(hBitmap);
DeleteDC(hdcMem);
for(i=0; iiColumnCount; i++)
{
free( (ccChain+i)-current );
}
free(ccChain);
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
数数模仿了多少影片
无厘头喜剧中历来充斥对经典的模仿,中外影片概莫能外,如果一个经典第一次出现的时候是以正剧的面目,那么它第二次出现的时候就一定是滑稽和可笑的了。不妨看看《功夫》究竟模仿了哪些影片。
《黑客帝国》
尽管星爷不承认自己模仿了渥卓斯基兄弟的创意,但是在这个冬天漫天飞舞的不仅有雪花,还有数不清的黑衣斧头帮。
《七十二家房客》
作为一部被翻拍多次的经典话剧,我们可以在邵氏的版本中看到谈恋爱时期的沈殿霞和郑少秋。另外,如来神掌也是有来历的,那是一部60年代风靡港岛的神怪动作片,搞怪版的杨过和小龙女就是发轫于此。
《六指琴魔》
琴魔兄弟以琴声杀人于无形,但是扮相实在不能和林青霞姐姐的正版“六指琴魔”相比啊。
《闪灵》
阿星去“不正常人研究中心”寻找火云邪神时,地道里涌出鲜血的镜头来自库布里克的《闪灵》,对于这一点星爷很自豪地承认了,看来他对大师素有好感。
《木乃伊》
琴魔兄弟放出的魔鬼和《木乃伊》《指环王》《加勒比海盗》应该都有点血缘关系,火云邪神也和古鲁姆也有几分相似,为此,我们不得不佩服香港先涛数码的技术水平。
《少林足球》
“还踢球?”阿星的开场动作还是利用足球耍宝,不知道这几个华丽的颠球动作有没有借助电脑特技?
《超人》
“神雕侠侣”的飞行动作不会是从超人那里学来的吧,难道超人也在白驼山练过蛤蟆功?
《纵横四海》
阿星不要跑得太帅啊!他从汽车下溜过的动作好像张国荣,当然,也许说他和包租婆那风火轮式的跑法像《猫和老鼠》可能更加合适。
《城市之光》
在星爷的想象中,爱情都是很凄美的吧。小人物的温馨和浪漫,还有有残疾的弱女子,都让我们想起了那个卓别林的经典故事。
李小龙
这还用说吗?拍这部影片不就是为了向偶像表达如滔滔江水一般的崇拜之情吗?值得一提的是那白衫黑裤的造型来自《龙争虎斗》。
《蜘蛛侠》
“能力越大,责任越大。”这绝对不是油炸鬼的首创。
《少林足球》
“我本身是一个公司职员,戴眼镜是很合理的。”四眼仔的台词让人想起某场友谊赛开赛前的段落。
parity评论:
星仔的无厘头风格大家是早就领教的了。就是因为模仿,才产生特别的喜剧效果。把正剧的点睛之笔置于小人物的生活背景之下,凸现滑稽搞笑之处。个人觉得,表面上是“模仿”,实质来说,是继承和发扬。
首推的当然是《三体》系列,但是根据你的要求,似乎不太合适。这里推荐另外两部个人感觉不错的科幻小说《天意》《天命》,这两本可以算是国内本土科幻的扛鼎之作了。国外的话,比较适合大众的话,其实我感觉没有,一个是翻译问题,还有就是思维状态不符合国内情景,要看的话,可以看看《永恒的终结》。
没时间做,但给你个思路:
主要的类:Class TextBar,应该包含字串变量保存要显示字符,还应包含一个贴图资源,作为字符绘制后的颜色mask,呈现出文字渐变效果;应该包含的基本方法:绘制(实现字符由上到下绘制以及贴图);衍生的其它子程序都是围绕这个功能的,例如计算字符位置,贴图位置,产生,消失等。
主类:与TextBar是聚合关系或组合关系。创建TextBar实例并给予其初始化值和位置。
《黑客帝国》里面所包含的哲学思想以及科技知识还有丰富的想象力是很少有其他电影能比拟的。它体现着一种客观唯心主义的价值观。不知道各位看没看过《黑客帝国》的动画版本。那算是一个对于MATRIX世界的补充和丰富。
MATRIX的世界系统非常的严密,很少有逻辑性不合理的漏洞。具体的我就不说了,我解释一下为什么最后人类为什么会得到和平,机器还没被消灭。
所有的人,包括绝大多数的观众、郇山的市民、战士们(锡安只是一个音译,根据文献因该是这个名称。相信看过《达芬奇的密码》一书的人都会有所了解)还有在跟MATRIX工程师谈话之前的尼奥都深信尼奥是救世主,可是他们错了。 MATRIX是一个非常庞大的系统,可以将其视为一个与真实世界基本一致的网络游戏,玩家就是那些作为“电池”的现实生活之中的人类。然而这个系统并非完全的完善,有各种各样的Bug以及系统自动维护的补丁程序。但是所有的这些漏洞会在一段很长的时间内累积。当到达一定的量,系统就会崩溃(尼奥所处的崩溃就是史密斯这个病毒程序),最严重的结果就是造成所有的人类死亡,机器也会因为没有能量而灭亡。所以系统会挑选出这一届的“The One”由他来挑选一定的人类重建郇山,也就是第二集尼奥最后两个门中另一个的选择。但是这一届的“The One”没有选择拯救人类,而是选择了爱情,即救出崔尼蒂。于是机器方面认为MATRIX系统终将趋于毁灭,便要在自身毁灭之前将人类全部毁灭。尼奥去机器城向机器文明签订条约——由尼奥来恢复MATRIX的稳定,即消灭不受MATRIX控制的已变成病毒的密探程序史密斯,从而换取郇山的安全。由于双方实力对比是机器文明是明显强势,所以非感情智慧的机器文明出于自保答应了这一条件。当尼奥身为补丁程序(或者是针对性杀毒软件)完成了使命,将所有的史密斯程序都清除。这样一来,所有被史密斯感染的程序恢复正常(基本上所有的程序都被感染了),系统也随之恢复了平衡。机器文明便履行了自己的诺言,和平,停战。 还记得最后先知问工程师会否守约时它的回答么:你以为我是什么?人类么?真是无情的讽刺啊,一丝不苟的机器文明是绝对不会背信弃义的。
大众普遍喜欢《指环王》而对《黑客帝国》的评价不甚高是因为它是一个小众的电影。它的结局不为人所喜。是客观的、但是也是悲观的。从另一观点上,具有自我修复能力的机器文明是高于人类文明的存在。C文明(有碳元素为主体的有机物组成的文明)所知造出来的Fe文明(以钢铁为主体的机器文明)是高于创造者的。这就是另一个话题了。
是不是黑色的屏幕上满是不停变化的数字流啊?通过FLASH的代码制作可以实现,以下为FLASH的制作流程:
再现《黑客帝国》数字流特效
1.新建flash文档,舞台大小设置为550像素*400像素,背景颜色选择黑色,帧频率设置为30。
2.画一个竖形的长方形动态文本框,注意要足够长,即能放下后面所设置的数字流长度。打开属性面板,将变量名设为“shuzi”。转换为电影剪辑。在电影剪辑时间轴第一帧添加代码:
this.onEnterFrame = function() {
//反复执行下面代码。
if (this._y0) {
this._y = 390;
}
if (this._y400) {
this._y = 10;
}
//如果数字流超过了舞台上,下界,则分别回到舞台的下,上端。
ysudu = 5;
this._y += ysudu;
//数据流以速度为5个像素向下运动。
shuzi=random(10)+"\r"+random(10)+"\r"+random(10)+"\r"+random(10)+"\r"+random(10)+"\r"+random(10)+"\r"+random(10)+"\r"+random(10)+"\r"+random(10);
//数据流的内容。即9个纵向排列的在0-9随机闪动的数字。
};
3.打开库面板,右键点选库面板中的影片剪辑,打开链接属性对话框,钩选“为动作脚本导出选项”,在标识符一栏中输入“wenzi”
4. 回到主场景,在舞台时间轴第一帧添加代码。
_root.onEnterFrame = function() {
attachMovie("wenzi", "wenzi"+i, i++);
//反复附加电影剪辑wenzi到舞台上。
_root["wenzi"+i]._x = Math.random()*550;
_root["wenzi"+i]._y = Math.random()*400;
//在舞台范围内随机设置附加的电影剪辑的x,y坐标值。
_root["wenzi"+i]._xscale = _root["wenzi"+i]._yscale=Math.random()*200;
//在0-200范围内设置附加电影剪辑的x,y缩放比例。
_root["wenzi"+i]._alpha = random(100);
//随机设置附加电影剪辑的透明值
if (i200) {
i = 1;
}
//保证舞台上不超过200个数字流电影剪辑。因为对于深度值相同的电影剪辑,新附加的电影剪辑会覆盖原来存在的电影剪辑。
};
5.如果大家使用的是FlashMX,直接发布即可
我已经将这个动画效果贴到;extra=
这个网页上了,将附件下载用flash播放器播放即可。:)
昨天,我给除夕写了一篇感谢 怀疑赞助同伙 感谢 怀疑,亲爱的同伙 打开你的邀请 来你野外吃饭 。古早尔很高兴...
亲爱的父亲和儿子:你胆小!这是你母亲在除夕后第一次写给父亲和儿子的怀疑。我希望 怀疑能给你带来更多的快乐 战争...
自尔判断 是我们每个人在一段时间内表达 的自尔总结,一年或一个阶段,处理 本身 的进一步研究 战争 ,职业 和...
致(1)班野少的感激 怀疑亲爱的野少同伙 :除夕 野懦夫!起初 ,尔念简单 天?对于除夕 野说一声开放!那是二...
我们正在尝试 的时刻,通常都邑 在简历外面有自我推荐 的内容,所以如何处理 简历外面的自我推荐 ?昨天给除夕带...
经由过程 训练否以让咱们熟悉 到团队的力气 ,一小我 的力气 再怎么年夜 也是有限的,须要 年夜 野一路 尽力...