黑客帝國之酷炫屏保數字雨

2021-07-07 02:44:13 字數 3066 閱讀 3541

本程式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...