easyx安装过程及c语言常用图形库函数

合集下载

easyx函数

easyx函数

easyx函数
EasyX 函数是一系列图形图像操作函数,它支持许多操作,如画图、绘制图像、设置颜色和线条等,方便使用者执行图形图像操作任务。

EasyX 函数也可以说是一个图形图像函数库,它由若干子函数组成,每个子函数都有自己的特点,可以为开发者进行图形图像的操作,方便使用操作者完成指定的图形图像操作。

EasyX 函数涉及画点、线、三角形、圆、椭圆及画图、写字、设置颜色、线条等多种可以实现的图形图像表达形式及其参数。

EasyX 函数可以应用在计算机图形学课程、计算机图像处理课程、C/C++语言应用课程、动态图形学课程及计算机图形图像处理、计算
机绘图课程等。

- 1 -。

easyx alpha函数

easyx alpha函数

在EasyX图形库中,alpha 函数主要用于设置图像或图形的透明度。

透明度是指图像或图形的不透明程度,值范围为0到255,其中0表示完全透明(不可见),255表示完全不透明(完全可见)。

以下是alpha 函数的基本用法:
void alpha(int alpha_value);
参数:alpha_value 是透明度的值,范围为0到255。

返回值:无。

下面是一个简单的例子,演示了如何使用alpha 函数:
#include <graphics.h>
int main() {
// 初始化图形模式
initgraph(400, 300);
// 画一个矩形,并设置透明度
setfillcolor(RGB(255, 0, 0)); // 红色填充
solidrectangle(50, 50, 200, 150);
// 设置透明度为128(半透明)
alpha(128);
// 再画一个矩形,观察透明效果
setfillcolor(RGB(0, 0, 255)); // 蓝色填充
solidrectangle(100, 100, 250, 200);
// 等待用户点击窗口关闭按钮
getch();
// 关闭图形模式
closegraph();
return 0;
}
在这个例子中,首先使用setfillcolor 函数设置矩形的填充颜色,然后使用solidrectangle 函数画矩形。

接着,使用alpha 函数设置透明度为128,最后再画一个矩形。

由于设置了透明度,两个矩形之间呈现出半透明的效果。

easyx的基础应用教程

easyx的基础应用教程

easyx的基础应⽤教程引⽤什么是 EasyX?作者:EasyXEasyX 是针对 C++ 的图形库,可以帮助 C 语⾔初学者快速上⼿图形和游戏编程。

⽐如,可以⽤ VC + EasyX 很快的⽤⼏何图形画⼀个房⼦,或者⼀辆移动的⼩车,可以编写俄罗斯⽅块、贪吃蛇、⿊⽩棋等⼩游戏可以练习图形学的各种算法,等等。

许多学编程的都是从 C 语⾔开始⼊门的,⽽⽬前的现状是:1. 有些学校以 Turbo C 为环境讲 C 语⾔,只是 Turbo C 的环境实在太⽼了,复制粘贴都很不⽅便。

2. 有些学校直接拿 VC 来讲 C 语⾔,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。

可惜在 VC 下只能做⼀些⽂字性的练习题,想画条直线画个圆都很难,还要注册窗⼝类、建消息循环等等,初学者会受严重打击的。

初学3. 还有计算机图形学,这门课程的重点是绘图算法,⽽不是 Windows 编程。

所以,许多⽼师不得不⽤ TC 教学,因为 Windows 绘图太复杂了,会偏离教学的重点。

新的图形学的书有不少是⽤的 OpenGL,可是门槛依然很⾼。

所以,我们想给⼤家⼀个更好的学习平台,就是 VC ⽅便的开发平台和 TC 简单的绘图功能,于是就有了这个 EasyX 库。

如果您刚开始学 C 语⾔,或者您是⼀位教 C 语⾔的⽼师,再或者您在教计算机图形学,那么这个库⼀定会让您兴奋的。

1.配置easyx(vs2017+easyx)1.点击easyx官⽹,进⼊easyx⽹页->点击下载按钮->下载安装包(可选择第⼆个下载,第⼀个⼀般为测试版)2.安装easyx会出现下图页⾯,点击安装⽂档和Visual c++ 20173.打开刚才安装的⽂档,就可以看到⾥⾯包括了easyx函数的介绍和使⽤⽅法。

2.函数使⽤使⽤之前要#include <graphics.h> // 引⽤图形库头⽂件然后initgraph(640, 480); // 创建绘图窗⼝,⼤⼩为 640x480 像素(绘图窗⼝不是控制台,initgraph(640,480,SHOWCONSOLE)就可以看到我们熟悉的控制台了)2.1绘图过程:定义变量->加载->贴出分别⽤到IMAGE、loadimage、putimage往往和BeginBatchDraw、FlushBatchDraw、EndBatchDraw搭配使⽤可解决绘图闪烁问题,详见⽂档。

基于Easy X图形库的动画设计与C语言课程改革

基于Easy X图形库的动画设计与C语言课程改革
● 结论 图形化的教学实践,使得C语 言的教学从符号输出向图像输出转 变,色彩的搭配极大地丰富了输出 结果的多样性。同时,点、线、面等函 数的应用有助于构筑更为复杂的 结构,便于学生实现各种设计。本 课的实施强化了学生的逻辑思维 和实践能力,提高了学生的编程兴 趣,为C语言课堂教学的改革提供 了思路。
图2
104 中国信息技术教育
tougao3@ 高教专区
践,提升学生的成就感,提高学生 的学习兴趣。部分参考程序如图3 所示。
最后,进行程序的调试,得到
一个动态变化的三基色图像,如图 4所示。
● 知识能力的拓展 在课程实施过程中,课堂教学
图3


绿 绿


图4
能满足大多数学生的听课需求,但 是如果能力考查仅停留在原始题目 上,那对少数已经掌握该知识点的 学生吸引力不大,因此,在教学内容 设计时,要充分考虑该题目的拓展 性和发散性,牢牢把控住全班学生 的兴趣点。为此,该题目可以在以下 几个方面进行延伸:
JUL. 2021 NO.13 105
高教专区 tougao3@
6(c)],到达红色[如图6(d)],为一个 周期,然后不断循环,直至结束。对 轻松完成该环节的学生,可布置能
力进阶题,进一步挖掘学生的实践 能力。
● 知识点的总结与归纳
图5

绿
红ห้องสมุดไป่ตู้

绿


绿


绿

图6
通过 三 基色图像的变换,从 矩 形到圆形,从 竖 直方向到水平 方向,让学生了解到在工程实践中 要具体考虑坐标的相对位 置,认 识了直线画图函数 l i n e ()、矩 形画 图函数rectangle()、色彩设定函数 setcolor()和自定义等函数的应用, 进 一 步掌 握了设 计思想在实际工 程中的应用,开阔了视野,为其他项 目的开发提供了一定的参考范例。

C语言基于EasyX库实现有图形界面时钟

C语言基于EasyX库实现有图形界面时钟

