ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于EasyX的三个小程序案例

2021-05-04 23:32:40  阅读:294  来源: 互联网

标签:基于 star 鼠标 int EasyX 案例 include color 480


目录

1.星空

2.彩虹

3.鼠标绘图


1.星空

效果如下:

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

#define MAXSTAR 200  //设置最大星星数目

struct STAR
{
	double x;
	int y;
	double step;
	int color;
	//DWORD Color;
};
STAR star[MAXSTAR];

void InitStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].step = (rand() % 5000) / 1000.0 + 1;
	star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);
	star[i].color = RGB(star[i].color, star[i].color,star[i].color);

}
//移动星星
void MoveStar(int i)
{
	//擦掉原来的星星
	putpixel((int)star[i].x, star[i].y, 0);  //作用于像素点
	//计算新的位置
	star[i].x += star[i].step;//*(rand()/(RAND_MAX+0.0)-0.3);
	if (star[i].x > 640)
		InitStar(i);
	//画心得星星
	putpixel((int)star[i].x,star[i].y, star[i].color);
}

int main()
{
	srand((unsigned)time(NULL));
	initgraph(640, 480);
	//初始化所有星星
	for (int i = 0; i < MAXSTAR; i++)
	{
		InitStar(i);
		star[i].x = rand() % 480;
	}
	//绘制星空
	while (!_kbhit())
	{
		for (int i = 0; i < MAXSTAR; i++)
		{
			MoveStar(i);
		}
		Sleep(100);
	}
	closegraph();
	//return 0;
}

定义了一个星星的结构体,最大星星数目设置为200,颜色和移动位置则由随机数决定 

 


2.彩虹

效果如下:

代码如下:

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

int main()
{
	//创建绘图窗口
	initgraph(640, 480);
	//画渐变的天空
	float H = 190;
	float S = 1;  //饱和度
	float L = 0.7f; //亮度
	for (int y = 0; y < 480; y++)
	{
		L += 0.0005f;
		setlinecolor(HSLtoRGB(H, S, L));
		line(0, y, 639, y);

	}
	//画彩虹
	H = 0;
	S = 1;
	L = 0.5f;
	setlinestyle(PS_SOLID, 2);  //设置线宽为2
	for (int r = 400; r > 344; r--)
	{
		H += 5;
		setlinecolor(HSLtoRGB(H, S, L));
		circle(500, 480, r);
	}
	//按任意键退出
	_getch();
	//Sleep(20000);
	closegraph();

}

主要是关于HSL颜色模式的使用,

HSL 又称 HLS。

HSL 的颜色模型如图所示:

H 是英文 Hue 的首字母,表示色相,即组成可见光谱的单色。红色在 0 度,绿色在 120 度,蓝色在 240 度,以此方向过渡。

S 是英文 Saturation 的首字母,表示饱和度,等于 0 时为灰色。在最大饱和度 1 时,具有最纯的色光。

L 是英文 Lightness 的首字母,表示亮度,等于 0 时为黑色,等于 0.5 时是色彩最鲜明的状态,等于 1 时为白色。


3.鼠标绘图

效果如下:

代码:

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

int main()
{
	//初始化
	initgraph(640, 480);
	MOUSEMSG m;  //定义鼠标消息
	while (true)
	{
		//获取一条鼠标消息
		m = GetMouseMsg();
		switch (m.uMsg)
		{
			case WM_MOUSEMOVE:
				//鼠标移动的时候画红色小红点
				putpixel(m.x, m.y, RED);
				break;
			case WM_LBUTTONDOWN:
				//如果点左键同事按下了Ctr键
				if (m.mkCtrl)
					//话题个大方框
					rectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10);
				else
					//画一个小方框
					rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);
				break;
			case WM_RBUTTONUP:
				return 0;
			default:
				break;
		}
	}
	//关闭窗口
	closegraph();
}

核心在于鼠标消息的捕捉和响应。EasyX的鼠标消息结构如下

struct MOUSEMSG
{
	UINT uMsg;			// 当前鼠标消息
	bool mkCtrl;		// Ctrl 键是否按下
	bool mkShift;		// Shift 键是否按下
	bool mkLButton;		// 鼠标左键是否按下
	bool mkMButton;		// 鼠标中键是否按下
	bool mkRButton;		// 鼠标右键是否按下
	int x;				// 当前鼠标 x 坐标(物理坐标)
	int y;				// 当前鼠标 y 坐标(物理坐标)
	int wheel;			// 鼠标滚轮滚动值
};

以上三个小程序转自:案例

 

标签:基于,star,鼠标,int,EasyX,案例,include,color,480
来源: https://blog.csdn.net/q__y__L/article/details/116406332

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有