easyx是一款使用成本极低的图形库插件,可以快速通过c语言绘制出图形 安装官网。需要的图形几乎只需要通过查阅函数就可以实现。ps:easyx只支持VS系列。
使用easyx创建项目选择控制台。
创建源文件时使用cpp为后缀,因为cpp为c++后缀。easyx内部是由c++语法实现的,但是不用担心因为easyx使用的是一系列既可由c++实现又可由c实现的函数。
平常在打印c程序时会出现一个黑色的控制台,而在使用easyx时我们创建一个可大可小的窗体以便我们调整。
可以看到确实画出来一个圆,但园的位置在最左上角。这就是easyx的坐标系统造成的啦。
我们一般意义上的直角坐标系原点位于中心,并且y轴的正方向向上。
但在easyx里有所不同的是,easyx有两种坐标分别是:逻辑坐标和物理坐标。
表面上看来物理坐标和逻辑坐标是没什么区别的实际上有着很大区别。物理坐标是用于描述窗体的坐标,不能被修改;而逻辑坐标是用于描述绘图的坐标,可以被修改。
接下来我们把逻辑坐标移到窗体中心。
这里的坐标与我们常用的坐标还是有所差异,因为y轴是向下的,所以我们需要将y轴向上翻转。
如果缩放因子为负则可实现该坐标轴的翻转。
为了使现象更明显,随机画1000个白色的点。其中使用到随机数可以看看这篇设置随机数
从传参可以看出实际上就是矩形左上顶点和右下顶点。
从传参可以看出,其实就是传一个矩形,再通过矩形内切一个椭圆(具体怎么内切由该函数实现)。
确定一个扇形需要先确定一个椭圆,再确定起始角度和终止角度就可以了。
参数与扇形是一样的,区别在于圆弧少了两条线。具体怎么缺少由arc函数实现。
这里的piont是easyx自带的一个结构体,组成如下:
例子三角形
同理,想要绘制出梯形,五边形,六边形…只需要将它们的顶点合成一个数组,再传入polygon即可。
polygon会将所有线段连接起来,例如我们想用polygon绘制字母W是办不到的。
polyline与polygon的参数是一致的,唯一的区别是polyline不会连接首尾两个端点。
这是一个简单的圆形,我们仔细观察可以发现是由白色的线条构成。我们将白色的线条称为描边,描边默认是白色的。我们怎样修改边的颜色呢?
当然仅仅有颜色是不够的,我们还需要边的样式。
这里有4个参数,但后两个我们可以默认不传参。我们来看一下style。
easyx中定义了7种不同的常量代表不同的样式(最后一种是自定义)。
下面演示虚线样式。
可以看到确实成功了但线条太细了,我们想要更粗一些。这时得用到第二个参数了。
关于端点的样式,easyx里有三种选择。
下面演示圆端点。
easyx里有三种连接样式。
下面以斜面连接为例。
填充与绘制图形的函数几乎是一样的,总是在前面加上solid。例如圆的函数是circle,那么它的填充函数就是solidcircle。
可以看到的确进行了填充,但填充的颜色是默认的白色,如果想要改变颜色则需要下面函数。
只需要在描边函数前面加上fill就可以了。例如,一个简单的圆形描边是circle函数,既使用描边又使用填充的圆就是fillcircle。
以下一个圆形的描边颜色是红色虚线,填充颜色为黄色
默认背景颜色是黑色,想要更改也很简单。就像粉刷墙面一样,setbkcolor就是让你拥有一个特定颜色的刷子。而cleardevice就相当于用这把刷子粉刷墙面。所以两个函数需要一起使用才能达到目的。
#include
#include
#define PI 3.14
int main()
{
initgraph(1024, 1024);
setbkcolor(WHITE);
cleardevice();
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 10);
setfillcolor(BLUE);
fillellipse(118, 125, 990, 931);//蓝色头部
setfillcolor(WHITE);
fillellipse(189, 271, 919, 931);//白色脸部
fillellipse(375, 170, 555, 420);
fillellipse(555, 170, 735, 420);//眼框
setfillcolor(BLACK);
solidcircle(484, 333, 25);
solidcircle(617, 333, 25);//瞳孔
setfillcolor(WHITE);
solidcircle(484, 333, 10);
solidcircle(617, 333, 10);//眼部高光
setfillcolor(RED);
fillcircle(554, 420, 35);
line(554, 460, 554, 828);//鼻子和竖线
arc(320, 510, 789, 827, PI, 2 * PI);//嘴吧
line(125, 313, 296, 410);
line(83, 444, 270, 474);
line(83, 595, 262, 527);
line(819, 414, 990, 320);
line(845, 478, 1029, 448);
line(853, 542, 1029, 660);//胡须
getchar();
closegraph();
return 0;
}
ps:以上资料来源于c语言小游戏实战。