C语⾔基于EasyX库实现有图形界⾯时钟本⽂实例为⼤家分享了C语⾔基于EasyX库实现有图形界⾯时钟的具体代码,供⼤家参考,具体内容如下1.⽬标要求:1.实现⼀个显⽰图像的时钟2.时间与本地时间⼀致2.C语⾔代码:#include<graphics.h> //需要提前安装库函数EasyX,⽹上官⽹下载#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>#include<math.h>#define High 480#define Width 640//画布尺⼨#define PI 3.1415/*SYSTEMTIME ti;GetLocalTime(&ti);//获得本地时间1. ti.wYear2. ti.wMonth3. ti.wDay4. ti.wHour5. ti.wMinute6. ti.wSecond*//*outtextxy(x,y," ");//输出⽂字在(x,y)上*/int IsEnd;//是否结束int center_x,center_y;//中点int second_long;//长度int second_x,second_y;//秒针位置int minute_long;//长度int minute_x,minute_y;//分针位置int hour_long;//长度int hour_x,hour_y;//时针位置int second_num,minute_num,hour_num;//秒针分针时针计数⽤的SYSTEMTIME ti;//定义变量存储系统时间void startup(){ //【数据初始化】IsEnd = 0;initgraph(Width,High);//展⽰画布center_x=Width/2;center_y=High/2;//中⼼点信息second_long= (Width>High)? High/4:Width/4;minute_long=second_long*8/9;hour_long=second_long*2/3;//指针长度信息GetLocalTime(&ti);//获取本地时间second_num= ti.wSecond;//秒针信息second_x=center_x+second_long*sin(((2*PI)/60)*second_num);//计算秒针端点位置second_y=center_y-second_long*cos(((2*PI)/60)*second_num);minute_num= ti.wMinute*5+second_num/12;//分针信息minute_x=center_x+minute_long*sin(((2*PI)/(60*5))*minute_num);//计算分针端点位置minute_y=center_y-minute_long*cos(((2*PI)/(60*5))*minute_num);hour_num= ti.wHour%12*5+minute_num/5/12;//时针信息,按照60刻度算hour_x=center_x+hour_long*sin(((2*PI)/(12*5))*hour_num);//计算时针端点位置hour_y=center_y-hour_long*cos(((2*PI)/(12*5))*hour_num);}void show_begin(){//【初始页⾯展⽰】BeginBatchDraw();//批量绘图开始}void show(){ //【显⽰画⾯】int i;setlinestyle(PS_SOLID,2);//设置线型为实线,线宽为2setcolor(DARKGRAY);//设置颜⾊为暗灰⾊setfillcolor(DARKGRAY);//设置填充颜⾊也为暗灰⾊fillcircle(center_x,center_y,second_long*21/16);//画表盘外圆setcolor(LIGHTGRAY);//设置颜⾊亮灰⾊setfillcolor(LIGHTGRAY);//设置填充颜⾊为亮灰⾊fillcircle(center_x,center_y,second_long*6/5);//填充表盘背景for(i=0;i<=59;i++){//画表盘上的刻度setcolor(BLACK);if(i%5==0){//每个⼩时点线长更长line((center_x+second_long*15/14*sin(((2*PI)/60)*i)),(center_y-second_long*15/14*cos(((2*PI)/60)*i)),(center_x+second_long*6/5*sin(((2*PI)/60)*i)),(center_y-second_long*6/5*cos(((2*PI)/60)*i)));}else line((center_x+second_long*8/7*sin(((2*PI)/60)*i)),(center_y-second_long*8/7*cos(((2*PI)/60)*i)),(center_x+second_long*6/5*sin(((2*PI)/60)*i)),(center_y-second_long*6/5*cos(((2*PI)/60)*i)));}setbkcolor(LIGHTGRAY);//设置背景颜⾊亮灰⾊settextcolor(WHITE);//设置颜⾊⽩⾊outtextxy(center_x-second_long/4,center_y+second_long/2,"你最珍贵");//输出⽂字setbkcolor(BLACK);//背景颜⾊设置回⿊⾊不要忘记setlinecolor(YELLOW);//设置线条颜⾊黄⾊setlinestyle(PS_SOLID,3);//设置线条风格为实线,线宽为3line(center_x,center_y,second_x,second_y);//画秒针setlinecolor(BLUE);//设置颜⾊setlinestyle(PS_SOLID,4);//设置线条风格实线,线宽为4line(center_x,center_y,minute_x,minute_y);//画分针setlinecolor(RED);//设置颜⾊setlinestyle(PS_SOLID,6);//设置线条风格实线,线宽3line(center_x,center_y,hour_x,hour_y);//画时针FlushBatchDraw();//更新⼀次画⾯,解决画⾯闪的问题,需要配合BeginBatchDraw函数使⽤ Sleep(1000);//延时cleardevice();//清除之前的画迹}void update_outinput(){ //【与输⼊⽆关的更新】GetLocalTime(&ti);//获取本地时间second_num= ti.wSecond;//秒针信息second_x=center_x+second_long*sin(((2*PI)/60)*second_num);//计算秒针端点位置second_y=center_y-second_long*cos(((2*PI)/60)*second_num);minute_num= ti.wMinute*5+second_num/12;//分针信息minute_x=center_x+minute_long*sin(((2*PI)/(60*5))*minute_num);//计算分针端点位置minute_y=center_y-minute_long*cos(((2*PI)/(60*5))*minute_num);hour_num= ti.wHour%12*5+minute_num/5/12;//时针信息,按照60刻度算hour_x=center_x+hour_long*sin(((2*PI)/(12*5))*hour_num);//计算时针端点位置hour_y=center_y-hour_long*cos(((2*PI)/(12*5))*hour_num);}void update_input(){//【与输⼊有关的更新】char input;if(kbhit()){input = getch();}}void show_end(){//【显⽰失败界⾯】EndBatchDraw();}int main(){startup(); //数据初始化show_begin();//初始页⾯while(!IsEnd){ //游戏循环执⾏show(); // 显⽰画⾯update_outinput(); //与输⼊⽆关的更新update_input(); //与输⼊有关的更新}show_end(); //显⽰失败界⾯return 0;}3.运⾏结果:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

分享一个有趣的库,让你学习C语言不会觉得那么枯燥

分享一个有趣的库,让你学习C语言不会觉得那么枯燥

分享一个有趣的库,让你学习C语言不会觉得那么枯燥
前几天看了果果小师弟做了一个华为太空船表盘界面,其中用到了一个EasyX图形库。

我以前读大二的时候也有用过这个图形库,当时是跟着一位老师的教程用这个图形库来写了一个游戏——夜夜爱消除:
代码可在文末获取。

对于一些C语言初学者,可能觉得C语言很枯燥,把这个库用起来,让你学习C语言不那么枯燥。

下面我们来简单介绍一下:
EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,支持VC6.0 ~ VC2019及Visual Studio,简单易用,学习成本极低,应用领域广泛。

目前已有许多大学将 EasyX 应用在教学当中。

链接:
https:///
我们可以使用EasyX 来写一些小游戏,其在图形学、图像学、分形学、粒子系统、物理模拟等各种场景都有应用。

EasyX的安装很简单,装完VC或VS之后,在官网下载EasyX安装即可:
EasyX库的应用接口使用也很简单,注释写得很清楚,如:
并且配有详细的用户文档:
除此之外,官网上还有很多丰富有趣的例子:。

EasyX

EasyX

EasyX折叠编辑本段安装系统支持编译环境版本:Visual C++ 6.0、Visual Studio 2003/2008/2010/2012/2013/2015/2017/2019。

安装执行 Setup.hta,并跟随提示安装即可。

如果您想手动安装,将 include 和 lib 文件夹下的文件分别拷贝到VC 对应的 include 和 lib 文件夹内即可。

或者将 include 和 lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径也可以。

总之,就是要让 VC 能找到这几个文件。

卸载由于安装程序并不改写注册表,因此您在"添加删除程序"中不会看到EasyX 的卸载项。

如需卸载,请执行Setup.hta,并跟随提示卸载。

新版本的安装程序并不能确保完全卸载旧版本,因此请保留相应版本的安装程序。

文件列表说明下载的压缩包里文件列表及对应说明如下:include<文件夹>graphics.h 程序需要引用的头文件lib<文件夹>graphics.lib VC6 MBCS 版本库文件graphicsu.lib VC6 Unicode 版本库文件graphicsw.lib VC2008 / VC2010 MBCS 版本库文件graphicswu.lib VC2008 / VC2010 Unicode 版本库文件EasyX_Help.chm 帮助文件Setup.hta 安装程序项目依赖该绘图库采用静态链接方式,不会为您的程序增加任何额外的DLL 依赖项。

折叠编辑本段范例使用上,基本和 Turbo C没太大区别。

启动Visual C++,创建一个控制台项目(Win32 Console Application),然后引用graphics.h 头文件就可以了。

看一个画圆的例子:#include <graphics.h> // 就是需要引用这个图形库#include <conio.h>void main(){initgraph(640, 480); // 这里和 TC 略有区别circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100getch(); // 按任意键继续closegraph(); // 关闭图形界面}不过还是有不少区别的,比如颜色上,TC 只有16 色,而这个库支持了真彩色。

