桌面下雪程序:#includewindows.h
成都創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為柘城企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),柘城網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
#includetime.h
#includestdlib.h
#includeiostream.hconst int SnowNumber=500; //雪點(diǎn)數(shù)量struct SnowNode
{
POINT postion; //雪點(diǎn)位置
int iColor; //先前的顏色
int iSpeed; //下落速度
int iMove; //下落距離
int iStick; //粘貼度
};SnowNode SnowNodes[SnowNumber]; //雪點(diǎn)數(shù)組
int hTimer=0;
int CrWind=0;
int CrStep=0; //當(dāng)前循環(huán)步數(shù)(用于限速)
int ScreenWidth=0; //屏幕寬度
int ScreenHeight=0; //屏幕高度void GetScreenSize();
void CALLBACK TimerProc(HANDLE hWnd,UINT uMsg,UINT idEvent,DWORD dwTime);
void InitSnowNodes();
void MoveSnowNodes();int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
MSG msg; //標(biāo)準(zhǔn)windows消息
LARGE_INTEGER Frequency; //高性能定時(shí)器頻率
LARGE_INTEGER StartCt,EndCt;//高性能定時(shí)器計(jì)數(shù)
float ElapsedTime; //時(shí)間間隔
srand((unsigned)time(NULL));
GetScreenSize();
InitSnowNodes();
QueryPerformanceFrequency(Frequency);
hTimer=SetTimer(0,0,rand()%5*500,(TIMERPROC)TimerProc);
if(hTimer==0)
{
MessageBox(0,TEXT("創(chuàng)建定時(shí)器失敗"),TEXT("提示"),MB_OK|MB_ICONINFORMATION);
return -1;
}
RegisterHotKey(0,0,MOD_CONTROL,(int)'L');
while(1)
{
QueryPerformanceCounter(StartCt); //執(zhí)行運(yùn)算前計(jì)數(shù)值
if(PeekMessage(msg,0,0,0,1))
{
switch(msg.message)
{
case WM_TIMER: TimerProc(0,0,0,0);
break; //預(yù)設(shè)風(fēng)向改變時(shí)間已到
case WM_HOTKEY: KillTimer(0,hTimer);//刪除隨機(jī)風(fēng)向定時(shí) 器
UnregisterHotKey(0,0);//刪除退出熱鍵
InvalidateRect(0,NULL,true);
exit(1);
break;
case WM_DISPLAYCHANGE:
GetScreenSize(); //重新取屏幕的尺寸
InitSnowNodes(); //初始化雪點(diǎn)的數(shù)組
break;
}
}
MoveSnowNodes();
QueryPerformanceCounter(EndCt);//執(zhí)行運(yùn)算后的計(jì)數(shù)值
ElapsedTime=(EndCt.QuadPart-StartCt.QuadPart)/Frequency.QuadPart;
if((ElapsedTime0.0005))
Sleep(2); //簡單限速
else if(ElapsedTime0.0010)
Sleep(1);
else if(ElapsedTime0.0015)
Sleep(3);
}
//MessageBox(0,TEXT(“消息“),TEXT(“消息“),MB_OK|MB_ICONINFORMATION);
return 0;
}
void GetScreenSize()
{
ScreenWidth=GetSystemMetrics(SM_CXSCREEN);
ScreenHeight=GetSystemMetrics(SM_CYSCREEN);
return ;
}void CALLBACK TimerProc(HANDLE hWnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
// MessageBox(0,TEXT(“消息“),TEXT(“消息“),MB_OK|MB_ICONINFORMATION);
srand((unsigned)time(NULL));
if(hTimer==0)
{
MessageBox(0,TEXT("創(chuàng)建定時(shí)器失敗"),TEXT("提示"),MB_OK|MB_ICONINFORMATION);
return ;
}
SetTimer(0,hTimer,((rand()%27+4)*500),(TIMERPROC)TimerProc); //// 重設(shè)下次風(fēng)向改變時(shí)間
//修改風(fēng)向
if(CrWind!=0)
CrWind=0;
else
CrWind=rand()%3-1;
return ;
}void InitSnowNodes()
{
HDC hScreenDC=0;
int j=0;
hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL);
if(hScreenDC==NULL)
{
MessageBox(0,"獲取屏幕DC失敗!","信息",MB_OK|MB_ICONERROR);
return ;
}
srand((unsigned)time(NULL));
for(j=0;jSnowNumber;j++)
{
SnowNodes[j].postion.x=rand()%ScreenWidth;
SnowNodes[j].postion.y=rand()%ScreenHeight;
SnowNodes[j].iColor=GetPixel(hScreenDC,SnowNodes[j].postion.x,SnowNodes[j].postion.y);
SnowNodes[j].iSpeed=(rand()%5+1); //每次下落距離(1-5)
SnowNodes[j].iStick=(30-rand()%SnowNodes[j].iSpeed); //粘貼度(幾次循環(huán)作一次粘貼連判斷
// cout〈〈SnowNodes[j].postion.x〈〈“ Y:“〈〈SnowNodes[j].postion.y〈〈endl;
}
DeleteDC(hScreenDC);
}void MoveSnowNodes()
{
// MessageBox(0,TEXT(“消息“),TEXT(“消息“),MB_OK|MB_ICONINFORMATION);
HDC hScreenDC=0;
srand((unsigned)time(NULL));
int x=0,y=0,i=0;
hScreenDC=CreateDC("DISPLAY",NULL,NULL,NULL);
if(hScreenDC==NULL)
{
MessageBox(0,"獲取屏幕DC失敗!","信息",MB_OK|MB_ICONERROR);
return ;
}
// TextOut(hScreenDC,0,0,“雖然大檢查順順藤摸瓜克格勃呀加“,0);
for(i=0;iSnowNumber;i++)
{
//控制雪點(diǎn)下降速度
if((CrStep%SnowNodes[i].iSpeed)!=0)
continue;
//恢復(fù)上次被覆蓋點(diǎn)
if((GetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y))==0XFFFFFF)
SetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y,SnowNodes[i].iColor);
//根據(jù)幾向作隨機(jī)飄落
x=SnowNodes[i].postion.x+rand()%3+CrWind;
y=SnowNodes[i].postion.y+SnowNodes[i].iMove;
//積雪(停留)效果處理
if( ( (CrStep%SnowNodes[i].iStick)==0)
( (GetPixel(hScreenDC,x,y))!=(GetPixel(hScreenDC,x,y+1)))
( (GetPixel(hScreenDC,x-1,y))!=(GetPixel(hScreenDC,x-1,y+1)))
( (GetPixel(hScreenDC,x+1,y))!=GetPixel(hScreenDC,x+1,y+1))
)
{
//稍稍調(diào)整坐標(biāo)
if(GetPixel(hScreenDC,x,y-1)==GetPixel(hScreenDC,x,y-2))
{
y--;
}
else
{
if(GetPixel(hScreenDC,x,y-1)==GetPixel(hScreenDC,x,y-2))
y++;
x+=CrWind;
}
//畫三個(gè)雪花點(diǎn)
SetPixel(hScreenDC,x,y,0XFFFFFF);
SetPixel(hScreenDC,x+1,y+1,0XFFFFFF);
SetPixel(hScreenDC,x-1,y+1,0XFFFFFF);
//重生雪點(diǎn)
SnowNodes[i].postion.x=rand()%ScreenWidth;
SnowNodes[i].postion.y=rand()%10;
SnowNodes[i].iColor=GetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y);
}
else
{
if( (x0) || (xScreenWidth) || (yScreenHeight))
{
SnowNodes[i].postion.x=(rand()%10);
SnowNodes[i].postion.y=(rand()%ScreenWidth);
SnowNodes[i].iColor=GetPixel(hScreenDC,SnowNodes[i].postion.x,SnowNodes[i].postion.y);
}
else
{
//保存顏色并繪制雪點(diǎn)
SnowNodes[i].iColor=GetPixel(hScreenDC,x,y);
SetPixel(hScreenDC,x,y,0XFFFFFF);
//此時(shí)保存新雪點(diǎn)位置
SnowNodes[i].postion.x=x;
SnowNodes[i].postion.y=y;
}
}
}
DeleteDC(hScreenDC);
CrStep++;
}
sound 不是標(biāo)準(zhǔn)函數(shù),有個(gè)windows 的 Beep 函數(shù)可用:
#include stdio.h
#include stdlib.h
#include windows.h
main()
{
Beep(523,500); Beep(587,500); Beep(659,500);
Beep(698,500); Beep(784,500);
Sleep(500);
Beep(523,500); Beep(587,500); Beep(659,500);
Beep(698,500); Beep(784,500);
}
這個(gè)唱多來米發(fā)少,多來米發(fā)少。
------------------------
比較神奇的函數(shù)是: system(命令字符串);
命令字符串可以是字符串常量,也可以是變量,通過它你可以調(diào)用各式各樣系統(tǒng)命令,或運(yùn)行其它程序。
keybd_event()函數(shù) 也是比較神奇的windows 的函數(shù),調(diào)用它可以代替做“按鍵盤”的工作 -- 按下程序指定的鍵,抬起程序指定的鍵。
C語言的發(fā)展頗為有趣,它的原型ALGOL 60語言。那么大家知道C語言函數(shù)是什么嗎?下面一起來看看!
函數(shù)(Function)是一段可以重復(fù)使用的代碼,這是從整體上對函數(shù)的認(rèn)識。
C語言本身帶了很多庫函數(shù),并分門別類地放在了不同的頭文件中,使用時(shí)只要引入對應(yīng)的頭文件即可。
除了C語言自帶的.函數(shù),我們也可以編寫自己的函數(shù),稱為自定義函數(shù)(User-Defined Function)。自定義函數(shù)和庫函數(shù)沒有本質(zhì)的區(qū)別,表現(xiàn)形式和使用方法一樣,只是開發(fā)者不同而已。
這一章我們就來講解如何編寫和使用自己的函數(shù)。
參數(shù)
函數(shù)的一個(gè)明顯特征就是使用時(shí)帶括號( ),必要的話,括號中還要包含數(shù)據(jù)或變量,稱為參數(shù)(Parameter)。參數(shù)是函數(shù)需要處理的數(shù)據(jù),例如:
strlen(str1)用來計(jì)算字符串的長度,str1就是參數(shù)。
puts("C語言中文網(wǎng)")用來輸出字符串,"C語言中文網(wǎng)"就是參數(shù)。
返回值
既然函數(shù)可以處理數(shù)據(jù),那就有必要將處理結(jié)果告訴我們,所以很多函數(shù)都有返回值(Return Value)。所謂返回值,就是函數(shù)的執(zhí)行結(jié)果。例如:
char str1[] = "C Language";
int len = strlen(str1);
strlen() 的處理結(jié)果是字符串 str1 的長度,是一個(gè)整數(shù),我們通過 len 變量來接收。
函數(shù)返回值有固定的數(shù)據(jù)類型(int、char、float等),用來接收返回值的變量類型要一致。
C語言里沒有fmax()這個(gè)函數(shù),它不能求出兩個(gè)數(shù)中最大值,除非你自己定義這個(gè)函數(shù)。
如下:
int fmax(int a ,int b)
{
return ab?a:b;
}
函數(shù)power()是C語言里固有的庫函數(shù),可以直接使用。它主要用來求某個(gè)數(shù)的n次方。
如power(x,3)實(shí)際上就是求x*x*x.用該函數(shù)時(shí)前面得加math.h
C語言庫函數(shù),常用庫函數(shù)有:
1、scanf格式輸入函數(shù)
2、printf格式輸出函數(shù)
3、systemdos命令函數(shù)
4、sort排序
5、main主函數(shù)
6、fgets文件讀取字符串函數(shù)
7、fputs文件寫入字符串函數(shù)
8、fscanf文件格式讀取函數(shù)
9、fprintf文件格式寫入函數(shù)
10、fopen打開文件函數(shù)
11、getchar輸入字符函數(shù)
12、putchar輸出字符函數(shù)
13、malloc動態(tài)申請內(nèi)存函數(shù)
14、free釋放內(nèi)存函數(shù)
15、abs求絕對值數(shù)學(xué)函數(shù)
16、sqrt求平方根數(shù)學(xué)函數(shù)
擴(kuò)展資料
語言組成:
1、數(shù)據(jù)類型
C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號常量名通常用大寫。
變量是以某標(biāo)識符為名字,其值可以改變的量。標(biāo)識符是以字母或下劃線開頭的一串由字母、數(shù)字或下劃線構(gòu)成的序列,請注意第一個(gè)字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時(shí)為其分配相應(yīng)存儲單元。
3、數(shù)組
如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號,這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。它們以ASCII的NULL作為數(shù)組的結(jié)束。要特別注意的是,方括內(nèi)的索引值是從0算起的。
4、指針
如果一個(gè)變量聲明時(shí)在前面使用 * 號,表明這是個(gè)指針型變量。換句話說,該變量存儲一個(gè)地址,而 *(此處特指單目運(yùn)算符 * ,下同。C語言中另有 雙目運(yùn)算符 *) 則是取內(nèi)容操作符,意思是取這個(gè)內(nèi)存地址里存儲的內(nèi)容。指針是 C 語言區(qū)別于其他同時(shí)代高級語言的主要特征之一。
參考資料來源:百度百科-函數(shù)
新聞標(biāo)題:c語言有深意的函數(shù) c語言函數(shù)的意義
路徑分享:http://jinyejixie.com/article28/dosddcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站建設(shè)、網(wǎng)站營銷、ChatGPT、軟件開發(fā)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)