C/C++图形库EasyX使用

本文详细介绍EasyX图形库的安装与使用,包括基础概念、绘图函数应用及多个实例演示,如绘制圆、直线、国际象棋棋盘、反弹球动画等,适合初学者快速上手。

下载安装

easy_x官方网站,点击【下载】可以下载不同版本的easy_x安装软件,我直接下了EasyX库(附带graphics.h) 测试版 (2019-5-29 更新)这一版本。

easy_x官方文档,全中文。不过在启动安装软件后,会自动扫描你电脑中的不同版本VC,然后选择安装到哪个版本的VC,也可以选择是否安装chm格式的文档到电脑上。

其实很多东西官方文档中都说得很详细了,这里就不啰嗦了。

EasyX基础使用知识

在Visual C++中创建空的控制台项目,然后添加.cpp文件#include graphics.h就可以了。如果不是控制台项目,而是Win32 Application或者其他的项目,就无法使用控制台相关的函数。

注意:EasyX无法和Dev CPP一起使用,必须配合VC使用,代码文件扩展名要用.cpp。

基本概念:

  • 设备(绘图表面),EasyX运行在控制台上面,调用win api进行绘图。绘图的窗口只有两种,默认绘图窗口的和IMAGE对象。通过SetWorkingImage(IMAGE* pImg = NULL)函数设置,一般绘图设备为默认绘图窗口。选定以后,所有的绘图函数都会运作在这个绘图设备上。注意:EasyX不是Qt或者MFC,EasyX只是绘图工具。
  • 坐标,分为物理坐标(描述设备的坐标系,左上方为原点,X轴向右为正,Y轴向下为正,单位为像素)和逻辑坐标(一般和物理坐标一一对应)。可通过setorigin改变坐标原点,setaspectratio改变坐标轴方向和缩放比例。
  • 颜色。既然EasyX重点在于绘图,那颜色的表示方法就非常重要了。EasyX提供了一些预定义大写的颜色常量(BLACK, BLUE, GREEN, RED......),这些常量实际是16进制的颜色表示0xbbggrr;还可以用windows SDK中的RGB宏来合成颜色RGB(b, g, r)。比较少用的是用 HSLtoRGBHSVtoRGB转换其他色彩模型到RGB 颜色。

用EasyX来做控制台游戏之类的,和直接使用Console相关的C函数以及Windows的api思路差别不大,都是配合一定的程序逻辑,重复“绘制-擦除”这一的过程。但是方便多了。


EasyX程序示例

1.1 画一个实心圆

#include <graphics.h>		// 引用 EasyX 图形库
#include <conio.h>
int main()
{
   
   
	initgraph(640, 480);	// 初始化640×480的画布
	setcolor(YELLOW);       // 圆的线条为黄色
	setfillcolor(GREEN);    // 圆内部位绿色填充
	fillcircle(100, 100, 20);  // 画圆,圆心(100, 100),半径 20
	_getch();				// 按任意键继续
	closegraph();			// 关闭图形界面
	return 0;
}

1.2 画出10条直线

#include <graphics.h>
#include <conio.h>
int main()
{
   
   
	initgraph(640, 480);
	for(int y=0; y<=480; y=y+48)
		line(0, y, 640, y);
	getch();
	closegraph();
	return 0;
}

1.3 画出红蓝交替的直线

#include <graphics.h>
#include <conio.h>
int main()
{
   
   
	initgraph(640, 200);
	for(int y=0; y<=200; y=y+5)
	{
   
   
		if ( y/5 % 2 == 1)    // ÅÐ¶ÏÆæÊýÐÐżÊýÐÐ
			setcolor(RGB(255,0,0));
		else
			setcolor(RGB(0,0,255));
		line(0, y, 640, y);
	}
	getch();
	closegraph();
	return 0;
}

1.4 绘制国际象棋棋盘

// 绘制国际象棋棋盘
#include <graphics.h>
#include <conio.h>
int main()
{
   
   
	int step = 50;
	// 初始化绘图窗口
	initgraph(500, 500);	
	// 设置背景色为蓝色
	setbkcolor(YELLOW);
	// 用背景色清空屏幕
	cleardevice();
	
	int i,j;
	for(i=1;i<=8;i++)  
	{
   
   
		for(j=1;j<=8;j++)  
		{
   
   
			if ((i+j)% 2 ==1)
			{
   
   
				setfillcolor(BLACK);
				solidrectangle(i*step,j*step,(i+1)*step,(j+1)*step); 	// 绘制黑色方块
			}
			else
			{
   
   
				setfillcolor(WHITE);
				solidrectangle(i*step,j*step,(i+1)*step,(j+1)*step); 	// 绘制白色方块
			}
		}
	}
	getch();
	closegraph();
	return 0;
}

1.5 绘制围棋棋盘

// 绘制围棋棋盘
#include <graphics.h>
#include <conio.h>
int main()
{
   
   
	int step = 30;
	// 初始化绘图窗口
	initgraph(600, 600);	
	// 设置背景色为蓝色
	setbkcolor(YELLOW);
	// 用背景色清空屏幕
	cleardevice();
	
	setlinestyle(PS_SOLID, 2);  // 画实线,宽度为2个像素
	setcolor(RGB(0,0,0));  // 设置为黑色
	
	int i;
	for(i=1; i<=19; i++)  // 画横线和竖线
	{
   
   
		line(i*step, 1*step, i*step,  19*step);
		line(1*step, i*step, 19*step, i*step);
	}
	getch();
	closegraph();
	return 0;
}

1.6 反弹球动画

#include <graphics.h>
#include <conio.h>
#define High 480  // 游戏画面尺寸
#define Width 640

int main()
{
   
   
	float ball_x,ball_y; // 小球的坐标
	float ball_vx,ball_vy; // 小球的速度
	float radius;  // 小球的半径
	
	initgraph(Width, High);
	ball_x = Width/2;
	ball_y = High/2;
	ball_vx = 1;
	ball_vy = 1;
	radius = 20;
	
	while (1)
	{
   
   
		// 绘制黑线、黑色填充的圆
		setcolor(BLACK);
		setfillcolor(BLACK);
		fillcircle(ball_x, ball_y, radius);
		
		// 更新小圆坐标
		ball_x = ball_x + ball_vx;
		ball_y = ball_y + ball_vy;
		
		if ((ball_x<=radius)||(ball_x>=Width-radius))
			ball_vx = -ball_vx;
		if ((ball_y<=radius)||(ball_y>=High-radius))
			ball_vy = -ball_vy;	
		
		// 绘制黄线、绿色填充的圆
		setcolor(YELLOW);
		setfillcolor(GREEN);
		fillcircle(ball_x, ball_y, radius);
		// 延时
		Sleep(3);
	}
	closegraph();
	return 0;
}

1.7 无闪烁的反弹球动画

#include <graphics.h>
#include <conio.h>
#define High 480  // 游戏画面尺寸
#define Width 640

int main()
{
   
   
	float ball_x,ball_y; // 小球的坐标
	float ball_vx,ball_vy; // 小球的速度
	float radius;  // 小球的半径
	
	initgraph
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memcpy0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值