Dev-C++下配置EasyXVC2010vc6

Dev-C++下配置EasyXVC2010vc6

Dev-C++下配置EasyXVC2010vc6vc6 与 easyX1,下载绿⾊版vc6. 仅43m。

解压后,点击执⾏ShortCut.exe,会⽣成桌⾯快捷 vc6. 运⾏即可。

vc6在win10下运⾏,⽆法单步调试。

需要把来源注解选项关掉:2,下载该版本⽀持 VC6~VC2019。

这个下载下来的包是个exe⽂件。

⽤7zip打包的。

可以直接⽤7zip解压或者后缀改成7z后解压。

因为我们要⼿动配置环境。

3,设置vc6环境:3.1 新加⼯程:添加cpp⽂件3.2 头⽂件⽬录设置,从⼯程 -> 设置3.3 添加库⽂件最后,点击run 运⾏,编制执⾏代码。

⽤⿏标选中区域可以放⼤,enjoy it.源码:1// 程序名称:分形学 - 可以⽆穷放⼤的 Mandelbrot Set (曼德布洛特集)2// 编译环境:Visual C++ 6.0 ~ 2019,EasyX_202107303// 最后更新:2010-9-94//5 #include <graphics.h>6 #include <conio.h>78// 定义常量9#define ITERATIONS 1000 // 迭代次数,越⾼,图像越精细10#define MAXCOLOR 64 // 颜⾊数111213/////////////////////////////////////////////////14// 定义复数及乘、加运算17// 定义复数18struct COMPLEX19 {20double re;21double im;22 };2324// 定义复数“乘”运算25 COMPLEX operator * (COMPLEX a, COMPLEX b)26 {27 COMPLEX c;28 c.re = a.re * b.re - a.im * b.im;29 c.im = a.im * b.re + a.re * b.im;30return c;31 }3233// 定义复数“加”运算34 COMPLEX operator + (COMPLEX a, COMPLEX b)35 {36 COMPLEX c;37 c.re = a.re + b.re;38 c.im = a.im + b.im;39return c;40 }414243/////////////////////////////////////////////////44// 定义颜⾊及初始化颜⾊45/////////////////////////////////////////////////4647// 定义颜⾊48int Color[MAXCOLOR];4950// 初始化颜⾊51void InitColor()52 {53// 使⽤ HSL 颜⾊模式产⽣⾓度 h1 到 h2 的渐变⾊54int h1 = 240, h2 = 30;55for (int i = 0; i < MAXCOLOR / 2; i++)56 {57 Color[i] = HSLtoRGB((float)h1, 1.0f, i * 2.0f / MAXCOLOR);58 Color[MAXCOLOR - 1 - i] = HSLtoRGB((float)h2, 1.0f, i * 2.0f / MAXCOLOR);59 }60 }616263/////////////////////////////////////////////////64// 绘制 Mandelbrot Set (曼德布洛特集)65/////////////////////////////////////////////////66void Draw(double fromx, double fromy, double tox, double toy)67 {68 COMPLEX z, c;69int x, y, k; // 定义循环变量70for (x = 0; x < 640; x++)71 {72 c.re = fromx + (tox - fromx) * (x / 640.0);73for (y = 0; y < 480; y++)74 {75 c.im = fromy + (toy - fromy) * (y / 480.0);76 z.re = z.im = 0;77for (k = 0; k < ITERATIONS; k++)78 {79if (z.re * z.re + z.im * z.im > 4.0) break;80 z = z * z + c;81 }82 putpixel(x, y, (k >= ITERATIONS) ? 0 : Color[k % MAXCOLOR]);83 }84 }85 }868788/////////////////////////////////////////////////89// 主函数90/////////////////////////////////////////////////91int main()92 {93// 初始化绘图窗⼝及颜⾊94 initgraph(640, 480);95 InitColor();9697101 fromy = -1.2; toy = 1.2;102 Draw(fromx, fromy, tox, toy);103104105// 捕获⿏标操作,实现放⼤⿏标选中区域106 ExMessage m;107bool isLDown = false;108int selfx, selfy, seltx, selty; // 定义选区109110do111 {112 getmessage(&m, EM_MOUSE | EM_KEY); // 获取⼀条⿏标消息113114switch (m.message)115 {116case WM_KEYDOWN:117break;118119// 按⿏标中键恢复原图形坐标系120case WM_MBUTTONUP:121 fromx = -2.1; tox = 1.1;122 fromy = -1.2; toy = 1.2;123 Draw(fromx, fromy, tox, toy);124break;125126// 按⿏标左键并拖动,选择区域127case WM_MOUSEMOVE:128if (isLDown)129 {130 rectangle(selfx, selfy, seltx, selty);131 seltx = m.x;132 selty = m.y;133 rectangle(selfx, selfy, seltx, selty);134 }135break;136137// 按⿏标左键并拖动,选择区域138case WM_LBUTTONDOWN:139 setlinecolor(WHITE);140 setrop2(R2_XORPEN);141 isLDown = true;142 selfx = seltx = m.x;143 selfy = selty = m.y;144 rectangle(selfx, selfy, seltx, selty);145146break;147148// 按⿏标左键并拖动,选择区域149case WM_LBUTTONUP:150 rectangle(selfx, selfy, seltx, selty);151 setrop2(R2_COPYPEN);152 isLDown = false;153 seltx = m.x;154 selty = m.y;155156if (selfx == seltx || selfy == selty) break;157158// 修正选区为 4:3159int tmp;160if (selfx > seltx) { tmp = selfx; selfx = seltx; seltx = tmp; }161if (selfy > selty) { tmp = selfy; selfy = selty; selty = tmp; }162163if ((seltx - selfx) * 0.75 < (selty - selfy))164 {165 selty += (3 - (selty - selfy) % 3);166 selfx -= (selty - selfy) / 3 * 4 / 2 - (seltx - selfx) / 2;167 seltx = selfx + (selty - selfy) / 3 * 4;168 }169else170 {171 seltx += (4 - (seltx - selfx) % 4);172 selfy -= (seltx - selfx) * 3 / 4 / 2 - (selty - selfy) / 2;173 selty = selfy + (seltx - selfx) * 3 / 4;174 }175176// 更新坐标系177double f, t;178 f = fromx + (tox - fromx) * selfx / 640;179 t = fromx + (tox - fromx) * seltx / 640;180 fromx = f;181 tox = t;185 toy = t;186187// 画图形188 Draw(fromx, fromy, tox, toy);189190break;191 }192 } while (m.message != WM_KEYDOWN);193194 closegraph();195return0;196 }View Code汉诺塔移动⽰例:///////////////////////////////////////////////////// 程序名称:汉诺塔移动动画// 编译环境:Visual C++ 6.0,EasyX_20130506(beta)// 作 者:Ronald Email:ryl910527@// 最后修改:2011-5-26//#include <graphics.h>#include <conio.h>#include <stdio.h>#define MAX 64 // 圆盘的最⼤数⽬#define NULL 0// 定义栈struct STKNODE{int a[4];};struct STK{STKNODE* stack[MAX];int top;};// 定义全局变量STK s[3]; // 声明三个栈,分别代表⼀号⼆号三号钢针上圆盘的状态int v = 5; // 调整速度// 函数声明void Initstk(STK* s); // 初始化栈void Hannoi(int n, char a, char b, char c); // 汉诺塔递归void start(); // 开始画⾯void Move(int n, char a, char b); // 移动过程int switchab(char a); // 返回钢针号void adjust(); // 调整速度暂停// 主函数void main(){int n, ta[4] = {115, 500, 285, 518}; // 第⼀个圆盘的位置printf("尽量⼩于16\n"); // 因为⼤于⼗六时就会显⽰有误,但程序可以正常运⾏printf("请输⼊汉诺塔的层数(1~64):");scanf("%d", &n);STKNODE** p;p = (STKNODE**)malloc(n * sizeof(STKNODE **)); // 声明⼀个元素为 n 个的动态 STKNODE 型指针数组for (int i2 = 0; i2 < n; i2 ++){p[i2] = (STKNODE *)malloc(sizeof(STKNODE)); // 为每⼀个指针申请空间}Initstk(&s[0]);Initstk(&s[1]);Initstk(&s[2]); // 将三个栈初始化start(); // 呈现开始画⾯setfillcolor(GREEN); // 圆盘的颜⾊for (int i=0; i < n; i++){ta[0] += 5;ta[1] -= 20;solidrectangle(ta[0], ta[1], ta[2], ta[3]); // 画出n个从⼤到⼩⼀次叠放的黄⾊圆盘++s[0].top; // 进栈for (int i1 = 0; i1 < 4; i1++){p[i]->a[i1] = ta[i1];s[0].stack[s[0].top] = p[i]; // 记录每个矩形的位置,top为圆盘的个数}}Hannoi(n, 'a', 'b', 'c'); // 汉诺塔递归函数system("pause");printf("\t\t\t\tGame Over!\n");}///////////////////////////////////////////////////// 函数定义// 汉诺塔的递归void Hannoi(int n, char a, char b, char c){if(n == 1)Move(1, a, c);else{Hannoi(n-1, a, c, b);Move(n, a, c);Hannoi(n-1, b, a, c);}}// 栈的初始化void Initstk(STK *s){int i;s->top = 0;for (i = 0; i <= MAX; i++)s->stack[++s->top] = NULL;s->top = 0;}// 移动过程void Move(int n, char a, char b){int i3, i4 = 0, i5 = 0;i3 = b - a; // ⽬的钢针与源钢针的位置差值i4 = switchab(a); // 源钢针钢针号i5 = switchab(b); // ⽬的钢针号STKNODE *q1, *q0; // 两个中间结点⽤于源栈和⽬的栈间的值得传递,q1为⽬的栈,q0为源栈 q1 = (STKNODE *)malloc(sizeof(STKNODE));q0 = (STKNODE *)malloc(sizeof(STKNODE));// 源栈与⽬的栈值的传递q0 = s[i4].stack[s[i4].top];++s[i5].top; // 进栈q1->a[0] = q0->a[0] + i3 * 200;q1->a[1] = 500 - s[i5].top * 20;q1->a[2] = q0->a[2] + i3 * 200;q1->a[3] = 500 - s[i5].top * 20 + 18;s[i5].stack[s[i5].top] = q1;--s[i4].top; // 出栈// 向上运动while (q0->a[1] >= 100){setfillcolor(GREEN);solidrectangle(q0->a[0], q0->a[1], q0->a[2], q0->a[3]);adjust(); // 调整函数Sleep(10 * v); // 暂停(ms)setfillcolor(WHITE);solidrectangle(q0->a[0], q0->a[1], q0->a[2], q0->a[3]);setlinecolor(RED);line((q0->a[0] + q0->a[2]) / 2, q0->a[1], (q0->a[0] + q0->a[2]) / 2, q0->a[3]); // 重新画上被擦掉原有的红线q0->a[1] -= 10;q0->a[3] -= 10;}// 向左或右运动,与 i3 的正负有关while (q0->a[2] != q1->a[2]){setfillcolor(GREEN);solidrectangle(q0->a[0], q0->a[1], q0->a[2], q0->a[3]);setfillcolor(WHITE);solidrectangle(q0->a[0], q0->a[1], q0->a[2], q0->a[3]);if (i3 < 0) // i3<0向左移{q0->a[0] -= 20;q0->a[2] -= 20;}else// i3>0向右移{q0->a[0] += 20;q0->a[2] += 20;}}// 向下运动while (q0->a[3] <= q1->a[3]){setfillcolor(GREEN);solidrectangle(q0->a[0], q0->a[1], q0->a[2], q0->a[3]);adjust();Sleep(10 * v);setfillcolor(WHITE);solidrectangle(q0->a[0], q0->a[1], q0->a[2], q0->a[3]);setlinecolor(RED);if (q0->a[1] > 100) // 重画被擦掉的红线{line((q0->a[0] + q0->a[2]) / 2, q0->a[1], (q0->a[0] + q0->a[2]) / 2, q0->a[3]); }q0->a[1] += 10;q0->a[3] += 10;}// 在⽬的钢针上的相应位置绘制出黄⾊矩形块setfillcolor(GREEN);solidrectangle(q1->a[0], q1->a[1], q1->a[2], q1->a[3]);}// 绘制开始界⾯void start(){// 初始化画⾯⼤⼩initgraph(800, 650);// 背景设为⽩⾊setbkcolor(WHITE);// ⽤⽩⾊填充整个画⾯cleardevice();// 绘制彩虹,形成⼀道彩虹,摘⾃ easyx 帮助⽂档⽰例程序float H, S, L;H = 0; // ⾊相S = 1; // 饱和度L = 0.5f; // 亮度setlinestyle(PS_SOLID,2, NULL, 0); // 设置线宽为 2for(int r = 600; r > 544; r--){H += 5;setlinecolor( HSLtoRGB(H, S, L) );circle(750, 900, r);}// 说明settextstyle(50, 0, "华⽂楷体");settextcolor(RED);outtextxy(200, 150, "汉诺塔移动动画");settextstyle(20, 0, "⿊体");outtextxy(600, 200, "BY:Ronald");outtextxy(500, 200, "版本V1.1");settextstyle(50, 0, "⿊体");settextcolor(GREEN);outtextxy(200, 350, "随便按⼀个键开始吧!");// 检测键盘敲击getch();// 清空开始界⾯cleardevice();// 绘制运动画⾯的的环境line(400, 110, 400, 500);line(600, 110, 600, 500);line(200, 110, 200, 500);// 长⽅体形的底座setfillcolor(LIGHTGRAY);fillrectangle(80, 501, 720, 510);// 暂停按钮solidrectangle(360, 540, 440, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(370, 550, "暂停");settextstyle(20, 0, "宋体");settextcolor(RED);outtextxy(300, 580, "⿏标暂停后请按空格继续");// 加速按钮solidrectangle(160, 540, 240, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(170, 550, "加速");settextstyle(20, 0, "宋体");settextcolor(RED);outtextxy(170, 580, "请按 d");// 减速按钮solidrectangle(560, 540, 640, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(570, 550, "减速");settextstyle(20, 0, "宋体");settextcolor(RED);outtextxy(570, 580, "请按 a");// 说明settextstyle(50, 0, "宋体");settextcolor(GREEN);outtextxy(10, 10, "正在进⾏中请欣赏:");}// 判断⽬的钢针与源钢针的钢针号返回钢针号int switchab(char a){switch (a){case'a':return0;case'b':return1;case'c':return2;default:return0;}}// 调整函数,实现加速,减速,暂停void adjust(){char f; // 接收键盘敲进去的按钮和⿏标点击时赋予的变化值// ⽤ f 接受键盘的键⼊值if(kbhit())f = getch();// 检测⿏标消息if (MouseHit()==true){// 接收⿏标消息MOUSEMSG Mouse;Mouse = GetMouseMsg();// 响应⿏标消息if (Mouse.x >= 360 && Mouse.x <= 440 && Mouse.y >= 540 && Mouse.y <= 580 && Mouse.mkLButton) {f = '';}if (Mouse.x >= 160 && Mouse.x <= 240 && Mouse.y >= 540 && Mouse.y <= 580 && Mouse.mkLButton) {{f = 'a';}}// 作⽤于动画switch(f){// 暂停case'':// ⽤‘继续’覆盖‘暂停’settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(370, 550, "继续");getch();// 继续后变回显⽰‘暂停’settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(370, 550, "暂停");break;// 减速case'a':// 当被点击时,‘减速’位置震动⼀下setfillcolor(LIGHTGRAY);solidrectangle(560, 540, 640, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(575, 545, "减速");Sleep(30);// 减速v++;// 回原位setfillcolor(LIGHTGRAY);solidrectangle(560, 540, 640, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(570, 550, "减速");break;// 加速case'd':setfillcolor(LIGHTGRAY);solidrectangle(160, 540, 240, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(165, 545, "加速");Sleep(30);setfillcolor(LIGHTGRAY);solidrectangle(160, 540, 240, 580);settextstyle(30, 0, "⿊体");settextcolor(GREEN);outtextxy(170, 550, "加速");// 加速v--;// v 最⼩为1if (v <= 0){v = 1;}break;default:break;}f = 'r'; // f 初始化为 rFlushMouseMsgBuffer(); // 清空⿏标消息}View Code。

