C/C++语言简易图形库EasyX库和EGE图形库

有些学校直接拿 VC 来讲 C 语言,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。可惜在 VC 里面只能做一些文字性的练习题,想画条直线或一个圆都很难,例如需要注册窗口类、建消息循环等等,初学者会受严重打击的。初学编程想要绘图就得用 TC,很是无奈。有些学校以 Turbo C 为环境学习 C 语言,只是 Turbo C 实在太老了,复制粘贴都很不方便。

EasyX

EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。
官网下载
https://easyx.cn/
在这里插入图片描述

安装
1.双击下载的 EasyX 安装包,在“Windows 已保护你的电脑”提示窗中,点“更多信息”,再点“仍要运行”,这时,可以看到 EasyX 的安装程序。
2.EasyX 安装程序会检测到当前操作系统中安装的 Visual Studio 版本。在对应的 VS 版本右侧点击“安装”即可。
安装程序为 7z 自解压缩包,不会在系统注册表中留下任何信息,请放心使用。
卸载时,同样需要执行安装程序,并点击对应的 VS 版本右侧的“卸载”即可。
超轻的发布过程
EasyX 采用静态编译,不依赖任何 dll,同传统程序的发布方式没有区别,程序不会因为引入 EasyX 而增添任何发布负担。
静态链接的 EasyX,会使编译后的 exe 体积增加 70KB 左右。对于绝大多数应用而言,增加的体积是可以忽略的。
若将 Visual C++ 的运行时库改为静态链接模式,编译后的 exe 可以单文件运行。
函数说明
EasyX 函数分为以下几类:
绘图设备相关函数
颜色模型
颜色及样式设置相关函数
绘制图形相关函数
文字输出相关函数
图像处理相关函数
消息处理相关函数
其它函数
graphics.h 暂留函数
示例程序
字符阵

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <time.h>
#include <conio.h>int main()
{// 设置随机种子srand((unsigned) time(NULL));// 初始化图形模式initgraph(640, 480);int  x, y;char c;settextstyle(16, 8, _T("Courier"));	// 设置字体// 设置颜色settextcolor(GREEN);setlinecolor(BLACK);for (int i = 0; i <= 479; i++){// 在随机位置显示三个随机字母for (int j = 0; j < 3; j++){x = (rand() % 80) * 8;y = (rand() % 20) * 24;c = (rand() % 26) + 65;outtextxy(x, y, c);}// 画线擦掉一个像素行line(0, i, 639, i);Sleep(10);					// 延时if (i >= 479)	i = -1;if (_kbhit())	break;		// 按任意键退出}// 关闭图形模式closegraph();return 0;
}

