(四)EGE开始第一个程序

EGE专栏:EGE专栏

目录

  • EGE图形库注意事项
  • 开始使用
    • 1. 新建工程
    • 2. 开始创建第一个EGE程序
      • 控制台的输入输出
      • EGE的输入

接下来的内容,建议先将 (三)EGE基础教程上篇 中官网的新手入门教程中的程序每个都看一遍,并编译运行后再来看下面的教程,因为下面内容讲得比较详细,是分内容来讲,不适合刚入门时的节奏。刚入门就应该先大致地了解一下EGE图形库的使用。
点击这里:新手入门 https://xege.org/beginner-lesson-2.html
(四)EGE开始第一个程序_第1张图片

EGE图形库注意事项

以下来自 ege.h

FileName: ege.h

  • 在 VC 下模拟 Borland BGI 绘图库,实现简单的绘图之余,扩展了较复杂的绘图能力
  • 包含并使用本库时,不要包含conio.h头文件,这些头文件不应共存,否则可能会编译错误,或者getch被conio.h内的覆盖(由包含次序决定)。
  • 请注意,如需本库和 conio.h 共存,请使用多文件分开包含的模式使用, 即不能一个cpp文件同时包含本库和 conio.h 头文件,但可以分开包含。从头文件的预处理命令可以看到,如果在graphics.h 头文件(或者ege.h 头文件)之前包含了 conio.h, 将会报错。如下所示:
#if defined(_INC_CONIO) || defined(_CONIO_H_)
#error can not include "conio.h" before "graphics.h"
#endif
  • 使用本库时,必须用C++编译器编译, 使用C语言编译器将会报错
    虽然说是使用C++编译器,但是EGE图形库的使用仅仅需要掌握一点点C++的知识,学会了C语言后就很容易使用。
#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif
  • VS2017 是默认不显示控制台的,如果需要显示控制台窗口,请在包含本文件的前面加一行
 #define SHOW_CONSOLE
  • CodeBlocks 和Devc++是默认显示控制台的,CodeBlocks想要关闭控制台需要在项目属性那里将项目类型设置为GUI程序, 而不是控制台程序。

  • 调用 Sleep() 这个API时,或者调用 delay(),实际均会转化为调用 delay_ms(),如必需调用API请使用 api_sleep()

  • delay_ms() 能自行判断有没有更新的必要,连续多次但不大量的调用并不会产生帧率的影响

  • 调用 delay_ms() , delay_fps(), getch() , getkey() , getmouse() 时,窗口内容可能会更新,这些函数相当于内置了delay_ms(0)

  • 如果你只需要更新窗口,而不想等待,可以用 delay_ms(0) 。注意 delay 只延时而不更新窗口

  • 合理地使用 delay_ms() /delay_fps() 函数,可以减少你的程序占用的CPU,否则一个都没有调用同时也没有 getch/getmouse 的话,程序将占满一个CPU的时间

开始使用

  • 使用VS2017来讲解,因为VS2017相对而言出问题较少。

1. 新建工程

  • 如果不清楚VS2017如何新建工程的,查看这里 (http://c.biancheng.net/view/457.html)
  • EGE是C++库,需要用C++编译器编译,所以源文件需要以.cpp为后缀,而不是C语言的.c后缀。
    从 ege.h 头文件 可以看到,如果你不是用C++编译的话,将会报错 "You must use C++ compiler, or you need filename with ‘.cpp’ suffix"
#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif

2. 开始创建第一个EGE程序

使用的是VS2017, 新建工程后,将下面的代码复制粘贴到C++源文件中

#include 

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;
}

如图所示
(四)EGE开始第一个程序_第2张图片
接下来,

  • 先把解决方案配置改成Debug模式,不然Release 模式下开头总会出现EGE 动画
    或者把 initgraph(640, 480) 改成 initgraph(640, 480, 0) 也能去掉开场动画
    (四)EGE开始第一个程序_第3张图片
  • 编译(快捷键 Ctrl + F7), 可以点击工具栏 生成 -> 编译
  • 运行(快捷键 Ctrl + F5), 可以点击工具栏 调试 -> 开始执行(不调试)

运行结果,如图,白色背景上画了一个红色的圆圈
(四)EGE开始第一个程序_第4张图片

  • 按下任意键,图形窗口关闭,程序结束

分析一下程序

  • 第一行是包含一个头文件,即 graphics.h, 这是EGE图形库里的头文件,并不是编译器里自带的,安装时有放入库路径中。
#include 

   这个头文件我们在前面配置时就已经把它放在了VS2017 的 include 目录里了,所以用<>将其包含就行了,也可以使用 #include “graphics.h”,但是因为这个头文件并不是放在我们的项目文件中,还是用 #include 比较好。

