C语言EGE绘制爱心


昨天讲到了带图形库的VC6的安装,但是我们只编写了一个黑白的控制台窗口的hello world,并没有使用图形库。今天我们就来用这图形库画一个爱心


一、创建第一个图形窗口

首先,我们同样要按照昨天的方法创建一个项目,这里我们也就不重复讲了。

接着我们新建文件时需要注意,我们如果要使用这EGE图形库的话,需要文件后缀为.cpp,因为EGE图形库的一些处理涉及了C++语言,虽然 我们依旧使用C语言来编写程序




编写代码:

#include <graphics.h>

 

int main(){

initgraph(640, 480);

setbkcolor(BLUE);

getch();

closegraph();

return 0;

}

我们先引用EGE图形库文件,这样我们才可以使用这个图形库。

接着在主程序里,我们初始化(init)一个图形窗口(graph),并在初始化时,提供窗口长和窗口宽这2个参数,告诉EGE我们需要创建的图形窗口的长宽。

然后我们设置(set)图形窗口的背景(bk)色(color)为blue(蓝色)。

我们需要防止窗口像昨天那样一闪而过,所以我们通过获取(get)一个键盘输入(ch)来暂停程序,等到键盘输入任意值后,程序才会继续。

在键盘有输入被获取到之后,我们关闭(close)图形窗口(graph)

然后返回0给调试程序或计算机系统,表示程序正常结束(具体返回到哪了我们可以先不管,这比较复杂,虽然你不返回有时也不会出错,但不返回会影响(前提:如果有)计算机系统或程序与此程序关联的部分,照成错误判断)。




按F5运行程序(你也可以在程序菜单中找到组建,选择开始调试GO)这里按F5实际包含了几个过程,主要过程有组建(F7)、编译(Ctrl+F7)、调试(F5),这些过程VC6都会在你按下F5后自动帮你完成,你不需要分别单独操作。




至此,我们的第一个图形窗口就创建完成了。


二、色彩的计算

在计算机中,颜色是使用红绿蓝来表示的,分别的取值范围是十进制的 0到255,实际应用中,我们一般使用16进制的00到FF表示。

在网络中,如果我们要纯红色,我们通常使用#FF0000表示,两个十六进制的F就表示的是红色最大值255,而后面4个0分别是绿色的最小值00(没有绿色的意思),和蓝色的最小值00。

在EGE图形库中,我们表示颜色需要函数EGERGB来定义,我们需要分别告诉EGERGB我们需要的红(R)、绿(G)、蓝色(B)的值,表示 纯红色EGERGB(255, 0, 0),当然我们一般不使用10进制表示,而用16进制表示, 16进制需要在每个16进制前使用0x前缀标明,纯红色EGERGB(0xFF, 0x00, 0x00)。当然绿色、蓝色同理。

我们在代码中用计算的色彩值来替换之前设置背景色用的BLUE

#include <graphics.h>

 

int main(){

initgraph(640, 480);


/*设置背景颜色为绿色*/

setbkcolor( EGERGB(0x00, 0xFF, 0x00));


getch();

closegraph();

return 0;

}

运行结果:




那么让我们混合一下颜色,如果红加绿为什么色呢?我们红色和绿色都设置为最大值试试:

EGERGB(0xFF, 0xFF, 0x00)




没错,是黄色。

当然我们只是通过了颜色最大值混合,你也可以取其它值混合,只要你取的每个颜色值在十进制的0到255之间,也就是十六进制的00到FF之间,即可。


三、 我爱你! 绘制爱心!

其实画爱心有多种方法,大家可以查询EGE相关函数文档,考虑到很多朋友对C语言数据类型和程序结构都不太了解,今天我们就使用一个简单 的方式画一个大致的爱心吧,在给大家讲了C语言数据类型程序结构后,我们再用其它方法来实现更完美的爱心(虽然到时我可能会已更好的程序来讲,不过到那时大家自己尝试应该会很容易了)。


我们先除了要设置背景颜色外,还要设置(set)画图的边线颜色(color)和画图的 填充(fill)颜色(color),这里我把边线和填充都设置为的#FF3366。

