EasyX使用介绍

EasyX使用介绍

本文介绍在Visual C++ 2010 Express中 EasyX的使用。

一直在黑窗口练习字符输出程序,是否感觉很乏味。EasyX是针对C++的图形库,可以帮助C/C++初学者快速上手图形和游戏编程。Visual C++ 2010 Express和EasyX的安装和初步使用见“Visual C++ 2010 Express和EasyX初学者入门” https://blog.csdn.net/cnds123/article/details/127801184

EasyX基础知识

EasyX使用上非常简单。

启动 Visual C++(我用的是Visual C++ 2010 Express),创建一个空的控制台项目(Win32 Console Application),然后添加一个新的代码文件(.cpp),并引用 graphics.h 头文件就可以了。

先看一个简单的例子:

#include <graphics.h>		// 引用图形库头文件
#include <conio.h>
int main()
{
	initgraph(640, 480);	// 创建绘图窗口,大小为 640x480 像素

	line(0, 100, 200, 100); //画直线,起点坐标是(0,100)终点坐标是(200,100)
	line(100, 0, 100, 200);
	circle(100, 100, 50); //画圆,圆心(100, 100),半径 50

	_getch();				// 按任意键继续
	closegraph();			// 关闭绘图窗口
	return 0;
}

效果:

EasyX 也可以在 Win32 Application 项目上使用。需要注意的是,Win32 Application 项目没有控制台,所以无法使用控制台相关的函数。

在 EasyX 中,坐标分两种:物理坐标和逻辑坐标。

物理坐标

物理坐标是描述设备的坐标体系。

坐标原点在设备的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。

坐标原点、坐标轴方向、缩放比例都不能改变。

逻辑坐标

逻辑坐标是在程序中用于绘图的坐标体系。

坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是点。

默认情况下,逻辑坐标与物理坐标是一一对应的,一个逻辑点等于一个物理像素。

在 EasyX 中,“设备”,是指绘图表面,所有的绘图函数都会绘制在该设备上。

设备分两种,一种是默认的绘图窗口,见前面的例子,另一种是 IMAGE 对象——通过SetWorkingImage 函数可以设置当前用于绘图的设备,见下面的例子。

#include <graphics.h>
#include <conio.h>
int main()
{
	// 初始化绘图窗口
	initgraph(640, 480);

	// 创建 200x200 的 img 对象
	IMAGE img(200, 200);
	
	// 设置绘图目标为 img 对象
	SetWorkingImage(&img);
	// 以下绘图操作都会绘制在 img 对象上面
	line(0, 100, 200, 100); //画直线,起点坐标是(0,100)终点坐标是(200,100)
	line(100, 0, 100, 200);
	circle(100, 100, 50); //画圆,圆心(100, 100),半径 50

	// 设置绘图目标为绘图窗口
	SetWorkingImage();
	// 将 img 对象显示在绘图窗口中
	putimage(220, 140, &img);

	// 按任意键退出
	_getch();
	closegraph();
}

效果:

EasyX 表示颜色的方法

EasyX 表示颜色的方法有多种

1. 用预定义常量表示颜色

常量

颜色

BLACK

0

BLUE

0xAA0000

GREEN

0x00AA00

绿

CYAN

0xAAAA00

RED

0x0000AA

MAGENTA

0xAA00AA

BROWN

0x0055AA

LIGHTGRAY

0xAAAAAA

浅灰

DARKGRAY

0x555555

深灰

LIGHTBLUE

0xFF5555

亮蓝

LIGHTGREEN

0x55FF55

亮绿

LIGHTCYAN

0xFFFF55

亮青

LIGHTRED

0x5555FF

亮红

LIGHTMAGENTA

0xFF55FF

亮紫

YELLOW

0x55FFFF

WHITE

0xFFFFFF

2. 用 16 进制数字表示颜色

16 进制的颜色表示规则为:0xbbggrr (bb=蓝,gg=绿,rr=红)

3. 用 RGB 宏合成颜色

4. 用 HSLtoRGB、HSVtoRGB 转换其他色彩模型到 RGB 颜色

明确了上述概念,就可使用EasyX提供的函数进行实践了。

函数说明官方文档 https://docs.easyx.cn/zh-cn/reference

窗口函数用于窗口的一些操作

closegraph(); //关闭绘图窗口

cleardevice(); //清空绘图设备