扩展:
  graphics.h 的内容只有下面几句,可以看到,包含了 ege.h 头文件,并且导入了命名空间 egeege.h 则是包含的大量的定义和声明。

//graphics.h
#ifndef _GRAPHICS_H_
#define _GRAPHICS_H_

#ifndef __cplusplus
#error You must use C++ compiler, or you need filename with '.cpp' suffix
#endif

#include "ege.h"
using namespace ege;

#endif
  • 接下来main()函数中,第一句是初始化图形窗口,即创建一个宽为640,高位480的窗口。
	initgraph(640, 480);

  函数声明: (这里为什么有三个参数? 这是C++的默认参数,如果后面的参数没传入实参,那么就会给一个默认值

void initgraph( int Width, int Height, int Flag = INIT_DEFAUL);
  • 下面两句分别是设置绘画颜色窗口背景颜色
	setcolor(EGERGB(0xFF, 0x0, 0x0));	设置绘画颜色
	setbkcolor(WHITE);					设置窗口背景颜色

里面的EGERGB是什么?
  EGERGB 是个宏定义,将三个参数转成 RGB颜色值
  EGERGB(0xFF, 0x0, 0x0) 即为 0XFF0000(红色)。三个参数都是0~255之间,用十六进制表示则是0x0 ~ 0xFF。
  setcolor(EGERGB(0xFF, 0x0, 0x0))setcolor(0xFF0000) 等价。(颜色的表示后面会说明)
  WHITE 是EGE定义的一个枚举值,即白色,值为 EGERGB(0xFC, 0xFC, 0xFC)
  类似于WHITEEGE 定义有一些常用的颜色枚举,可以直接用:

	// 颜色
enum COLORS {
	BLACK           = 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),		白色
};

可以试试看改变颜色值,都有什么变化, 比如,把设置背景颜色
setbkcolor(WHITE) 改成 setbkcolor(0xFCFC54), 或者 setbkcolor(YELLOW) 。这时背景就变成了黄色。
(四)EGE开始第一个程序_第5张图片

  • 接下来是圆的绘图, 以(320, 240)为圆心,绘制一个半径为100的圆
	circle(320, 240, 100);				//在坐标(320, 240)处画个半径100的圆

  函数声明: (最后面的那个pimg是什么?, 表示绘制到哪个图像上,如果没有传入这个参数,那就是NULL, 代表在绘制到窗口)

void circle(int x, int y, int radius, PIMAGE pimg = NULL);

  屏幕坐标系是这样子的,原点在左上角,往右是x正方向,往下是y正方向。因为窗口大小为640 x 480, 所以是(320, 240)是在窗口中心,所以圆在正中间。
(四)EGE开始第一个程序_第6张图片

  • 往下一句是 getch() ,是暂停,等待用户按键,不然绘图后将执行 closegrah(), 直接关闭图形窗口,窗口一闪而过。可以去掉getch() 试试。
  • closegraph() 即关闭图形窗口,释放资源。
  • return 0 ; 程序结束,返回。

VS2017 默认是没有控制台弹出的,如果你想显示控制台窗口,可以在 #include 之前定义一个宏 #define SHOW_CONSOLE (console, 即控制台)

#define SHOW_CONSOLE
#include 

CodeBlocks 默认是有控制台弹出的,可以参考 (二)EGE安装与配置中的Codeb部分如何关闭控制台

  • 再编译运行一下, 可以看到出现了两个窗口,前面是图形窗口,后面则是控制台,和平常的控制台没什么不同,一样输入输出。
    (四)EGE开始第一个程序_第7张图片

控制台的输入输出

  • 现在试试控制台的输入输出:

代码如下:
即通过控制台输入圆的半径,从而改变圆的大小

#define SHOW_CONSOLE
#include 
#include 

int main()
{
	initgraph(640, 480, 0);

	setcolor(EGERGB(0xFF, 0x0, 0x0));
	setbkcolor(WHITE);
	
	//控制台交互,通过输入半径值控制圆的大小
	printf("请输入圆的半径(1~200)之间):");
	int radius = 100;
	scanf("%d", &radius);

	//半径范围限制
	if (radius < 1)
		radius = 1;
	else if (radius > 200)
		radius = 200;
	
	//绘制半径为radius的圆
	circle(320, 240, radius);

	getch();

	closegraph();
	return 0;
}

(四)EGE开始第一个程序_第8张图片
printf 是输出到控制台上的,运行时需要两个窗口切换,不方便也不美观。

所以EGE程序大体为

  • 包含 graphics.h 头文件, #include
  • 初始化图形窗口, initgraph(width, height, mode)
  • 绘图,交互
  • 关闭图形窗口, closegraph()

EGE的输入

  • EGE有用于输入的输入框,不需要借助控制台。如果需要输入的话请看 的 EGE的输入 部分




EGE专栏:EGE专栏

你可能感兴趣的:(EGE,ege,基础教程)