然后我们来画爱心的左侧圆弧,把圆弧圆心的X坐标、圆弧 圆心的Y坐标、圆弧的 开始角度(0)、圆弧的 结束角度(180)圆弧的半径(82)告诉 pieslice函数即可。

接着我们画爱心的右侧圆弧,同样告诉XY坐标和开始结束角度以及半径。这里我们把圆弧半径设置为82多出来的2主要是为了让圆弧在中间部分有一点重叠,避免不好看。

然后我们定义 爱心下部三角形的3个顶点到一个int型数组中。因为我们的 坐标都是整数所以我们数组的变量类型整数类型(int),当然以后也可能用到C语言其它的变量类型。因为我们要存放多个数据,所以我们要使用C语言的数组(可以理解为数据的组合)。

最后,我们把这定义好的三角形画出来,这要用到EGE画填充(fill)多边形(poly)函数fillpoly,我们告诉这个函数多边形的 顶点个数,并把三角形的 顶点数组给这个函数即可。

代码如下:

setbkcolor(EGERGB(0xFF, 0xFF, 0x00));

setcolor(EGERGB(0xFF, 0x33, 0x66));

setfillcolor(EGERGB(0xFF, 0x33, 0x66));

pieslice(240, 160, 0, 180, 82);

pieslice(400, 160, 0, 180, 82);

int triangle[] = {

158, 160,

320, 400,

482, 160,

};

fillpoly(3, triangle);




这里用到了C语言的int整数类型和C语言的数组声明与赋值(定义数组并给数组设置参数)

int的数据类型是整数类型(整型),它在不同设备上占用的 存储大小是2或4bytes(1bytes是8bit,也就是8个0到8个1),所以int整数类型值范围根据设备情况是 -32768到32767(-2的15次方到2的15次方-1,15次方是因为:16个0或1的存储形式中,有一个符号位表示正负),或者 -2147483648到2147483647(-2的31次方到2的31次方-1)。这个范围的整数通常已经足够我们编程使用了(虽然还有更大的取值范围的类型,但范围越大越占存储空间)。有时电视中报道某人用啥软件一夜欠费21474836.47元,实际就是那软件开发人员编写时的漏洞照成的软件显示了int类型最大值。

数组的声明并直接赋值是这样的:

数组声明的一般形式为“数组的数据类型 编写者自定的数组名[数组中参数个数]”比如“ int i[10]”就声明了一个名为i有10个参数的整数类型数组。如果我们要为数组设置参数值(这里仅说在声明时赋值的情况),我们可以以这样的形式“ 数组的数据类型 编写者自定的数组名[数组中参数个数可省略] = {每个参数值用英文逗号隔开}”就如同上面代码的三角形顶点坐标的数组triangle那样。

这里大家主要知道int类型即可,数组我们以后会具体讲解。这里要注意的是,C语言的任何参数名(变量,包括数组和函数),在使用前都需要先声明


让我们运行试试:




好的,至此我们的爱心就绘制完成了。

我们总结一下今天绘制爱心用到了什么吧:

1、引用EGE图形库

2、C程序开始的主函数main

3、EGE初始化图形窗口initgraph(窗口长, 窗口宽)

4、EGE定义颜色EGERGB(红色的值, 绿色的值, 蓝色的值)

5、EGE设置背景颜色setbkcolor(定义的颜色值)

6、EGE设置边线颜色setcolor(定义的颜色值)

7、EGE设置填充颜色setfillcolor(定义的颜色值)

8、EGE画填充圆扇形(爱心的圆弧) pieslice(圆心的X坐标, 圆心的Y坐标, 圆弧的开始角度, 圆弧的结束角度, 圆弧的半径)

9、C语言整形int,用于定义数组的数据类型

10、C数组的声明并赋值,用于定义三角形的顶点

11、EGE画多边形fillpoly(多边形的顶点个数, 多边形的顶点数组)

12、等待用户按键getch()

13、EGE关闭图形界面closegraph()