easyx图形库

easyx图形库

easyx图形库
easyx图形库的⾷⽤⽅式(c++)
由于学c艹真的没python有图形辣么好玩,于是我⽆意间了解了easyx图形库(可以做挺多好玩的东西)虽然说感觉⽤起来还是有点繁琐(可能是本菜狗刚了解,太菜了QAQ)
基于本菜狗经常忘记东西,就打算学⼀点就稍微记⼀些,本博客会不定期更新(也可能我忘了的说)
本博客主要为了⾃⼰复习⽤(毕竟作为⼀个博客园⼩透明,写的博客也没⼈看啊QAQ),顺便请求⼤佬发现本菜狗的bug后进⾏指点
若要转载,请注明来处
1.基础
1.下载
链接
2.安装
其中第⼀个easyx⽂档是说明啥的,很不错的哦!
因为我是⽤vs2019的所以我后⾯⼤部分都是⽤vs2019进⾏操作
其中有很多可以直接了解的说
3.有时候输⼊中⽂报错
例如
这时候有好⼏种解决⽅法
第⼀种:在冒号前加上字母L
第⼆种:在中⽂冒号前加_T(,且在后⾯补⼀个)
第三种:⼀次性解决:打开带cpp⽂件的属性(可以在资源管理器右边源⽂件下⾯右键找到或者vs上⽅项⽬⾥找到),然后配置属性->⾼级->字符集->⾼级属性->字符集->使⽤多字节字符集
就像酱紫
然后确定就⾏啦
然后你就会发现,除了加L以外的报错都消失了的说。

