ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:19.41KB ,
资源ID:4749023      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4749023.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汉诺塔移动动画Word格式文档下载.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

汉诺塔移动动画Word格式文档下载.docx

1、void Move(int n, char a, char b); / 移动过程int switchab(char a); / 返回钢针号void adjust(); / 调整速度暂停/ 主函数void main() int n, ta4 = 115, 500, 285, 520; / 第一个圆盘的位置 printf(尽量小于16n); / 因为大于十六时就会显示有误,但程序可以正常运行请输入汉诺塔的层数(164): scanf(%d, &n); STKNODE* p; p = (STKNODE*)malloc(n * sizeof(STKNODE *); / 声明一个元素为 n 个的动态 S

2、TKNODE 型指针数组 for (int i2 = 0; i2 n; i2 +) pi2 = (STKNODE *)malloc(sizeof(STKNODE); / 为每一个指针申请空间 Initstk(&s0);s1);s2); / 将三个栈初始化 start(); / 呈现开始画面 setfillstyle(YELLOW); / 圆盘的颜色 for (int i=0; i i+) ta0 += 5; ta1 -= 20; ta2 -= 5; ta3 -= 20; bar(ta0, ta1, ta2, ta3); / 画出n个从大到小一次叠放的黄色圆盘 +s0.top; / 进栈 for

3、 (int i1 = 0; i1 ai1 = tai1; s0.stacks0.top = pi; / 记录每个矩形的位置,top为圆盘的个数 Hannoi(n, a, bc / 汉诺塔递归函数 system(pausettttGame 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) i

4、nt i; s-top = 0; for (i = 0;= MAX; s-stack+s-top = NULL;/ 移动过程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 = (

5、STKNODE *)malloc(sizeof(STKNODE); / 源栈与目的栈值的传递 q0 = si4.stacksi4.top; +si5.top; / 进栈 q1-a0 = q0-a0 + i3 * 200;a1 = 500 - si5.top * 20;a2 = q0-a2 + i3 * 200;a3 = 500 - si5.top * 20 + 20; si5.stacksi5.top = q1; -si4.top; / 出栈 / 向上运动 while (q0-a1 = 100) setfillstyle(YELLOW); bar(q0-a0, q0-a1, q0-a2, q0

6、-a3); adjust(); / 调整函数 Sleep(10 * v); / 暂停(ms) setfillstyle(WHITE); setcolor(RED); line(q0-a0 + q0-a2) / 2, q0-a1, (q0- / 重新画上被擦掉原有的红线 q0-a1 -= 10;a3 -= 10; if (si4.top = 0) / 重新画上最后一个矩形块擦掉的底座上的两条红线 line(110 + i4 * 200, 500, 290 + i4 * 200, 500); line(110 + i4 * 200, 493, 290 + i4 * 200, 493); / 向左或

7、右运动,与 i3 的正负有关a2 != q1-a2) if (i3 0) / i3a0 -= 20;a2 -= 20; else / i30向右移a0 += 20;a2 += 20; / 向下运动a3 100) / 重画被擦掉的红线 setcolor(RED); line(q0-a1 += 10;a3 += 10; / 在目的钢针上的相应位置绘制出黄色矩形块 bar(q1-a0, q1-a1, q1-a2, q1-/ 绘制开始界面void start() / 初始化画面大小 initgraph(800, 650); / 背景设为白色 setbkcolor(WHITE); / 用白色填充整个画面

8、 cleardevice(); / 绘制彩虹,形成一道彩虹,摘自 easyx 帮助文档示例程序 float H, S, L; H = 0; / 色相 S = 1; / 饱和度 L = 0.5f; / 亮度 setlinestyle(PS_SOLID, NULL, 2); / 设置线宽为 2 for(int r = 600; r 544; r-) H += 5; setcolor( HSLtoRGB(H, S, L) ); circle(750, 900, r); / 说明 setfont(50, 0, 华文楷体 setcolor(RED); outtextxy(200, 150, 汉诺塔移动动

9、画 setfont(20, 0, 黑体 outtextxy(600, 200, BY:Ronald outtextxy(500, 200, 版本V1.1 setcolor(GREEN); outtextxy(200, 350, 随便按一个键开始吧! / 绘制运动的矩形 while (1) / 检测是否有键盘敲击 if (kbhit() break; / 向右 int a = 40, b = 40; /初始位置 while (a = 760) setfillstyle(YELLOW); bar(a, b, a + 10, b + 20); Sleep(10); setfillstyle(WHIT

10、E + a); a += 10; / 向下 while (b= 40) setfillstyle(GREEN); setfillstyle(WHITE - a); a -= 10; / 向上 while (b setfillstyle(BLUE); setfillstyle(WHITE + b); b -= 10; / 清空开始界面 / 绘制运动画面的的环境 / 三根红色线段作为钢针 line(400, 110, 400, 500); line(600, 110, 600, 500); line(200, 110, 200, 500); / 长方体形的底座 setfillstyle(LIGHT

11、GRAY); bar3d(80, 500, 720, 510, 10, true); / 暂停按钮 bar(360, 540, 440, 580); setfont(30, 0, outtextxy(370, 550, 暂停宋体 outtextxy(300, 580, 鼠标暂停后请按空格继续 / 加速按钮 bar(160, 540, 240, 580); outtextxy(170, 550, 加速 outtextxy(170, 580, 请按 d / 减速按钮 bar(560, 540, 640, 580); outtextxy(570, 550, 减速 outtextxy(570, 580

12、, 请按 a outtextxy(10, 10, 正在进行中请欣赏:/ 判断目的钢针与源钢针的钢针号返回钢针号int switchab(char a) switch (a) case : return 0; return 1; return 2; default:/ 调整函数,实现加速,减速,暂停void adjust() char f; / 接收键盘敲进去的按钮和鼠标点击时赋予的变化值 / 用 f 接受键盘的键入值 if(kbhit() f = getch(); / 检测鼠标消息 if (MouseHit()=true) / 接收鼠标消息 MOUSEMSG Mouse; Mouse = Ge

13、tMouseMsg(); / 响应鼠标消息 if (Mouse.x = 360 & Mouse.x = 540 & Mouse.y = 580 & Mouse.mkLButton) f = ;= 160 &= 240 &d= 560 &= 640 & / 作用于动画 switch(f) / 暂停 / 用继续覆盖暂停 setfont(30, 0, setcolor(GREEN); outtextxy(370, 550, 继续 getch(); / 继续后变回显示暂停 / 减速 / 当被点击时,减速位置震动一下 setfillstyle(LIGHTGRAY); bar(560, 540, 640, 580); outtextxy(575, 545, Sleep(30); / 减速 v+; / 回原位 outtextxy(570, 550, / 加速 bar(160, 540, 240, 580); outtextxy(165, 545, outtextxy(170, 550, / 加速 v-; / v 最小为1 if (v = 0) v = 1; f = r / f 初始化为 r FlushMouseMsgBuffer(); / 清空鼠标消息

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2