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。

  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 淡红
相关文档
最新文档