下面给出几个示例

钟表 (表针形式)程序

先给出效果图:

启动Visual C++(我用的是Visual C++ 2010 Express),创建一个空的控制台项目(Win32 Console Application),【若出现如下提示

(大意是“是否添加CLR组件”,不需要),单击“No”】

然后添加一个新的代码文件(.cpp),

源码如下:

#include <graphics.h>
#include <conio.h>
#include <math.h>
 
#define	PI	3.1415926536
 
void DrawHand(int hour, int minute, int second)
{
    double a_hour, a_min, a_sec;					// 时、分、秒针的弧度值
    int x_hour, y_hour, x_min, y_min, x_sec, y_sec;	// 时、分、秒针的末端位置
 
    // 计算时、分、秒针的弧度值
    a_sec = second * 2 * PI / 60;
    a_min = minute * 2 * PI / 60 + a_sec / 60;
    a_hour= hour * 2 * PI / 12 + a_min / 12;
 
    // 计算时、分、秒针的末端位置
    x_sec = int(120 * sin(a_sec));
    y_sec = int(120 * cos(a_sec));
    x_min = int(100 * sin(a_min));
    y_min = int(100 * cos(a_min));
    x_hour= int(70 * sin(a_hour));
    y_hour= int(70 * cos(a_hour));
 
    // 画时针
    setlinestyle(PS_SOLID, 10);
    setcolor(WHITE);
    line(320 + x_hour, 240 - y_hour, 320 - x_hour / 7, 240 + y_hour / 7);
 
    // 画分针
    setlinestyle(PS_SOLID, 6);
    setcolor(LIGHTGRAY);
    line(320 + x_min, 240 - y_min, 320 - x_min / 5, 240 + y_min / 5);
 
    // 画秒针
    setlinestyle(PS_SOLID, 2);
    setcolor(RED);
    line(320 + x_sec, 240 - y_sec, 320 - x_sec / 3, 240 + y_sec / 3);
}
 
void DrawDial()
{
    // 绘制一个简单的表盘
    circle(320, 240, 2);
    circle(320, 240, 60);
    circle(320, 240, 160);
		
    //outtextxy(296, 310, "BestAns");
	wchar_t s[] = L"BestAns";
	outtextxy(296, 310, s);
 
    // 绘制刻度
    int x, y;
    for (int i=0; i<60; i++)
    {
        x = 320 + int(145 * sin(PI * 2 * i / 60));
        y = 240 + int(145 * cos(PI * 2 * i / 60));
 
        if (i % 15 == 0)
            bar(x - 5, y - 5, x + 5, y + 5);
        else if (i % 5 == 0)
            circle(x, y, 3);
        else
            putpixel(x, y, WHITE);
    }
}
 
void main()
{
    initgraph(640, 480);		// 初始化 640 x 480 的绘图窗口
 
    DrawDial();					// 绘制表盘
 
    setwritemode(R2_XORPEN);	// 设置 XOR 绘图模式
 
    // 绘制表针
    SYSTEMTIME ti;				// 定义变量保存当前时间
    while(!kbhit())				// 按任意键退出钟表程序
    {
        GetLocalTime(&ti);		// 获取当前时间
        DrawHand(ti.wHour, ti.wMinute, ti.wSecond);	// 画表针
        Sleep(1000);			// 延时 1 秒
        DrawHand(ti.wHour, ti.wMinute, ti.wSecond);	// 擦表针(擦表针和画表针的过程是一样的)
    }
    closegraph();				// 关闭绘图窗口
}

移动的球

从左向右移动的球,先给出效果图:

源码如下:

#include <graphics.h>
int main()
{
    initgraph(640,480);//绘图环境640*480
    setcolor(WHITE);//绘图前景色为白色
    setfillstyle(BS_SOLID);//填充样式为固实填充
    setfillcolor(RED);//填充颜色为蓝色
    BeginBatchDraw();//开始批量绘图
    for(int i=50; i<600; i++)
    {
        circle(i,100,40);//画圆
        floodfill(i, 100, WHITE);//填充
        FlushBatchDraw();//执行未完成的绘制任务
        Sleep(10);//挂起50毫秒
        cleardevice();//用背景色清空屏幕
    }
    EndBatchDraw();//结束批量绘制
    closegraph();//关闭图形环境
    return 0;
}

 OK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习&实践爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值