来一个电脑屏保

曾经第一次发现电脑里还有个叫屏保的东西,

me也想做一个,去学C++...

然后,我做出来了。。。

代码如下:

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <Windows.h>
#include <graphics.h>
#define NUM 5
using namespace std;
double WIDTH = GetSystemMetrics(SM_CXSCREEN);    //获取电脑的宽
double HEIGHT = GetSystemMetrics(SM_CYSCREEN);   //获取电脑的长
/*每个球坐标的初始化*/
double x[NUM] = { (WIDTH / 2.0),(WIDTH / 3.0),(WIDTH / 4.0),(WIDTH / 10.0),(WIDTH /10.0) };
double y[NUM] = { (HEIGHT / 2.0),(HEIGHT / 3.0),(HEIGHT / 4.0),(HEIGHT / 10.0),(HEIGHT / 10.0) };
/*每个球移动速度的初始化*/
double vx[NUM] = { 10.0,20.0,2.0,30.0,20.0 };
double vy[NUM] = { 10.0,20.0,2.0,20.0,30.0 };
/*每个球半径的初始化*/
double radius[NUM] = { 100.0,50.0,75.0,25.0,25.0 };
/*定义第一个球*/
void Ballo()
{
	setfillcolor(WHITE);
	solidcircle(x[0], y[0], radius[0]);
	x[0] = x[0] + vx[0];
	y[0] = y[0] + vy[0];
	if ((x[0] < radius[0]) || (x[0] >= WIDTH - radius[0]))
	{
		vx[0] = -vx[0];
	}
	if ((y[0] <= radius[0]) || (y[0] >= HEIGHT - radius[0]))
	{
		vy[0] = -vy[0];
	}
	setfillcolor(BLUE);
	solidcircle(x[0], y[0], radius[0]);
}
/*第二个球*/
void Ballt()
{
	setfillcolor(WHITE);
	solidcircle(x[1], y[1], radius[1]);
	x[1] = x[1] + vx[1];
	y[1] = y[1] + vy[1];
	if ((x[1] < radius[1]) || (x[1] >= WIDTH - radius[1]))
	{
		vx[1] = -vx[1];
	}
	if ((y[1] <= radius[1]) || (y[1] >= HEIGHT - radius[1]))
	{
		vy[1] = -vy[1];
	}
	setfillcolor(GREEN);
	solidcircle(x[1], y[1], radius[1]);
}
/*第三个球*/
void Ballh()
{
	setfillcolor(WHITE);
	solidcircle(x[2], y[2], radius[2]);
	x[2] = x[2] + vx[2];
	y[2] = y[2] + vy[2];
	if ((x[2] < radius[2]) || (x[2] >= WIDTH - radius[2]))
	{
		vx[2] = -vx[2];
	}
	if ((y[2] <= radius[2]) || (y[2] >= HEIGHT - radius[2]))
	{
		vy[2] = -vy[2];
	}
	setfillcolor(YELLOW);
	solidcircle(x[2], y[2], radius[2]);
}
/*第四个球*/
void Ballf()
{
	setfillcolor(WHITE);
	solidcircle(x[3], y[3], radius[3]);
	x[3] = x[3] + vx[3];
	y[3] = y[3] + vy[3];
	if ((x[3] < radius[3]) || (x[3] >= WIDTH - radius[3]))
	{
		vx[3] = -vx[3];
	}
	if ((y[3] <= radius[3]) || (y[3] >= HEIGHT - radius[3]))
	{
		vy[3] = -vy[3];
	}
	setfillcolor(RED);
	solidcircle(x[3], y[3], radius[3]);
}
/*第五个球*/
void Balli()
{
	setfillcolor(WHITE);
	solidcircle(x[4], y[4], radius[4]);
	x[4] = x[4] + vx[4];
	y[4] = y[4] + vy[4];
	if ((x[4] < radius[4]) || (x[4] >= WIDTH - radius[4]))
	{
		vx[4] = -vx[4];
	}
	if ((y[4] <= radius[4]) || (y[4] >= HEIGHT - radius[4]))
	{
		vy[4] = -vy[4];
	}
	setfillcolor(RGB(128, 128, 255));
	solidcircle(x[4], y[4], radius[4]);
}
int main()
{
	initgraph(WIDTH, HEIGHT);
	HWND hWnd = GetHWnd();                                         //获取窗口句柄
	SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION);//取消标题栏
	MoveWindow(hWnd, 0, 0, WIDTH, HEIGHT, TRUE);//移动窗口至(0,0)
	setbkcolor(WHITE);
	cleardevice();
	ExMessage msg;
	int t = 0;
	char ch;
    /*使用双缓冲防止闪屏
    BeginBatchDraw();
        .
        .
        .
    EndBatchDraw();
    */
	BeginBatchDraw();
	while (1)
	{
		Ballo();
		Ballt();
		Ballh();
		Ballf();
		Balli();
		FlushBatchDraw();
		Sleep(1);
		if (_kbhit())                  //使用_kbhit不会造成阻塞
		{
			ch = _getch();
			break;
		}
		if (peekmessage(&msg, EM_MOUSE))
		{
			switch (msg.message)
			{
			case WM_LBUTTONDOWN:       //判断鼠标左键是否按下 
				t = 1;
				break;
			case WM_RBUTTONDOWN:       //判断鼠标右键是否按下
				t = 1;
				break;
			case WM_MOUSEWHEEL:        //判断鼠标滚轮是否滚动
				t = 1;
				break;
			}
		}
		if (t == 1)
		{
			break;
		}
	}
	EndBatchDraw();
	return 0;
}

最后,把可执行文件的后缀名改成 .scr ,放进Windows文件夹里,就可以去个性化里使用了。

完结,散花

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值