C++经典绘图工具EasyX

C++经典绘图工具EasyX

C++经典绘图⼯具EasyXEasyX简介EasyX在学习C语⾔时,很多同学抱怨说C只能写最简单的Demo程序,通过printf在屏幕上打印字符来验证代码。

这样的编程很枯燥,⼀点没觉得⾃⼰在设计软件。

EasyX是针对C++的第三⽅图形库,通过它我们能够在屏幕上绘制出⾃⼰喜欢的各种颜⾊的图形。

有了它,⾃⼰编写好玩的⼩游戏不是梦哦。

使⽤EasyX有下⾯⼏点要求:只能在Windows下使⽤建议使⽤Visual Studio作为IDE必须写C++代码(⽂件后缀名为cpp)EasyX安装下载路径安装解压下载⽬录EasyX_20151015(beta).zip如下:双击setup.hta⽂件找到需要的VS版本点击安装即可。

PS:在解压缩的⽂件中,有个EasyX_help.chm⽂件,它是EasyX的⽂档,所有API的介绍都在⾥⾯。

作为⼀个软件开发⼈员,阅读⽂档是最基本的技能,希望⼤家从现在开始培养⾃⼰这⽅⾯的能⼒。

如果你通读了这个⽂档之后,相信你完全能够⾃⼰完成在屏幕上画出⾃⼰想要的图案。

EasyX基本API在EasyX的⽂档中,有⼀节是“超简单的使⽤预览”,⾥⾯有这样⼀段代码。

#include <iostream>#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480); // 创建图形界⾯circle(200, 200, 100); // 画圆,圆⼼(200, 200),半径 100getch(); // 按任意键继续closegraph(); // 关闭图形界⾯}这段代码的执⾏结果如下:这个Demo程序实现了在屏幕上画⼀个圆形的功能。

1. 画布的创建和销毁main函数中,第⼀⾏和最后⼀⾏代码是创建和删除图形界⾯,这个图形界⾯常常被叫做“画布”。

initgraph()创建画布时,需要输⼊⽬标窗⼝的长宽值。

C语言Easyx实现贪吃蛇详解

C语言Easyx实现贪吃蛇详解

C语⾔Easyx实现贪吃蛇详解⽬录⼀、头⽂件包含⼆、创建蛇与⾷物的结构体三、游戏的初始化四、游戏的绘画事件五、蛇的移动事件六、输⼊⽅向******这个⽅⾯没什么好解释的⼤家看代码应该可以看懂。

七、⽣成⾷物⼋、吃⾷物九、游戏失败的判定⼗、main函数总结:⼀、头⽂件包含#include<stdio.h>#include<graphics.h> //图形处理需要包含的库⽂件#include<mmsystem.h> //windows多媒体接⼝#include<conio.h> //读取键盘输⼊#include<time.h> //随机数种⼦#include<stdlib.h> //内存分配包含完头⽂件后进⾏⼀些预处理操作:#pragma comment(lib,"winmm.lib")//多媒体接⼝#define NUM 200;#define SIZE 10enum Ch{ up=72,down=80,left=75,right=77} ;⼆、创建蛇与⾷物的结构体直接上代码:struct pos 蛇⾝坐标{int x;int y;};struct snake{int n; 初始化蛇⾝长度Ch ch; 蛇前进的⽅向pos szb[3265]; 蛇的坐标数组};struct food{int x;int y;bool iseat; 判断⾷物是否被吃};创建⼀个蛇与⾷物snake s;food f;三、游戏的初始化void gameinit(){srand((unsigned int)time(NULL));//随机数种⼦,⽤于随机⽣成⾷物s.n = 2; //蛇的初始长度,可以⾃⼰设定s.ch = right;//蛇的初始⽅向;s.szb[0].x=100;s.szb[0].y=100;s.szb[1].y = 100;//蛇的初始位置坐标f.iseat = true;}四、游戏的绘画事件cleardevice(); //每次绘画都要进⾏⼀次清屏setfillcolor(RED); //蛇头颜⾊fillrectangle(s.szb[0].x, s.szb[0].y,s.szb[0].x + SIZE, s.szb[0].y + SIZE);//SIZE在预处理是已经定义表⽰每个蛇⾝的⼤⼩for (int i = 0; i < s.n; i++) {rectangle(s.szb[i].x, s.szb[i].y,s.szb[i].x + SIZE, s.szb[i].y + SIZE);} //⽣成矩形蛇setfillcolor(GREEN);//⾷物颜⾊fillroundrect(f.x, f.y, f.x + SIZE, f.y + SIZE,5,5);//⽣成圆形⾷物五、蛇的移动事件void snakemove(){for (int i = s.n - 1; i > 0; i--){s.szb[i].x = s.szb[i - 1].x;s.szb[i].y = s.szb[i - 1].y; //通过数组的变换来实现蛇的移动}switch (s.ch)//ch枚举类型在预处理时已经定义{case up:s.szb[0].y -= SIZE;//由于在窗⼝坐标系中y⽅向是向下的所以向上移动需要减去⼀个sizebreak;case down:s.szb[0].y += SIZE;break;case left:s.szb[0].x -= SIZE;break;case right:s.szb[0].x += SIZE;break;}}六、输⼊⽅向******这个⽅⾯没什么好解释的⼤家看代码应该可以看懂。

EasyX在C语言课程教学中的应用

EasyX在C语言课程教学中的应用

EasyX在C语言课程教学中的应用摘要本文笔者通过多年的C语言课程的教学经验,提出了在C语言教学过程中引入EasyX图形库的必要性,介绍了通过绘制图形和制作动画的案例进行教学的方法,激发学生利用C语言进行编程的兴趣,提高学生的自主性和创新性。

关键词EasyX C语言动画设计1 引入EasyX的必要性C语言程序设计课是理论与实践相结合的课程,实践性很强,是高等院校的公共基础课程之一。

近几年来,一般高校采用Visual C++ 6.0作为编辑环境进行C语言课程的讲解。

