c语言 桌面下雪程序,用C++写的在桌面上飘雪的特效程序
#include〈windows.h〉
#include〈time.h〉
#include〈stdlib.h〉
#include〈iostream.h〉
const int SnowNumber=500; //雪点数量
struct SnowNode
{
POINT postion; //雪点位置
int iColor; //先前的颜色
int iSpeed; //下落速度
int iMove; //下落距离
int iStick; //粘贴度
};
SnowNode SnowNodes[SnowNumber]; //雪点数组
int hTimer=0;
int CrWind=0;
int CrStep=0; //当前循环步数(用于限速)
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; //标准windows消息
LARGE_INTEGER Frequency; //高性能定时器频率
LARGE_INTEGER StartCt,EndCt;//高性能定时器计数
float ElapsedTime; //时间间隔
srand((unsigned)time(NULL));
GetScreenSize();
InitSnowNodes();
QueryPerformanceFrequency(&Frequency);
hTimer=SetTimer(0,0,rand()%5*500,(TIMERPROC)TimerProc);
if(hTimer==0)
{
MessageBox(0,TEXT(“创建定时器失败“),TEXT(“提示“),MB_OK|MB_ICONINFORMATION);
return -1;
}
RegisterHotKey(0,0,MOD_CONTROL,(int)’L’);
while(1)
{
QueryPerformanceCounter(&StartCt); //执行运算前计数值
if(PeekMessage(&msg,0,0,0,1))
{
switch(msg.message)
{
case WM_TIMER: TimerProc(0,0,0,0);
break; //预设风向改变时间已到
case WM_HOTKEY: KillTimer(0,hTimer);//删除随机风向定时 器
UnregisterHotKey(0,0);//删除退出热键
InvalidateRect(0,NULL,true);
exit(1);
break;
case WM_DISPLAYCHANGE:
GetScreenSize(); //重新取屏幕的尺寸
InitSnowNodes(); //初始化雪点的数组
break;
}
}
MoveSnowNodes();
QueryPerformanceCounter(&EndCt);//执行运算后的计数值
ElapsedTime=(EndCt.QuadPart-StartCt.QuadPart)/Frequency.QuadPart;
if((ElapsedTime〈0.0005))
Sleep(2); //简单限速
else if(ElapsedTime〈0.0010)
Sleep(1);
else if(ElapsedTime〈0.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(“创建定时器失败“),TEXT(“提示“),MB_OK|MB_ICONINFORMATION);
return ;
}
SetTimer(0,hTimer,((rand()%27+4)*500),(TIMERPROC)TimerProc); 重设下次风向改变时间
//修改风向
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;j〈SnowNumber;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); //粘贴度(几次循环作一次粘贴连判断
// 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;i〈SnowNumber;i++)
{
//控制雪点下降速度
if((CrStep%SnowNodes[i].iSpeed)!=0)
continue;
//恢复上次被覆盖点
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);
//根据几向作随机飘落
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))
)
{
//稍稍调整坐标
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;
}
//画三个雪花点
SetPixel(hScreenDC,x,y,0XFFFFFF);
SetPixel(hScreenDC,x+1,y+1,0XFFFFFF);
SetPixel(hScreenDC,x-1,y+1,0XFFFFFF);
//重生雪点
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( (x〈0) || (x〉ScreenWidth) || (y〉ScreenHeight))
{
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
{
//保存颜色并绘制雪点
SnowNodes[i].iColor=GetPixel(hScreenDC,x,y);
SetPixel(hScreenDC,x,y,0XFFFFFF);
//此时保存新雪点位置
SnowNodes[i].postion.x=x;
SnowNodes[i].postion.y=y;
}
}
}
DeleteDC(hScreenDC);
CrStep++;
}
用C++写的在桌面上飘雪的特效程序.doc
下载Word文档到电脑,方便收藏和打印[全文共3466字]
编辑推荐:
下载Word文档
c语言 桌面下雪程序,用C++写的在桌面上飘雪的特效程序相关推荐
- 怎么抓python程序的包_如何在AWS上部署python应用程序
如何在AWS上部署python应用程序,学姐呕心沥血亲自总结,亲测有效,比网上看网上大把大把的文档要快得多! 作者:蕾学姐 亚马逊云计算服务(Amazon Web Services,缩写为AWS),由 ...
- 笔记本怎样运行android程序,PC手机二合一 在笔记本上如何运行安卓程序
由于系统逻辑的不同,作为当前人类社会中最重要的战略性物资,手机和笔记本电脑并没有实现互通有无,而厂商们为了展现自家生态的独特优势,一直都在极力去思考如何打通PC系统和手机系统的壁垒,比如去年我们一直都 ...
- python开发桌面时钟_python基于Kivy写一个图形桌面时钟程序
Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 Kivy 编写的程序可在 Linux,Windows,OS X,Android,iOS 和 Ra ...
- java高级程序员如何写好简历,一份优秀的程序员简历是什么样的?
2019独角兽企业重金招聘Python工程师标准>>> 马上就要到一年一度,最适合找工作的时间段:金三银四.另外一个时间段是:金九银十.金三银四的大意是:最好的时间是三月,其次是四月 ...
- 在windows平台上编写的python程序无法在_在 Windows 平台上编写的 Python 程序无法在 Unix 平台运行。_护理学基础(精品资源课)答案_学小易找答案...
[单选题]对于IEEE754单精度浮点数加减运算,只要对阶时得到的两个阶码之差的绝对值|△E|大于等于( ),就无需继续进行后续处理,此时,运算结果直接取阶大的那个数. (6.0分) [判断题]婚礼虽 ...
- mac应用程序在哪_如何在Mac上列出所有应用程序
mac应用程序在哪 MacOS applications are installed a bit differently than Windows. Since they're almost alwa ...
- window应用在linux运行,如何在Linux上运行Windows应用程序?
原标题:如何在Linux上运行Windows应用程序? 一些人可能避免在Linux上运行Windows应用程序,但事实上有时候这么做大有帮助. 一些人无法摆脱Windows的最主要原因之一是可用的应用 ...
- 64位Ubuntu上编译32位程序
1.确认主机为64位架构的内核,应该输出为adm64,执行: $ dpkg --print-architecture 2.确认打开了多支架功能,应该输出为i386,执行: $ dpkg --print ...
- 在Windows上创建CUDA C程序
文章目录 一.安装Visual Studio 二.安装CUDA工具包 (一)查看GPU型号 (二)下载CUDA10.0 (三)安装CUDA10.0 三.初探CUDA C程序 (一)CUDA C程序概述 ...
- Mac使用技巧:在 iPhone 或 iPad 上自动更新应用程序
如何在 iPhone 或 iPad 上自动安装应用程序更新?按照本提示中的步骤操作,以便您可以自动下载和安装应用程序更新. 在 iOS 中自动更新应用程序 您可以在iPhone和iPad上自动安装应用 ...
最新文章
- ubuntu 14.04 安装java_Ubuntu 14.04中安装Java
- IE浏览器导出问题。。好要命
- jQuery对象和DOM对象
- JSP自定义标签学习笔记
- Linux内核驱动GPIO的使用
- 【POJ - 2728】Desert King (最有比率生成树,分数规划)
- 元宵节快乐 | 2月15日 星期二 | 携程在国内率先开启混合办公模式;米哈游推出元宇宙品牌;AMD宣布完成对赛灵思的收购...
- (5)css样式表特征
- 图解Python多修饰器时哪个先起作用
- P1551 亲戚题解
- 调试信息清除小工具的编写
- 服务器更换主板后系统无法启动
- 06.Python网络爬虫之requests模块(2)
- java 内部类 加载_Java 内部类基础介绍
- N天学习一个Linux命令之grep
- python里面的pip是什么意思_python中pip是什么
- 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)...
- Longhorn配置参数详解
- Windows 虚拟机Keypair获取登陆密码
- 南山谷主:面包屑导航是什么意思?对SEO有何作用?