曾经第一次发现电脑里还有个叫屏保的东西,
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;
}