尽管Visual C++ 6.0已经远远比从前的tubor C 2.0无论从界面上还是实际操作上简便了很多,但C语言课程的一些经典实例兴趣性不强,不容易激发学生的创新能力。

如果能够将枯燥的C语言学习和图形界面以及电脑游戏结合到一起,从老师多次强调讲解程序的编写方法转变为让学生自己参与算法的设计和程序的编写,调动起学生的学习兴趣,提高学生的实践能力。

EasyX让图形案例引入进C语言的课堂成为可能性。

2 EasyX图形库标准的C中包含“graphics.h”这个头文件,具备强大的图形功能,利用C语言可以进行各种图形的绘制。

但是在Visual C++ 6.0并不包含这个头文件。

EasyX 是针对C++ 的图形库,可以帮助C语言初学者快速上手图形和游戏编程。

在Visual C++ 6.0的基础上安装EasyX只需下载压缩包,执行Setup.hta,并跟随提示安装即可。

如果想手动安装,需要include 和lib 文件夹下的文件分别拷贝到Visual C++ 6.0对应的include 和lib 文件夹内即可。

这样就将EasyX图形库引入到了Visual C++ 6.0中。

可以利用EasyX图形库画出各种几何图形和移动的图形,也可以编写类似我们所熟悉的俄罗斯方块等小游戏,可以练习图形学的各种算法,等等。

3 EasyX的应用3.1 绘制图形案例的应用以往循环结构的典型案例包括像累计求和求乘积、最大公约数与最小公倍数、斐波那契数列等等数学问题,对于非专业的学生来说这些内容理解起来并不容易,也不容易产生兴趣,因而编程就变成了死记硬背程序。

EasyX图形库,绘制透明和旋转图片的方法(效率很高)

EasyX图形库,绘制透明和旋转图片的方法(效率很高)

EasyX图形库,绘制透明和旋转图⽚的⽅法(效率很⾼)#ifndef EX_EASYX_H#define EX_EASYX_H#include <graphics.h>#define _USE_MATH_DEFINES#include <math.h>#ifndef M_RD#define M_RD 0.01745329251994329576923690768489#endif//2x3矩阵class gdimat2 : public XFORM{public:gdimat2(){this->identity();}void identity(){eM11 = 1.0f; eM12 = 0.0f;eM21 = 0.0f; eM22 = 1.0f;eDx = 0.0f; eDy = 0.0f;}void translate(float x, float y){XFORM mat;mat.eM11 = 1.0f; mat.eM12 = 0.0f;mat.eM21 = 0.0f; mat.eM22 = 1.0f;mat.eDx = x;mat.eDy = y;CombineTransform(this, this, &mat);}void scale(float x, float y){XFORM mat;mat.eM11 = x; mat.eM12 = 0.0f;mat.eM21 = 0.0f; mat.eM22 = y;mat.eDx = 0.0f;mat.eDy = 0.0f;CombineTransform(this, this, &mat);}void rotate(float angle){using namespace std;XFORM mat;angle *= M_RD;float cosin = cos(angle);float sine = sin(angle);mat.eM11 = cosin; mat.eM12 = sine;mat.eM21 = -sine; mat.eM22 = cosin;mat.eDx = 0.0f;mat.eDy = 0.0f;CombineTransform(this, this, &mat);}//应⽤到⽬标HDCvoid use(HDC dc){SetWorldTransform(dc, this);}};//easyx扩展,绘制透明png图⽚#pragma comment (lib, "MSIMG32.lib")void draw_image(IMAGE& image, int x, int y, int w = -1, int h = -1){BLENDFUNCTION blendfunc = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };int width = image.getwidth();int height = image.getheight();if (w == -1)w = width;if (h == -1)h = height;AlphaBlend(GetImageHDC(), x, y, w, h, GetImageHDC(&image), 0, 0, width, height, blendfunc);}//绘制旋转的图⽚,⽀持透明png图⽚void rotate(IMAGE& image, int x, int y, int w, int h, float angle){//获取当前绘图dcHDC dc = GetImageHDC();//矩阵gdimat2 m;m.rotate(angle); //旋转m.translate(x, y); //平移e(dc);BLENDFUNCTION blendfunc = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; int width = image.getwidth();int height = image.getheight();//绘制位置设置图⽚的中⼼点x = -w / 2;y = -h / 2;AlphaBlend(dc, x, y, w, h, GetImageHDC(&image), 0, 0, width, height, blendfunc); //初始化矩阵m.identity();//恢复dc初始变换e(dc);}#endif EX_EASYX_H。

easyx安装过程及c语言常用图形库函数

easyx安装过程及c语言常用图形库函数

MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红 BROWN 6 棕色 YELLOW 14 黄色 LIGHTGRAY 7 淡灰 WHITE 15 白色 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Hale Waihona Puke 6、挂起函数Sleep 功 能: 执行挂起一段时间 Sleep函数的一般形式: Sleep(unsigned long); 其中,Sleep()里面的单位,是以毫秒为 单位,所以如果想让函数滞留1秒的话, 应该是Sleep(1000);
3、画直线函数 void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。 4、填充函数 void far floodfill(int x, int y, int
border); 其中: x, y为封闭图形内的任意一点。 border为边界的颜色, 也就是封闭图 形轮廓的颜色。调用了该函数后, 将用规 定的颜色和图模填满整个封闭图形。
const char *pupattern = NULL); color的值是当前屏幕图形模式时颜色的有 效值。pattern的值及与其等价的 符号常数如表所示。
表 关于填充式样pattern的规定 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义 ─────────────────────────── EMPTY_FILL 0 以背景颜色填充 SOLID_FILL 1 以实填充 LINE_FILL 2 以直线填充 LTSLASH_FILL 3 以斜线填充(阴影线) SLASH_FILL 4 以粗斜线填充(粗阴影线) BKSLASH_FILL 5 以粗反斜线填充(粗阴影线) LTBKSLASH_FILL 6 以反斜线填充(阴影线) HATCH_FILL 7 以直方网格填充 XHATCH_FILL 8 以斜网格填充 INTTERLEAVE_FILL 9 以间隔点填充 WIDE_DOT_FILL 10 以稀疏点填充 CLOSE_DOS_FILL 11 以密集点填充 USER_FILL 12 以用户定义式样填充 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

C++easyx窗口程序入门教程

C++easyx窗口程序入门教程

C++easyx窗⼝程序⼊门教程C++ easyx 窗⼝制作基础教程⽬录使⽤前的准备去easyx的官⽹下载easyx。

⾄于官⽹⽹址就不多说了,⽹上都有。

然后在vs2008中安装。

只需要把下载下来的“安装向导”打开,然后选择对应版本即可。

如果弹出“安装成功”的对话框就说明成功了。

然后打开相应的VS版本,在创建项⽬的时候选择“WIN32控制台应⽤程序”即可。

简单窗⼝在“解决⽅案资源管理器”中打开stdafx.h,然后include上需要的头⽂件。

⼀般easyx程序需要的头⽂件是#include<graphics.h>。

然后,在主程序中输⼊如下的语句:#include "stdafx.h"int main(){initgraph(640,480);for(;;){}closegraph();}运⾏效果:我们制作出了⼀个⿊⾊的窗⼝。

要点:initgraph(a,b)⽤于设定⼀个长为a,宽为b的窗⼝,并显⽰出来。

closegraph()⽤于关闭窗⼝设置窗⼝颜⾊我们使⽤setbkcolor和cleardevice函数。

上代码:#include "stdafx.h"int main(){initgraph(640,480);setbkcolor(WHITE);cleardevice();for(;;){}closegraph();}运⾏效果:要点:setbkcolor(color)⽤于设定背景⾊为color。

实际上easyx⾃带了很多常量,例如BLACK WHITE BLUE GREEN等。

在设定后,必须使⽤cleardevice函数刷新,以显⽰新的背景颜⾊。

cleardevide()⽤于刷新屏幕,把所有内容使⽤背景⾊刷新。

