资源描述:
《汉诺塔c源程序实现及讲解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、汉诺塔C源程序实现及讲解制作人:贾维华、刘璐汉诺塔一、汉诺塔游戏简介及其玩法二、设计思路及其程序设计流程三、源程序及其讲解四、游戏程序中应注意的问题一、汉诺塔游戏简介及其玩法1游戏方法:点击PLAY开始,会看到3个柱子和从大到小编着号码的盘子,而且盘子自上而下半径依次增大。成功把盘子顺序不变的堆到最右边的竹子旁为胜利。2游戏规则:一次只能移动一个木块,盘子可以累起来,但是必须把半径小的放在半径大的上面。3操作指南:在挂有圆盘的柱子上方点击向上按钮‘W’或者‘UPDOWN’按键选中圆盘,按左右移动键移动到相对应的柱子上方,按向下键放下圆盘,至此完成一次圆盘移动。
2、二、设计思路及程序设计流程1设计思路:本设计中将盘子的数目设定为3~9个。设三个柱子A、B、C移动的过程可分解为三个步骤:第一步把A上的n-1个圆盘移到B上;第二步把A上的一个圆盘移到C上;第三步把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。其实际思想是利用一个递归原理。例如最简单的三阶汉诺塔移动方法:A→C,A→B,C→B,A→C,B→A,B→C,A→C2程序设计流程图:三、源程序及其讲解1源程序:见wintc2主程序构架main(){INITIAL();/*界面初始化*/Start_Logo();/*游戏启动始界面*/getch();again
3、:nStep=0;/*判断条件*/Logo();/*进入游戏*/gotoagain;}3.主要程序分析#include"stdio.h"#include"conio.h"#include"stdlib.h"#include"dos.h"#include"time.h"#include"graphics.h"#defineSsetcolor#defineFsetfillstyle#defineRrectangle#defineCcircle#defineBbar#defineB3Dbar3d#defineLline#defineOouttextxy#define
4、X200#defineY20intnStep=0;intnRecord[7]={7,15,31,63,127,255,511},nRec;intnDisk,nDisknum;intnBaseNum;floatnDelay;charchMark[15];structrod{intnDisk[10][5];intnDiskName[10];}tree[3];/********************************************/ntoa(ints){intb[15];inti,j;for(i=0;i<15;i++)chMark[i]=' ';
5、for(i=0;s>=10;i++){b[i]=s%10;s/=10;}b[i]=s;for(j=i;j>=0;j--)chMark[i-j]=b[j]+'0';}voidINITIAL()/**GAMEINITIAL**/{intgd=DETECT,gm=0;initgraph(&gd,&gm,"");setbkcolor(0);}voidStart_Logo()/*启动标志*/{F(3,8);B(200,150,439,259);S(7);R(201,151,442,262);S(WHITE);R(199,149,440,260);settextstyle
6、(DEFAULT_FONT,HORIZ_DIR,2);O(233,180,"HANOITOWER");S(1);O(232,179,"HANOITOWER");S(WHITE);settextstyle(DEFAULT_FONT,HORIZ_DIR,2);O(284,204,"V2.0");S(1);O(283,203,"V2.0");settextstyle(DEFAULT_FONT,HORIZ_DIR,1);S(WHITE);O(205,240,"WERTEBYLiuLuANDJiaWeiHua!");O(204,239,"WERTEBYLiuLuANDJ
7、iaWeiHua!");}voidFLASH_REC(){intNUM,x1=8,x2=10;randomize();for(NUM=0;NUM<33;NUM++){F(1,rand()%16);B(x1,412,x2,414);x1=x1+20;x2=x2+20;}}voidDrawRod(){F(1,3);B(120,152,124,402);/*ROD1*/B(320,152,324,402);/*ROD2*/B(520,152,523,402);/*ROD3*/F(6,LIGHTBLUE);B(119,151,123,401);B(319,151,32
8、3,401);B(519,151,52