c语言雪花程序输出,急用C语言的雪花代码 请高手指教谢谢了~~!

#include

#include

#include

#include

const int ScrnWidth=1024;

const int ScrnHight=768;

const long SnowCol =0xFEFFFE;

const long SnowColDown =0xFFFFFF;

const long SnowColDuck =0xFFDDDD;

const int SnowNum = 500;

const int ID_TIMER = 10;

const char g_szClassName[] = "myWindowClass";

typedef struct POINTAPI

{

long x;

long y;

}a;

int N[4][7]=

{   131,147,165,175,196,220,247, //低度音调

262,286,330,349,440,440,494, //中度音调

523,158,659,698,784,880,998, //高度音调

1047,1175,1319,1397,1568,1760,1976 //高八度音调

};

static HDC hDC1;

static struct POINTAPI pData[500];

static long pColor[500];

static int Vx,Vy,PVx,PVy,timecont;

long Abs(long num)

{

if(num>=0)return(num);

else return(-num);

}

int Random(int max)

{

return(rand()%max);

}

void InitP(int i)

{

pData[i].x=Random(ScrnWidth);

pData[i].y = Random(5);

pColor[i] = GetPixel(hDC1, pData[i].x, pData[i].y);

}

long GetContrast(int i)

{

long ColorCmp;

long tempR;

long tempG;

long tempB;

int Slope;

if(PVy!=0) Slope = PVx / PVy;

else Slope = 2;

if(Slope==0) ColorCmp = GetPixel(hDC1, pData[i].x, pData[i].y + 1);

else if(Slope > 1) ColorCmp = GetPixel(hDC1, pData[i].x + 1, pData[i].y + 1);

else ColorCmp = GetPixel(hDC1, pData[i].x - 1, pData[i].y + 1);

if(ColorCmp==SnowCol)return 0;

tempB = Abs((ColorCmp>>16)&0xff - (pColor[i]>>16)&0xff);

tempG = Abs((ColorCmp>>8)&0xff - (pColor[i]>>8)&0xff);

tempR = Abs((ColorCmp)&0xff - (pColor[i])&0xff);

//return(tempR * 0.114 + tempG * 0.587 + tempB * 0.299);

return((tempR + tempG + tempB) / 3);

}

void DrawP(void)

{

int i;

// srand(time(0));

for(i=0;i

{

if(pColor[i]!=SnowCol&&pColor[i]!=-1)SetPixel(hDC1, pData[i].x, pData[i].y, pColor[i]);

PVx = Random(2) - 1 + Vx * (i % 3);

PVy = Vy * (i % 3 + 1);

pData[i].x = pData[i].x + PVx;

pData[i].y = pData[i].y + PVy;

pColor[i] = GetPixel(hDC1, pData[i].x, pData[i].y);

if(pColor[i] ==-1)InitP(i);

else

if(pColor[i]!=SnowCol)

if (Random(16) > 5 || GetContrast(i) < 50)SetPixel(hDC1, pData[i].x, pData[i].y, SnowCol);

else

{

SetPixel(hDC1, pData[i].x, pData[i].y - 1, SnowColDuck);

SetPixel(hDC1, pData[i].x - 1, pData[i].y, SnowColDuck);

SetPixel(hDC1, pData[i].x + 1, pData[i].y, SnowColDown);

InitP(i);

}

}

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{

switch(msg)

{

case WM_TIMER: //时钟

{

if(timecont>200)

{

timecont=0;

Vx = Random(4) - 2;

Vy = Random(2) + 2;

}

else timecont+=1;

DrawP();

}

break;

case WM_CREATE:

{

int j;

srand(time(0));

Vx = Random(4) - 2;

Vy = Random(2) + 2;

for(j = 0;j

{

pData[j].x = Random(ScrnWidth);

pData[j].y = Random(ScrnHight);

pColor[j] = GetPixel(hDC1, pData[j].x, pData[j].y);

}

SetTimer(hwnd, ID_TIMER, 10, NULL);

hDC1 = GetDC(0);

timecont=0;

}

break;

case WM_CLOSE:

ReleaseDC(0, hDC1);

DestroyWindow(hwnd);

break;

case WM_DESTROY:

KillTimer(hwnd, ID_TIMER);

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd, msg, wParam, lParam);

}

return 0;

}

#pragma comment ( linker, "/subsystem:windows /entry:mainCRTStartup" )

int main(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPSTR lpCmdLine, int nCmdShow)

{

WNDCLASSEX wc;

HWND hwnd;

MSG Msg;

wc.cbSize = sizeof(WNDCLASSEX);

wc.style = 0;

wc.lpfnWndProc = WndProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wc.lpszMenuName = NULL;

wc.lpszClassName = g_szClassName;

wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&wc))

{

MessageBox(NULL, "窗体注册失败!", "错误!",

MB_ICONEXCLAMATION | MB_OK);

return 0;

}

hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, g_szClassName, "屏幕飘雪", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,

NULL, NULL, hInstance, NULL);

if(hwnd == NULL)

{

MessageBox(NULL, "窗体创建失败!", "错误!",

MB_ICONEXCLAMATION | MB_OK);

return 0;

}

ShowWindow(hwnd, nCmdShow);

UpdateWindow(hwnd);

int count=0;

while(GetMessage(&Msg, NULL, 0, 0) > 0)

{

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}

return Msg.wParam;

}

你看看,我调试通过了的!

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值