显⽰⽂字可以使⽤outtextxy函数。

注:outtextxy函数的第三的参数是TCHAR类型的,需要在前⾯加上_T()函数以修改为TCHAR类型。

VC-easyx绘图游戏简易教程

VC-easyx绘图游戏简易教程

1:创建新项目自己动手建立项目试试,并输入以下代码:#include <stdio.h>void main(){ printf("Hello World!");}然后,输入以下代码试试(无需理解代码含义):#include <graphics.h>#include <conio.h>void main(){initgraph(640, 480);line(200, 240, 440, 240);line(320, 120, 320, 360);getch();closegraph();}执行后应该可以看到屏幕正中央有一个十字2:简单绘图,学习单步执行#include <graphics.h> // 绘图库头文件,绘图语句需要#include <conio.h> // 控制台输入输出头文件,getch()语句需要void main(){initgraph(640, 480); // 初始化640x480的绘图屏幕line(200, 240, 440, 240); // 画线(200,240) - (440,240)line(320, 120, 320, 360); // 画线(320,120) - (320,360)getch(); // 按任意键closegraph(); // 关闭绘图屏幕}解释一下:1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。

注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。

2. getch实现按任意键功能,按任意键后,程序继续执行。

否则,程序会立刻执行closegraph 以至于看不到绘制的内容。

[作业]用线条画出更多的图形,要求不少于10条直线。

[学习单步执行]完成作业后(务必完成),开始试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。

easyC v4使用说明4.0

easyC v4使用说明4.0

搜索
放大 :增大流程图显示的比例尺寸 缩小 :减小流程图显示的比例尺寸 缩放:缩放比例显示
Network Optimization Expert Team
1.4、编程区
每一个新的程序都会有一个I/O定义模块,变量定义模块(Globales、Variables),开始模块(BEGIN)和结 束模块(END)。 I/O模块和变量定义模块应当在开始编程之前定义。 在每一个程序里,开始模块标识程序模块代码的第一个模块;结束模块标识程序模块代码的最后一个模块。 你必须放置所有的模块在这两个模块之间。 插入模块:在模块区用鼠标左键点住相应模块,拖动到编程区的开始和结束模块之间,放开鼠标,然后只要设 置好模块的属性就行了。 编辑模块(Edit):左键双击修改,也可单击右键,选择Edit Block。 复制模块(Copy):单击右键,选择copy;或者按住ctrl键,拖拽模块。将复制的模块放到你需要放置它的位 置。 剪切模块(Cut):单击右键,选择cut。 粘贴(Paste) :单击右键,选择Paste。 删除模块(Delete):选定需要删除的模块单击右键选择Delete。
2.选
择变 量运 算符 号
Network Optimization Expert Team
2.2.2当循环While Loop
当循环模块编程范例1:
以编碰撞开关为例: 右边每一个模块的属性在后面的注 释里面都有说明 首先在变量定义模块(Variables) 里面定义了一个变量a,然后拖入一 个碰撞检测模块,再拖入当循环模 块,条件里面设置a=1,表示碰撞 开关处在断开的状态,在当循环里 面拖入一个马达模块设置为运转, 再拖入一个碰撞检测模块,属性和 当循环外面的碰撞检测模块的属性 一样,; 在当循环外面拖入一个马达模块设 置为停止; 那么这个程序的功能为:当碰撞开 关没碰到时马达到家转,直到碰撞 开关碰到时,马达才停止

easyx语法

easyx语法

easyx语法
EasyX是一个面向初学者的简化图形库,它基于Windows GDI (Graphics Device Interface)。

以下是EasyX的一些基本语法:
引用EasyX头文件:
#include <graphics.h>
初始化图形窗口:
initgraph(width, height);
其中,width和height分别表示窗口的宽度和高度。

关闭图形窗口:
closegraph();
绘制基本图形:
线段:line(x1, y1, x2, y2);
矩形:rectangle(left, top, right, bottom);
圆形:circle(center_x, center_y, radius);
椭圆:ellipse(center_x, center_y, x_radius, y_radius);
文字:outtextxy(x, y, text);
清屏:cleardevice();
颜色设置:
设置画笔颜色:setcolor(color);
设置填充颜色:setfillcolor(color);
其中,color可以是内置颜色常量(如RED、BLUE等)或RGB值(如RGB(255, 0, 0)表示红色)。

这只是EasyX的一些基本语法示例,你可以通过学习EasyX的官方文档或教程来深入了解更多操作和语法规则。

c语言的图形库

c语言的图形库

c语⾔的图形库图形库链接使⽤图形库头⽂件easyx.h或graphics.h同样在⾥⾯下载图形库帮助⽂档进⾏查询vs vc都可使⽤图形库图形库窗⼝:initgraph打开窗⼝closegraph关闭窗⼝颜⾊RGB值 RGB(,,):red green blue 下表值都可以在函数中直接使⽤填充颜⾊上图为图形库的三种颜⾊路径绝对路径从盘符开始到每个⽂件夹,通过盘符找到指定⽂件,只能在⾃⼰电脑中使⽤代码发给别⼈就不适⽤了相对路径 exe情况1:exe和素材同⼀个⽂件夹下⾯直接写⽂件(当前⽂件夹)情况2:“123/素材.jpg”(当前⽂件夹下⾯⼀个⽂件夹)情况3:上级⽂件夹使⽤../多⼀级多⼀个点列:../123/素材.jpg./当前⽂件夹(exe所在的⽂件夹)./写和不写没区别⼀般不写资源⽂件——>素材直接导⼊到⽂件当中优点直接发程序不需要发素材缺点程序很⼤⼀般不会导⼊素材画图:circle画圆fillcircle画填充圆(带边框)solidcircle填充圆(不带边框)后⾯加三个参数x轴y轴以及半径setlinecolor设置边框颜⾊setfillcolor设置填充颜⾊输出⽂本setbkmode(TRANSPARENT);//设置⽂字字体透明图⽚上写⽂字(不写会遮挡⽂字)settextcolor(RGB(173, 216, 230));//设置⽂本颜⾊settextstyle(40, 0, L"微软雅⿊");//设置⽂本⼤⼩和字体outtextxy(0, 0, L"图形库");//在指定位置输出⽂本outtextxy(20, 20, L"ABCD");//L表⽰多字节图像处理⼀般使⽤.jpg和.bmp⽤代码实现在图形库中输出字体画出形状1 #include<stdio.h>2 #include<easyx.h>3//#include<graphics.h>4int main()5 {6 initgraph(640, 480);//窗⼝单位像素7 setlinecolor(RGB(255, 106, 106));8 circle(100,200,50);9 setlinecolor(RED);//设置边框颜⾊10 setfillcolor(LIGHTBLUE);//设置填充颜⾊11 fillcircle(300, 200, 60);//填充圆12 solidcircle(500, 200, 70);//没有边框的填充圆1314 setbkmode(TRANSPARENT);//设置⽂字字体透明图⽚上写⽂字15 settextcolor(RGB(173, 216, 230));//设置⽂本颜⾊16 settextstyle(40, 0, L"微软雅⿊");//设置⽂本⼤⼩和字体17 outtextxy(0, 0, L"图形库");//在指定位置输出⽂本18 outtextxy(20, 20, L"ABCD");//L表⽰多字节19 getchar();20 IMAGE img;//准备变量存放图⽚21// C:\Users\18080\Pictures\帅钢.jpg 绝对路径细化每个⽂件夹22// loadimage(&img, L"C:\\Users\\18080\\Pictures\\帅钢.jpg");//第⼆个参数是⽂件路径23// loadimage(&img, L"C:/Users/18080/Pictures/帅钢.jpg");//可以⽤做斜杠替代24 loadimage(&img, L"123/帅钢.jpg");//相对路径25 initgraph(img.getwidth(),img.getheight());//图形库的⼤⼩由图⽚的宽和⾼决定26//对于⽂件路径可以⽤斜杠隔开/ \27//代码⾥字符串中\\ 表⽰\28 putimage(0, 0, &img);29 getchar();30 closegraph();//关闭窗⼝31return0;32 }View Code代码贴上去的图⽚如何使⽤代码将图⽚直接放置到.exe⽂件中1 #include<stdio.h>2 #include<easyx.h>3int main()4 {5 IMAGE img;6 loadimage(&img, L"JPG",MAKEINTRESOURCE(101));7 initgraph(img.getwidth(),img.getheight());8 putimage(0,0,&img);9 getchar();10 closegraph();11 }12View Code在资源⽂件下⾯添加资源:选择第⼀个进⾏导⼊在.rc⽂件下查看代码找到ID下⾯找到JPG⽂件格式在resource.h下⾯找到ID 101最后补写代码loadimage(&img, L"JPG",MAKEINTRESOURCE(101));//如上图直接在.exe⽂件中打开不需要外部⽂件弊端就是.exe⽂件过⼤。

