汉诺塔c源程序实现及讲解.ppt

上传人:tian****1990 文档编号:12716717 上传时间:2020-05-19 格式:PPT 页数:21 大小:262.50KB
返回 下载 相关 举报
汉诺塔c源程序实现及讲解.ppt_第1页
第1页 / 共21页
汉诺塔c源程序实现及讲解.ppt_第2页
第2页 / 共21页
汉诺塔c源程序实现及讲解.ppt_第3页
第3页 / 共21页
点击查看更多>>
资源描述
汉诺塔C源程序实现及讲解,制作人:贾维华、刘璐,汉诺塔,一、汉诺塔游戏简介及其玩法二、设计思路及其程序设计流程三、源程序及其讲解四、游戏程序中应注意的问题,一、汉诺塔游戏简介及其玩法,1游戏方法:点击PLAY开始,会看到3个柱子和从大到小编着号码的盘子,而且盘子自上而下半径依次增大。成功把盘子顺序不变的堆到最右边的竹子旁为胜利。2游戏规则:一次只能移动一个木块,盘子可以累起来,但是必须把半径小的放在半径大的上面。,3操作指南:在挂有圆盘的柱子上方点击向上按钮W或者UPDOWN按键选中圆盘,按左右移动键移动到相对应的柱子上方,按向下键放下圆盘,至此完成一次圆盘移动。,二、设计思路及程序设计流程,1设计思路:本设计中将盘子的数目设定为39个。设三个柱子A、B、C移动的过程可分解为三个步骤:第一步把A上的n-1个圆盘移到B上;第二步把A上的一个圆盘移到C上;第三步把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。其实际思想是利用一个递归原理。,例如最简单的三阶汉诺塔移动方法:AC,AB,CB,AC,BA,BC,AC2程序设计流程图:,三、源程序及其讲解,1源程序:见wintc2主程序构架main()INITIAL();/*界面初始化*/Start_Logo();/*游戏启动始界面*/getch();again:nStep=0;/*判断条件*/Logo();/*进入游戏*/gotoagain;,3.主要程序分析,#includestdio.h#includeconio.h#includestdlib.h#includedos.h#includetime.h#includegraphics.h#defineSsetcolor#defineFsetfillstyle#defineRrectangle#defineCcircle#defineBbar#defineB3Dbar3d#defineLline#defineOouttextxy#defineX200#defineY20intnStep=0;intnRecord7=7,15,31,63,127,255,511,nRec;intnDisk,nDisknum;intnBaseNum;floatnDelay;charchMark15;,structrodintnDisk105;intnDiskName10;tree3;/*/ntoa(ints)intb15;inti,j;for(i=0;i=10;i+)bi=s%10;s/=10;bi=s;for(j=i;j=0;j-)chMarki-j=bj+0;voidINITIAL()/*GAMEINITIAL*/intgd=DETECT,gm=0;initgraph(,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(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,WERTEBYLiuLuANDJiaWeiHua!);,voidFLASH_REC()intNUM,x1=8,x2=10;randomize();for(NUM=0;NUM33;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,323,401);B(519,151,522,401);,voidDRAW()F(1,8);B(6,80,633,100);/*BROWNBAR*/B(6,415,633,479);F(1,7);/*GAMEBACKGROUND*/B(7,102,632,410);S(15);R(6,0,633,479);S(15);settextstyle(DEFAULT_FONT,HORIZ_DIR,4);O(70,30,HANOITOWERV2.0);S(9);O(71,31,HANOITOWERV2.0);S(7);/*SHOWMESSAGE*/settextstyle(DEFAULT_FONT,HORIZ_DIR,1);O(189,445,-MADEBYLiuLuANDJiaWeiHua-);L(165,419,165,425);S(12);O(170,419,MESSAGE:);/*MESSAGEBOX*/S(7);O(20,419,PRESSESCTOQUIT);,voidShowInfo(intnRn,intnWhetherGetDisk)F(1,8);B(230,418,620,428);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);S(CYAN);if(nRn=0,voidShowRecord()settextstyle(DEFAULT_FONT,HORIZ_DIR,1);F(1,8);B(78,82,90,94);ntoa(nDisk);S(YELLOW);O(40,86,DISK:);S(15);O(80,86,chMark);B(348,82,360,94);ntoa(nRec);S(YELLOW);O(290,86,RECORD:);S(15);O(350,86,chMark);B(560,82,610,94);ntoa(nStep);S(YELLOW);O(520,86,STEP:);S(15);O(562,86,chMark);,voidFillDisk(intx1,inty1,intx2,inty2,intcolor,intcolor1)S(color);F(1,color);B3D(x1,y1,x2,y2,5,5);F(1,color1);B3D(x1+1,y1+1,x2+1,y2+1,5,5);/*=ENDOFFUNFADEOUT=*/voidClrScreen(void)intNUM;F(11,9);for(NUM=84;NUM476;NUM+)B(7,NUM,632,NUM+2);delay(20);intBall(intnRn)F(1,7);B(20,105,609,130);F(1,RED);S(RED);C(118+(nRn*200),115,10);floodfill(118+(nRn*200),115,RED);,voidQuit()ClrScreen();settextstyle(DEFAULT_FONT,HORIZ_DIR,2);S(WHITE);O(180,210,THANKYOUTOPLAY);O(180,230,2010.6);S(RED);O(181,211,THANKYOUTOPLAY);O(181,231,2010.6);O(181,260,ANYKEYTOQUIT);S(GREEN);O(180,180,GAMEOVER);S(15);O(181,181,GAMEOVER);getch();closegraph();exit(0);,intIsWin()inti,nStep_Sub_Rec;intnDiskNum=0;for(i=0;inDisk;i+)if(tree2.nDiski0=1)nDiskNum+;nStep_Sub_Rec=nStep-nRec;if(nDiskNum=nDisk)ShowInfo(4,0);/*ITCANBESETASYOURWAY*/nBaseNum=nRec/9;if(nStep_Sub_Rec=nBaseNum)/*WIN*/ClrScreen();S(GREEN);settextstyle(DEFAULT_FONT,HORIZ_DIR,3);O(230,200,YOUWIN);S(RED);O(231,201,YOUWIN);elseif(nStep_Sub_Rec=nBaseNum*2)ClrScreen();S(RED);settextstyle(DEFAULT_FONT,HORIZ_DIR,3);O(220,200,JUSTSOSO);S(LIGHTBLUE);O(221,201,JUSTSOSO);elseClrScreen();S(LIGHTBLUE);,settextstyle(DEFAULT_FONT,HORIZ_DIR,3);O(175,200,YOUPLAYBAD);S(CYAN);O(176,201,YOUPLAYBAD);sound(1000);delay(1000);sound(1500);delay(300);sound(400);delay(2020);nosound();S(BLUE);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);O(170,230,PRESSANYKEYTOCONTINUE(ESCTOQUIT);S(WHITE);O(171,231,PRESSANYKEYTOCONTINUE(ESCTOQUIT);if(getch()=27)Quit();elseClrScreen();return(1);elseShowInfo(3,nStep_Sub_Rec);return(0);,voidHelpMessage()S(3);L(7,314,632,314);L(7,432,632,432);S(12);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);O(23,320,HELPMESSAGE:);S(7);O(50,340,1).KEY:,A,D:MOVETHEREDBALLTOSELECTAROD);O(50,365,2).KEY:UP,W:TOSELECTTHETOPDISK);O(50,390,3).KEY:DOWN,S:TOGETDOWNTHEDISKWHICHSELECT);O(50,415,4).KEY:ESC:QUITTHEGAME);S(12);O(50,442,5).IFSTEP-RECORD=ABASENUMTHAN:YOUWIN);O(50,453,6).IFSTEP-RECORD=ABASENUM*2THAN:JUSTSOSO);O(50,464,7).ELSE:YOUBADBAD_);,voidGame()/*见turboc*/voidSelect()intnInput,i;DRAW();settextstyle(DEFAULT_FONT,HORIZ_DIR,1);S(15);O(155,230,PLEASEINPUTTHENUMBEROFDISKS(3.9):);while(nInput=getch()9);nInput=nInput-48;nDisk=nInput;delay(1000);,voidMode_1()/*PLAYERPLAY*/again:DRAW();Game();/*GAME*/cleardevice();if(nDisk9)nDisk+;nStep=0;gotoagain;voidGameMode(intmode)if(mode=1)ClrScreen();Select();Mode_1();,voidLogo()intnPlay_Mode=1;DRAW();ClrScreen();HelpMessage();/*HELPMESSAGE*/F(1,15);B(150,200,529,300);F(1,8);B(151,201,530,300);F(1,12);/*DRAWBUTTON*/B(300,275,380,290);S(12);O(265,235,PRESSTOENTER);O(264,234,PRESSTOENTER);S(15);settextstyle(DEFAULT_FONT,HORIZ_DIR,1);O(324,279,PLAY);O(325,280,PLAY);while(1)if(kbhit()/*检查当前按下的键*/switch(getch()case13:GameMode(nPlay_Mode);return;break;case27:Quit();default:sound(100);delay(10);nosound();break;,main()INITIAL();Start_Logo();getch();again:nStep=0;Logo();gotoagain;/*END*/,四、程序注意事项,1:注意汉诺塔实现的原理2:程序设计中函数的嵌套调用3:程序中某些特殊函数的作用4:游戏界面设计中各个函数的参数5:各函数实现的功能6:整个游戏程序设计的主线,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!