个人作品

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下

动态立体方块(by Kenny)

一个简单的绘图程序。

执行效果如下:

完整源代码如下:

/************************************************
 * 程序名称:动态立体方块							*
 * 编译环境:Visual C++ 6.0 / EasyX 2014冬至版	*
 * 作者:Kenny <499508968@qq.com>				*
 * 最后修改:2015.05.21							*
 ************************************************/

#include <graphics.h>
#include <conio.h>
#include <math.h>

void Block(int length);		// 画方块函数声明
void StrongBlock();			// 动态立体方块函数声明

// 主函数
int main()
{
	StrongBlock();
	return 0;
}

// 画方块函数定义
void Block(int length, COLORREF color)
{
	setorigin(getwidth() / 2, getheight() / 2);			// 设置坐标原点为窗口中心
	POINT a[4][6];						// 定义二维数组存放点,4条边,每条边分5段,也就是6个点
	int i, j;

	// 顺时针初始化点坐标,第一条边为坐标原点左上方的边
	for (j = 0; j < 4; j++)
	{
		for (i = 0; i < 6; i++)			// 初始化每条边上的6个点坐标
		{
			a[j][i].x = (int)pow(-1, j / 2 + j % 2 + 1) * length * i / 5;
			a[j][i].y = (int)pow(-1, j / 2 + 1) * length * (5 - i) / 5;
		}
	}

	setlinecolor(color);				// 设置线条颜色
	for (i = 0, j = 5; i < 6; i++, j--)
	{
		line(a[0][i].x, a[0][i].y, a[2][j].x, a[2][j].y);   // 连接第一条和第三条边上的6对点坐标
		line(a[1][i].x, a[1][i].y, a[3][j].x, a[3][j].y);	// 连接第二条和第四条边上的6对点坐标
	}
}

// 动态立体方块函数定义
void StrongBlock()
{
	initgraph(800,800);
	int length;
	float H, S, L;
	while (!kbhit())
	{
		length = 10;
		H = 0;
		S = 1;
		L = 0.5;
		while (length <= getwidth() / 2)
		{
			Block(length, HSLtoRGB(H, S, L));
			Sleep(150);
			length += 4;		// 长度递增
			H += (float)1.8;	// 改变颜色
		}
		length = 400;
		H = 360;
		S = 1;
		L = 0.5;
		while (length > 10)
		{
			Block(length, HSLtoRGB(H, S, L));
			Sleep(150);
			length -= 4;		// 长度递减
			H -= (float)1.8;	// 改变颜色
		}
	}
	getch();
	closegraph();
}

作者:Kenny
邮箱:499508968@qq.com

添加评论