C語言之數字雨

2021-08-03 01:20:03 字數 3576 閱讀 9235

用個高階一點的編譯器,這樣出現的問題會少很多,結果很酷炫。

#include 

#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 winapi winmain(hinstance hinstance, hinstance hprevinstance,

pstr szcmdline, int icmdshow)

ws_dlgframe | ws_thickframe | ws_popup, // windows style

0, 0,

getsystemmetrics(sm_cxscreen), getsystemmetrics(sm_cyscreen),

null, null, hinstance,

null);

showwindow(hwnd, sw_showmaximized); //最大化顯示 show windows

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; iistoptimes++ >(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)

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; icurrent);

}free(ccchain);

postquitmessage(0);

return

0; }

return defwindowproc(hwnd, message, wparam, lparam);

}

C語言之數字的孔數

problem description s得到乙個數,他想知道這個數每一位上的數字的孔數之和。1,2,3,5,7這幾個數字是沒有孔的,0,4,6,9都有乙個孔,8有兩個孔。input 輸入資料的第一行為乙個數t表示資料組數。接下來t行,每行輸入乙個正整數n 1 n 1000 表示要求數字孔數之和的數...

用C語言VC2010實現數字雨

include include include include char ch 320 20 這裡定義了120組字元,沒組數中有20個字元 int height 320 定義沒組數中的首個字元的高度 void initch 初始化字串 void show 列印字元雨 void randheight ...

c語言之猜數字的小遊戲

突然想起在剛學c語言的時候變想做出乙個可以玩耍的遊戲,但是當時都沒有了解圖形庫的概念,在網上閒逛便發現了有人做了乙個猜數字的遊戲,我當時也跟的寫了乙個,基本都差不多。想想也是好久以前的東西了,直接貼 把,大家多多指導。include include includeint num 4 paer num...