Dev-C++ 下配置 EasyX VC2010 vc6
Dev-C++ 下配置 EasyX 的步骤请参考:https://codebus.cn/bestans/easyx-for-mingw
不过,Dev-C++ 也远不如 VS 系列好用。VC2010 学习版是目前计算机二级考试的考试环境,在线安装只需要下载几十 MB,使用体验秒杀 Dev-C++。VC2010 的全部资源及安装步骤参考这里:https://codeabc.cn/yangw/setup-vc2010
vc6 与 easyX
1,下载绿色版vc6. 仅43m。解压后,点击执行ShortCut.exe,会生成桌面快捷 vc6. 运行即可。
vc6在win10下运行,无法单步调试。需要把 来源注解 选项关掉:
2,下载EasyX Graphics Library for C++
该版本支持 VC6~VC2019。
这个下载下来的包是个exe文件。用7zip打包的。可以直接用7zip解压或者后缀改成7z后解压。因为我们要手动配置环境。
3, 设置vc6环境:
3.1 新加工程:
添加cpp文件
3.2 头文件目录设置,从 工程 -> 设置
3.3 添加库文件
最后,点击run 运行,编制执行代码。
[分形学] 可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码
涂格子游戏(也叫点灯游戏)(by 豆腐果)
[分形学] 谢宾斯基 (Sierpinski) 三角形,也叫垫片
EasyIFS 1.0,开源的分形学 IFS 演示程序
模仿 Windows 屏保“变幻线 (Mystify)” VC 源代码
俄罗斯方块(Tetris) VC 源代码
走迷宫程序(含自动迷宫生成)
万花尺(又叫万花规)模拟程序
经典游戏 贪吃蛇(by 轻雨漫步)
汉诺塔移动动画(by Ronald)
生命游戏
吃豆子游戏(PacMan)(by 水木淋溪)
黑白棋游戏(也叫翻转棋、奥赛罗棋)双人对战版(by 自然向日葵)
用鼠标选中区域可以放大,enjoy it.
源码:

1 // 程序名称:分形学 - 可以无穷放大的 Mandelbrot Set (曼德布洛特集) 2 // 编译环境:Visual C++ 6.0 ~ 2019,EasyX_20210730 3 // 最后更新:2010-9-9 4 // 5 #include <graphics.h> 6 #include <conio.h> 7 8 // 定义常量 9 #define ITERATIONS 1000 // 迭代次数,越高,图像越精细 10 #define MAXCOLOR 64 // 颜色数 11 12 13 ///////////////////////////////////////////////// 14 // 定义复数及乘、加运算 15 ///////////////////////////////////////////////// 16 17 // 定义复数 18 struct COMPLEX 19 { 20 double re; 21 double im; 22 }; 23 24 // 定义复数“乘”运算 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; 30 return c; 31 } 32 33 // 定义复数“加”运算 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; 39 return c; 40 } 41 42 43 ///////////////////////////////////////////////// 44 // 定义颜色及初始化颜色 45 ///////////////////////////////////////////////// 46 47 // 定义颜色 48 int Color[MAXCOLOR]; 49 50 // 初始化颜色 51 void InitColor() 52 { 53 // 使用 HSL 颜色模式产生角度 h1 到 h2 的渐变色 54 int h1 = 240, h2 = 30; 55 for (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 } 61 62 63 ///////////////////////////////////////////////// 64 // 绘制 Mandelbrot Set (曼德布洛特集) 65 ///////////////////////////////////////////////// 66 void Draw(double fromx, double fromy, double tox, double toy) 67 { 68 COMPLEX z, c; 69 int x, y, k; // 定义循环变量 70 for (x = 0; x < 640; x++) 71 { 72 c.re = fromx + (tox - fromx) * (x / 640.0); 73 for (y = 0; y < 480; y++) 74 { 75 c.im = fromy + (toy - fromy) * (y / 480.0); 76 z.re = z.im = 0; 77 for (k = 0; k < ITERATIONS; k++) 78 { 79 if (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 } 86 87 88 ///////////////////////////////////////////////// 89 // 主函数 90 ///////////////////////////////////////////////// 91 int main() 92 { 93 // 初始化绘图窗口及颜色 94 initgraph(640, 480); 95 InitColor(); 96 97 98 // 初始化 Mandelbrot Set(曼德布洛特集)坐标系 99 double fromx, fromy, tox, toy; 100 fromx = -2.1; tox = 1.1; 101 fromy = -1.2; toy = 1.2; 102 Draw(fromx, fromy, tox, toy); 103 104 105 // 捕获鼠标操作,实现放大鼠标选中区域 106 ExMessage m; 107 bool isLDown = false; 108 int selfx, selfy, seltx, selty; // 定义选区 109 110 do 111 { 112 getmessage(&m, EM_MOUSE | EM_KEY); // 获取一条鼠标消息 113 114 switch (m.message) 115 { 116 case WM_KEYDOWN: 117 break; 118 119 // 按鼠标中键恢复原图形坐标系 120 case WM_MBUTTONUP: 121 fromx = -2.1; tox = 1.1; 122 fromy = -1.2; toy = 1.2; 123 Draw(fromx, fromy, tox, toy); 124 break; 125 126 // 按鼠标左键并拖动,选择区域 127 case WM_MOUSEMOVE: 128 if (isLDown) 129 { 130 rectangle(selfx, selfy, seltx, selty); 131 seltx = m.x; 132 selty = m.y; 133 rectangle(selfx, selfy, seltx, selty); 134 } 135 break; 136 137 // 按鼠标左键并拖动,选择区域 138 case 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); 145 146 break; 147 148 // 按鼠标左键并拖动,选择区域 149 case WM_LBUTTONUP: 150 rectangle(selfx, selfy, seltx, selty); 151 setrop2(R2_COPYPEN); 152 isLDown = false; 153 seltx = m.x; 154 selty = m.y; 155 156 if (selfx == seltx || selfy == selty) break; 157 158 // 修正选区为 4:3 159 int tmp; 160 if (selfx > seltx) { tmp = selfx; selfx = seltx; seltx = tmp; } 161 if (selfy > selty) { tmp = selfy; selfy = selty; selty = tmp; } 162 163 if ((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 } 169 else 170 { 171 seltx += (4 - (seltx - selfx) % 4); 172 selfy -= (seltx - selfx) * 3 / 4 / 2 - (selty - selfy) / 2; 173 selty = selfy + (seltx - selfx) * 3 / 4; 174 } 175 176 // 更新坐标系 177 double f, t; 178 f = fromx + (tox - fromx) * selfx / 640; 179 t = fromx + (tox - fromx) * seltx / 640; 180 fromx = f; 181 tox = t; 182 f = fromy + (toy - fromy) * selfy / 480; 183 t = fromy + (toy - fromy) * selty / 480; 184 fromy = f; 185 toy = t; 186 187 // 画图形 188 Draw(fromx, fromy, tox, toy); 189 190 break; 191 } 192 } while (m.message != WM_KEYDOWN); 193 194 closegraph(); 195 return 0; 196 }
汉诺塔移动示例:

/////////////////////////////////////////////////// // 程序名称:汉诺塔移动动画 // 编译环境:Visual C++ 6.0,EasyX_20130506(beta) // 作 者:Ronald Email:ryl910527@gmail.com // 最后修改: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; ta[2] -= 5; ta[3] -= 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]); adjust(); Sleep(10 * v); 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); // 设置线宽为 2 for(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(); // 绘制运动画面的的环境 setlinecolor(RED); // 三根红色线段作为钢针 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': return 0; case 'b': return 1; case 'c': return 2; default: return 0; } } // 调整函数,实现加速,减速,暂停 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 = 'd'; } if (Mouse.x >= 560 && Mouse.x <= 640 && 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 最小为1 if (v <= 0) { v = 1; } break; default: break; } f = 'r'; // f 初始化为 r FlushMouseMsgBuffer(); // 清空鼠标消息 }
分类:
其他
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-10-27 gn使用笔记
2020-10-27 js 运算符 感叹号后置 是断言
2015-10-27 Servlet3.0中Servlet的使用
2015-10-27 Java Code Examples for javax.servlet.http.Part