星空

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <time.h>
#include <conio.h>#define MAXSTAR 200	// 星星总数struct STAR
{double	x;int		y;double	step;int		color;
};STAR star[MAXSTAR];// 初始化星星
void InitStar(int i)
{star[i].x = 0;star[i].y = rand() % 480;star[i].step = (rand() % 5000) / 1000.0 + 1;star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	// 速度越快,颜色越亮star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}// 移动星星
void MoveStar(int i)
{// 擦掉原来的星星putpixel((int)star[i].x, star[i].y, 0);// 计算新位置star[i].x += star[i].step;if (star[i].x > 640)	InitStar(i);// 画新星星putpixel((int)star[i].x, star[i].y, star[i].color);
}// 主函数
int main()
{srand((unsigned)time(NULL));	// 随机种子initgraph(640, 480);			// 创建绘图窗口// 初始化所有星星for(int i = 0; i < MAXSTAR; i++){InitStar(i);star[i].x = rand() % 640;}// 绘制星空,按任意键退出while(!_kbhit()){for(int i = 0; i < MAXSTAR; i++)MoveStar(i);Sleep(20);}closegraph();					// 关闭绘图窗口return 0;
}

鼠标操作


// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>int main()
{// 初始化图形窗口initgraph(640, 480);ExMessage m;		// 定义消息变量while(true){// 获取一条鼠标或按键消息m = getmessage(EX_MOUSE | EX_KEY);switch(m.message){case WM_MOUSEMOVE:// 鼠标移动的时候画红色的小点putpixel(m.x, m.y, RED);break;case WM_LBUTTONDOWN:// 如果点左键的同时按下了 Ctrl 键if (m.ctrl)// 画一个大方块rectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10);else// 画一个小方块rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);break;case WM_KEYDOWN:if (m.vkcode == VK_ESCAPE)return 0;	// 按 ESC 键退出程序}}// 关闭图形窗口closegraph();return 0;
}

彩虹

// 编译环境:Visual C++ 6.0~2022,EasyX_2023大暑版
// https://easyx.cn
//
#include <graphics.h>
#include <conio.h>int main()
{// 创建绘图窗口initgraph(640, 480);// 画渐变的天空(通过亮度逐渐增加)float H = 190;		// 色相float S = 1;		// 饱和度float L = 0.7f;		// 亮度for(int y = 0; y < 480; y++){L += 0.0005f;setlinecolor( HSLtoRGB(H, S, L) );line(0, y, 639, y);}// 画彩虹(通过色相逐渐增加)H = 0;S = 1;L = 0.5f;setlinestyle(PS_SOLID, 2);		// 设置线宽为 2for(int r = 400; r > 344; r--){H += 5;setlinecolor( HSLtoRGB(H, S, L) );circle(500, 480, r);}// 按任意键退出_getch();closegraph();return 0;
}

Easy Graphics Engine

EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库,它的目标也是为了替代TC的BGI库而存在。

它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且接口意义直观,即使是完全没有接触过图形编程的,也能迅速学会基本的绘图。

目前,EGE图形库已经完美支持VC6, VC2008, VC2010, VC2012, VC2013, VC2015, VC2017, VC2019, C-Free, DevCpp, Code::Blocks, wxDev, Eclipse for C/C++等IDE,即支持使用MSVC和MinGW为编译环境的IDE。如果你需要在VC下使用graphics.h,那么ege将会是很好的替代品。

官网
https://xege.org/
在这里插入图片描述
安装
①指定编译器的头文件搜索路径(或放置头文件到软件安装目录的include文件夹内)
②指定编译器的库文件搜索路径(或放置库文件到到软件安装目录的lib文件夹内)
③在开发环境中配置链接参数,链接相关的库(Visual Studio不需要)

示例代码
测试程序

#include <graphics.h>					//包含EGE的头文件int main()
{initgraph(640, 480);				//初始化图形界面setcolor(EGERGB(0xFF, 0x0, 0x0));	//设置绘画颜色为红色setbkcolor(WHITE);					//设置背景颜色为白色circle(320, 240, 100);				//画圆getch();							//暂停,等待键盘按键closegraph();						//关闭图形界面return 0;
}

使用鼠标绘制直线

#define SHOW_CONSOLE  //显示控制台窗口#include <graphics.h>
#include <cstdio>int main()
{initgraph(640, 480);bool isDown = false;int startX, startY;int lastX, lastY;mouse_msg msg;int colorIndex = 0;for(; is_run(); ){msg = getmouse();switch (msg.msg){case mouse_msg_down:startX = msg.x;startY = msg.y;lastX = msg.x;lastY = msg.y;printf("mouse down: %d, %d\n", msg.x, msg.y);isDown = true;break;case mouse_msg_up://这里并没有什么卵用printf("mouse up: %d, %d\n", msg.x, msg.y);isDown = false;break;case mouse_msg_move:if(isDown){do{color_t color = hsv2rgb(colorIndex++ % 360, 1, 1); //使用hsv颜色轮换setcolor(color);line(startX, startY, msg.x, msg.y); //绘制当前点和按下的点line(lastX, lastY, msg.x, msg.y); //绘制当前点和上一个点lastX = msg.x;lastY = msg.y;printf("mouse moved to: %d, %d\n", msg.x, msg.y);msg = getmouse();}while(mousemsg() && msg.is_move());if(msg.is_up())isDown = false;}break;case mouse_msg_wheel:printf("mousewheel: %d\n", msg.wheel);break;default:printf("呵呵\n");break;}}closegraph();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/122716.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue + Element UI 前端篇(七):功能组件封装

组件封装 为了避免组件代码的臃肿&#xff0c;这里对主要的功能部件进行封装&#xff0c;保证代码的模块化和简洁度。 组件结构 组件封装重构后&#xff0c;试图组件结构如下图所示 代码一览 Home组件被简化&#xff0c;包含导航、头部和主内容三个组件。 Home.vue <te…

2023年数维杯数学建模A题河流-地下水系统水体污染研求解全过程文档及程序

2023年数维杯数学建模 A题 河流-地下水系统水体污染研 原题再现&#xff1a; 河流对地下水有着直接地影响&#xff0c;当河流补给地下水时&#xff0c;河流一旦被污染&#xff0c;容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染&#xff0c;这将严重影响工…

Python测试框架 Pytest —— mock使用(pytest-mock)

pytest-mock 安装&#xff1a;pip install pytest-mock 这里的mock和unittest的mock基本上都是一样的&#xff0c;唯一的区别在于pytest.mock需要导入mock对象的详细路径。 # weateher_r.py class Mock_weather():def weather(self):天气接口passdef weather_result(self):模…

异常-java

目录 一、异常的概念和体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 二、异常的处理 2.1 防御式编程 2.2 异常抛出 2.3 异常捕获 2.4 异常处理流程 三、自定义异常类 一、异常的概念和体系结构 1.1 异常的概念 程序员在开发过程中&#xff0c;想要将代码写得…

《代码随想录》刷题笔记——链表篇【java实现】

链表节点定义 public class ListNode {// 结点的值int val;// 下一个结点ListNode next;// 节点的构造函数(无参)public ListNode() {}// 节点的构造函数(有一个参数)public ListNode(int val) {this.val val;}// 节点的构造函数(有两个参数)public ListNode(int val, ListNo…

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】

Go实现LogCollect&#xff1a;海量日志收集系统【上篇——LogAgent实现】 下篇&#xff1a;Go实现LogCollect&#xff1a;海量日志收集系统【下篇——开发LogTransfer】 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂…

虚拟机扩容

系统环境centos8&#xff0c;分两步&#xff0c;第一步先在vmware扩容&#xff0c;第二部在虚拟机内部扩容 1.vmware分配磁盘空间 2.虚拟机内部扩容 查看当前磁盘信息&#xff0c;这个是扩容之前的&#xff0c;扩容完成才会显示新的 df -h查看系统分区信息 fdisk -l查看目录…

javaee spring aop 注解实现

切面类 package com.test.advice;import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*;//切面类 Aspect public class MyAdvice {//定义切点表达式Pointcut("execution(* com.test.service.impl.*.add(..))")public void pc(){}//B…

Git管理

Git管理 ①对于项目目录中有.git的&#xff0c;可以在idea里面更改远程提交地址 Git->>Manage Remotes 中修改远程提交地址 ②对于没有.git目录的项目 在项目的根目录下进入cmd&#xff0c;使用下面的语句初始化.git目录 ##初始化 git init

Leetcode 1486.数组异或操作

给你两个整数&#xff0c;n 和 start 。 数组 nums 定义为&#xff1a;nums[i] start 2*i&#xff08;下标从 0 开始&#xff09;且 n nums.length 。 请返回 nums 中所有元素按位异或&#xff08;XOR&#xff09;后得到的结果。 示例 1&#xff1a; 输入&#xff1a;n 5, …

springcloud-Eureka

1.Eureka注册中心 1.1 简介与依赖导入 1.2 服务注册与发现 启动eureka模块 访问Eureka 将user-service,book-service,borrow-service作为eureka的客户端&#xff0c;先导包。三个导入方式一样。 配置文件&#xff0c;三个模块下都一样配置 然后分别启动三个模块 发现注册…

MySQL性能分析工具的使用

1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1f;这里把思考的流程整理成下面这张图。 整个流程划分成了 观察&#xff08; Show status &#xff09; 和 行动&#xff08; Action &#xff09; 两个部分。字母 S 的部分…

2023年09月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年09月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

JMeter(三十九):selenium怪异的UI自动化测试组合

文章目录 一、背景二、JMeter+selenium使用过程三、总结一、背景 题主多年前在某社区看到有人使用jmeter+selenium做UI自动化测试的时候,感觉很是诧异、怪异,为啥?众所周知在python/java+selenium+testng/pytest这样的组合框架下,为啥要选择jmeter这个东西[本身定位是接口测…

C# 子类如何访问子类的方法(同一父类)

在继承关系中&#xff0c;子类可以通过创建另一个子类的对象来访问其方法。下面是一个示例&#xff0c;展示了子类如何访问另一个子类的方法&#xff1a; public class Animal {public virtual void Speak(){Console.WriteLine("我是动物。");} }public class Cat :…

liunx下ubuntu基础知识学习记录

使用乌班图 命令安装使用安装网络相关工具安装dstat抓包工具需要在Ubuntu内安装openssh-server gcc安装vim安装hello word输出1. 首先安装gcc 安装这个就可以把gcc g一起安装2. 安装VIM3.编译运行代码 解决ubuntu与主机不能粘贴复制 命令安装使用 安装网络相关工具 使用ifconf…

C语言系统化精讲(一):C 语言开发环境搭建

文章目录 一、Windows 开发环境搭建1.1 安装 mingw 编译器1.2 下载并安装 CLion1.3 启动 CLion 二、Linux 开发环境搭建&#xff08;建议使用&#xff09;2.1 VMware Workstation Pro软件简介及安装2.2 安装 Ubuntu 系统2.2.1 Ubuntu 下载2.2.2 安装 Ubuntu2.2.3 安装共享文件夹…

智能手机收入和出货量双双下滑,造车成本不断增长,小米集团仍面临风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 华尔街分析师对小米集团第二季度的业绩预测 在8月29日小米集团&#xff08;01810&#xff09;公布其2023年第二季度财报之前&#xff0c;华尔街分析师曾预测该公司第二季度的业绩将超出2023年第一季度的业绩。 根据S&P …

实现无公网IP环境下远程访问本地Jupyter Notebook服务的方法及端口映射

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

git 后悔药

前言 自上而下&#xff0c;撤销可以分为从远程库撤销&#xff0c;从本地库撤销&#xff0c;从暂存库撤销。 例子&#xff1a;代码已经提交了三个记录到远程库&#xff0c;分别对应了记录1&#xff0c;内容1&#xff0c;记录2&#xff0c;内容2&#xff0c;记录3&#xff0c;内…