EasyX指导手册

EasyX指导手册

EasyX指导手册EasyX指导手册制作人:jianxiawzx一、基本概念1.1颜色EasyX使用24bit真彩色,不再支持调色板模式。

表示颜色有以下几种办法:1.用预定义颜色常量,如下:常量值颜色常量值颜色BLACK 0 黑DARKGRAY 0x545454 深灰BLUE 0xA80000 蓝LIGHTBLUE 0xFC5454 亮蓝GREEN 0x00A800 绿LIGHTGREEN 0x54FC54 亮绿CYAN 0xA8A800 青LIGHTCYAN 0xFCFC54 亮青RED 0x0000A8 红LIGHTRED 0x5454FC 亮红MAGENTA 0xA800A8 紫LIGHTMAGENTA 0xFC54FC 亮紫BROWN 0x0054A8 棕YELLOW 0x54FCFC 黄LIGHTGRAY 0xA8A8A8 浅灰WHITE 0xFCFCFC 白2.用16进制的颜色表示,形式为:0xbbggrr(bb=蓝,gg=绿,rr=红)3.用RGB宏合成颜色。

详见RGB。

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

详见HSLtoRGB、HSVtoRGB。

示例:以下是部分设置前景色的方法:setcolor(0xff0000);setcolor(BLUE);setcolor(RGB(0,0,255));setcolor(HSLtoRGB(240,1,0.5));1.2坐标在EasyX中,坐标分两种:逻辑坐标和物理坐标。

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

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

坐标原点可以通过setorigin()函数修改;坐标轴方向可以通过setaspectratio()函数修改;缩放比例可以通过setaspectratio()函数修改。

在本手册中,凡是没有注明的坐标,均指逻辑坐标。

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3、画直线函数 void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。 4、填充函数 void far floodfill(int x, int y, int
border); 其中: x, y为封闭图形内的任意一点。 border为边界的颜色, 也就是封闭图 形轮廓的颜色。调用了该函数后, 将用规 定的颜色和图模填满整个封闭图形。
const char *pupattern = NULL); color的值是当前屏幕图形模式时颜色的有 效值。pattern的值及与其等价的 符号常数如表所示。
表 关于填充式样pattern的规定 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义 ─────────────────────────── EMPTY_FILL 0 以背景颜色填充 SOLID_FILL 1 以实填充 LINE_FILL 2 以直线填充 LTSLASH_FILL 3 以斜线填充(阴影线) SLASH_FILL 4 以粗斜线填充(粗阴影线) BKSLASH_FILL 5 以粗反斜线填充(粗阴影线) LTBKSLASH_FILL 6 以反斜线填充(阴影线) HATCH_FILL 7 以直方网格填充 XHATCH_FILL 8 以斜网格填充 INTTERLEAVE_FILL 9 以间隔点填充 WIDE_DOT_FILL 10 以稀疏点填充 CLOSE_DOS_FILL 11 以密集点填充 USER_FILL 12 以用户定义式样填充 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红 BROWN 6 棕色 YELLOW 14 黄色 LIGHTGRAY 7 淡灰 WHITE 15 白色 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
6、挂起函数Sleep 功 能: 执行挂起一段时间 Sleep函数的一般形式: Sleep(unsigned long); 其中,Sleep()里面的单位,是以毫秒为 单位,所以如果想让函数滞留1秒的话, 应该是Sleep(1000);
常用图形函数
1、rectangle(x1,y1,x2,y2):绘制一个以(x1,y1)和(x2,y2)为对角端点坐标的矩形 2、putpixel(x,y,color):在(x,y)坐标位置处绘制一个点,点的色彩由color指定。例如: putpixel(320,240,RED);在屏幕中央绘制一个红色的点。 3、setcolor(色彩值):设置绘图色彩,使用该函数后,图形函数所绘制的直线或曲线 为该函数中指定的色彩。例如: setcolor(YELLOW); 4、setbkcolor(色彩值):设置图形屏幕的背景色彩,使用该函数后图形屏幕清屏,背 景色彩为该函数中所指定的色彩。如果没有使用该函数设置背景色,则图形屏幕的背 景色彩为黑色。 5、circle(x,y,r):绘制一个以(x,y)为圆心坐标,半径为r的圆。 6、line(x1,y1,x2,y2): 绘制直线段,其中(x1,y1)为一个端点的坐标,(x2,y2)为另一个 端点的坐标。直线的色彩为在使用该函数之前通过setcolor函数所设置的色彩。 7、getbkcolor(): 取得当前图形屏幕的背景色彩,这个色彩值是使用setbkcolor函数 设置的。 8、closegraph():关闭图形工作方式,返回到字符工作方式。调用此函数后,屏幕上 已经绘制的图形将会被清除。
Easyx安装过程 第一步:打开文件夹,双击setup。
第二步:进入安装向导,点击下一步。
第三步:选择“安装”,单击该按钮。
第四步:安装成功,点击“确定”。
第四步:点击“关闭”退出。
程序格式,可作参考
#include <graphics.h> #include <stdio.h> void main() { int i; initgraph(640, 480); // 图形初始化操作 circle(20, 20, 10); // 画圆,圆心(20, 20),半径 10 line(0,0,i*5,i*5); getchar(); // 按任意键继续 closegraph(); // 关闭图形界面 }
1、清屏函数 cleardevice(); 清除图形屏幕内容使用清屏函数, 其调用格 式如下: voide far cleardevice(void); setbkcolor(0); /*设置图形背景*/ cleardevice();
2、画椭圆函数 void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius); 以(x, y)为中心, xradius, yradius为x轴和y轴半径, 从角stangle 开始到 endangle结束画一段椭圆线, 当stangle=0, endangle=360时, 画出一个完整的椭圆。
注意: 1. 假如x或y取在边界上, 则不进行填充。 2. 假如不是封闭图形则填充会从没有封闭的 地方溢出去, 填满其它地方。 3. 假如x或y在图形外面, 则填充封闭图形外的 屏幕区域。 4. 由border指定的颜色值必须与图形轮廓的颜
色值相同, 但填充色可选任 意颜色。
5、填充模式设置函数 void setfillstyle(COLORREF color, int pattern = SOLID_FILL,
注意:vc中s大写。Tc中s不用大写。
7、文本输出函数 void far outtextxy(int x, int y, char far *textstring); 该函数输出字符串指针textstring所指 的文本在规定的(x, y)位置。 其中x 和y为象元坐标。
#include <graphics.h> #include <stdio.h> void main() { int i=1; initgraph(640, 480); setbkcolor(BLUE); setcolor(WHITE); for (i=1;i<300;i++) { cleardevice(); circle(200+i, 200, 100); setfillstyle(RED,SOLID_FILL,NULL); floodfill(200+i,200, WHITE); Sleep(50); } closegr━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义 符号常数 数值 含义 ─────────────────────────────────── BLACK 0 黑色 DARKGRAY 8 深灰 BLUE 1 兰色 LIGHTBLUE 9 深兰 GREEN 2 绿色 LIGHTGREEN 10 淡绿 CYAN 3 青色 LIGHTCYAN 11 淡青 RED 4 红色 LIGHTRED 12 淡红
相关文档
最新文档