本程式vs2013 測試通過,不排除其他測試通過用例,主要是windows api的應用
#include
#define id_timer 1
#define strmaxlen 25 //乙個顯示列的最大長度
#define strminlen 8 //乙個顯示列的最小長度
lresult callback wndproc(hwnd, uint, wparam, lparam);
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
typedef struct tagcharchain //整個當作螢幕的乙個顯示列,這是個雙向列表
charchain, *pcharchain;
typedef struct tagcharcolumn
charcolumn, *pcharcolumn;
int main(hinstance hinstance, hinstance hprevinstance,
pstr szcmdline, int icmdshow)
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))
showcursor(true); //顯示滑鼠游標
return msg.wparam;
}tchar randomchar() //隨機字元產生函式
int init(charcolumn *cc, int cyscreen, int x) //初始化
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(); // 對鍊表頭的 元素填充
return0;}
lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
return
0; case wm_timer:
hdc = getdc(hwnd);
patblt(hdcmem, 0, 0, cxscreen, cyscreen, blackness); //將記憶體裝置映像刷成黑色
for (i = 0; i < icolumncount; i++)
if (ctn)
(ccchain + i)->istoptimes = 0;
else
continue;
(ccchain + i)->y += ifontheight; //下次開始顯示的y座標 為當前的y座標加上 乙個字元的高度
//如果開始顯示的y座標減去 整個顯示列的長度超過了螢幕的高度
if ((ccchain + i)->y - (ccchain + i)->istrlen*ifontheight > cyscreen)
//鍊錶的頭 為此鍊錶的前個元素,因為下次開始顯示的時候 就相當與在整個顯示列的開頭新增個元素,然後在開始往上顯示
(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; i < icolumncount; i++)
free(ccchain);
postquitmessage(0);
return
0; }
return defwindowproc(hwnd, message, wparam, lparam);
}
Linux實現黑客帝國炫酷效果
cmatrix是linux環境下黑客帝國風格的屏保,動態的字母在螢幕上刷刷如雨水落下,偶爾看看能回憶起程式設計師的黑客夢。要實現linux命令列下雨效果,首先要在網上找到cmatrix安裝包,我找到的是cmatrix 1.2a.tar.gz 提取碼 3tpj 具體步驟 原始碼安裝cmatrix 1....
實現黑客帝國數字雨效果
今日閒得慌,折騰了乙個黑客帝國數字雨效果,還蠻不錯的。操作 新建乙個文字文件,輸入以下 再將副檔名修改為bat,執行即可。命令提示符 0 1 echo off title 黑客帝國 setlocal enabledelayedexpansion color 0a for l i in 1,1,80 ...
bat實現黑客流星雨BAT bat黑客帝國
怎麼才能實現黑客帝國裡炫酷的流星雨呢?現在,我將用bat 創造乙個流星雨特效 文章最後有完整 開始!直接上 echo off mode con cols 42 lines 20 color 02 set m 1 set v 1 set code ghijklmnopqrstuvwxyz0123456...