上一篇: (一)ege基本认识和安装使用教程
博文是用dev-c++写的(←温馨提示
EGE图形库注意事项
- 本库不支持dev-c++编译器4.8.1以上版本,如需要,请自行下载其他版本
- 本库必须使用c++编译器编译,使用C会报错,还是先掌握一些C++知识再来看吧qwq
/*
* 使用本库,必须用C++编译
/*
- 包含并使用本库时,不要包含conio.h头文件,如需共存,请使用多文件分开包含的模式使用
#if defined(_INC_CONIO) || defined(_CONIO_H_)
#error can not include "conio.h" before "graphics.h"
#endif
- 如果需要显示控制台窗口,请在包含本文件的前面加一行#define SHOW_CONSOLE
#define SHOW_CONSOLE
- 调用Sleep这个API时,或者调用delay,实际均会转化为调用delay_ms,如必需调用API请使用 api_sleep
- delay_ms(0) 能自行判断有没有更新的必要,连续多次但不大量的调用并不会产生帧率的影响
- 调用delay_ms, delay_fps, getch, getkey, getmouse 时,窗口内容可能会更新,这些函数相当于内置了 delay_ms(0)
- 如果你只需要更新窗口,而不想等待,可以用delay_ms(0)。注意delay只延时而不更新窗口
- (重点) 合理地使用delay_ms/delay_fps函数,可以减少你的程序占用的CPU,否则一个都没有调用同时也没有getch/getmouse的话,程序将占满一个CPU的时间
EGE的第一个程序
我们先创建一个项目
这里我们选择一个空白的项目,不如命名为EGE吧
我们选择一个路径,保存一下
接着开始动起我们的双手,复制粘贴到源文件中
#include <graphics.h>
int main()
{
initgraph(640, 480); //初始化窗口,大小为640 x 480
setcolor(EGERGB(0xFF, 0x0, 0x0)); //设置绘画颜色为红色
setbkcolor(WHITE); //设置背景颜色为白色
circle(320, 240, 100); //在坐标(320, 240)处画个半径100的圆
getch(); //暂停,等待按键输入
closegraph(); //关闭图形窗口,
return 0;
}
接下来,把解决方案调成Debug(调试),Release模式下会出现EGE动画,去掉多好!
按下我们的F11键,给自己程序取个名字之后,直接编译运行
如果错了就看看这篇文章(别告诉我复制错了)
(一)ege基本认识和安装使用教程
编译成功后,会出现一个小圆
按下任意键后,程序就结束了
这个程序也就这么几行,分析一下:
- 第一行包含一个头文件
graphics.h
,这是EGE图形库里的头文件,不是编译器里自带的
#include<graphics.h>
- 接下来的主函数中,第一句是创建(初始化)窗口,初始化一个宽640,搞480的画布
initgraph(640,480);
- 下面两行则是一个用来设置笔的颜色,一个用来设置背景色
setcolor(EGERGB(0xFF, 0x0, 0x0)); //设置笔色
setbkcolor(WHITE); //设置背景色
PS:扩展一下,EGERGB是个宏定义,里面的三个参数转换成颜色值,通过这三个参数,可以得到不同的颜色。
setcolor是设置笔的颜色
setbkcolor全称为set background color,就是设置背景色,这里的参数不再是EGERGB,而是WHITE(也就是白色的意思)
为什么不用EGERGB?
WHITE其实就是就是EGERGB(0xFC, 0xFC, 0xFC)
,所以不难发现,WHITE用来代替EGERGB,更加的直观
而类似于WHITE这样的定义还有很多,比如:
// 颜色
enum COLORS {
BLACK = EGERGB(0, 0, 0), //黑色
BLUE = EGERGB(0, 0, 0xA8), //蓝色
GREEN = EGERGB(0, 0xA8, 0), //绿色
CYAN = EGERGB(0, 0xA8, 0xA8), //青色
RED = EGERGB(0xA8, 0, 0), //红色
MAGENTA = EGERGB(0xA8, 0, 0xA8), //品红色
BROWN = EGERGB(0xA8, 0xA8, 0), //棕色
LIGHTGRAY = EGERGB(0xA8, 0xA8, 0xA8), //浅灰
DARKGRAY = EGERGB(0x54, 0x54, 0x54), //暗灰
LIGHTBLUE = EGERGB(0x54, 0x54, 0xFC), //浅蓝
LIGHTGREEN = EGERGB(0x54, 0xFC, 0x54), //浅绿
LIGHTCYAN = EGERGB(0x54, 0xFC, 0xFC), //浅青
LIGHTRED = EGERGB(0xFC, 0x54, 0x54), //浅红
LIGHTMAGENTA = EGERGB(0xFC, 0x54, 0xFC), //浅品红
YELLOW = EGERGB(0xFC, 0xFC, 0x54), //黄色
WHITE = EGERGB(0xFC, 0xFC, 0xFC), //白色
};
所以这些像WHITE的定义更加直观,更加方便
- 接下来是画圆,以(320,240)为中心画一个半径为100的圆
circle(320,240,100); //画圆
xy为轴坐标,radius是半径的意思
- 下一行为getch()这个在graphics里面有定义,在conio里也有定义,它的作用是等待用户按键,一旦按键,执行下一行
也有时候我们用getch()来给某个字符赋值:
char ch;
ch=getch();
我们按下一个a,那么ch的值就变成了a
我们按下一个P,那么ch的值就变成了P
我们不赋值,那么按下任何键后任何的值都不会有任何的变化(屁话!)
- 接着就是最后一行**closegraph()**既关闭窗口
- return 0返回0,也就是程序结束,呵呵呵呵
所以我们可以总结一下EGE画图的流程
关于控制台的使用
dev-c++运行之后会有一个控制台,这就很nice
控制台不是程序窗口,程序窗口不是控制台,不要张三李四
控制台我们使用printf、cout等
那么:
那么有人问:控制台输入的变量,怎么在EGE窗口中使用?
那么有人问:EGE窗口怎么输出文字?
控制台输入参数
在控制台中输入圆的半径,从而改变圆的大小
#include<graphics.h>
#include<stdio.h>
using namespace std;
int main()
{
initgraph(640,480);
setbkcolor(WHITE);
setcolor(RED);
int a;
printf("请输入圆的半径:");
scanf("%d",&a);
circle(320,240,a);
getch();
closegraph();
return 0;
}
在窗口上输出文字
我们在控制台上输出文字用printf
那么我们在窗口上输出文字用xyprintf
函数定义如下:
void EGEAPI xyprintf(int x, int y, LPCWSTR fmt, ...); // 在指定位置输出格式化字符串,指定绘图目标调用settarget
传四个参数,前两个参数传的是输出位置的坐标,后面三个参数跟printf差不多
示例:
#include<graphics.h>
int main()
{
xyprintf(20,20,"%s\n","今天心情怎么样");
return 0;
}
结束
撒花!撒花!撒花!