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

上传人:宝路 文档编号:48022802 上传时间:2018-07-08 格式:PPT 页数:21 大小:263.07KB
返回 下载 相关 举报
汉诺塔c源程序实现及讲解_第1页
第1页 / 共21页
汉诺塔c源程序实现及讲解_第2页
第2页 / 共21页
汉诺塔c源程序实现及讲解_第3页
第3页 / 共21页
汉诺塔c源程序实现及讲解_第4页
第4页 / 共21页
汉诺塔c源程序实现及讲解_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《汉诺塔c源程序实现及讲解》由会员分享,可在线阅读,更多相关《汉诺塔c源程序实现及讲解(21页珍藏版)》请在金锄头文库上搜索。

1、汉诺塔C源程序实现及讲解制作人:贾维华、刘璐汉诺塔 一、汉诺塔游戏简介及其玩法 二、设计思路及其程序设计流程 三、源程序及其讲解 四、游戏程序中应注意的问题一、汉诺塔游戏简介及其玩法 1 游戏方法:点击PLAY开始,会看到3 个柱子和从大到小编着号码的盘子,而 且盘子自上而下半径依次增大。成功把 盘子顺序不变的堆到最右边的竹子旁为 胜利。 2 游戏规则: 一次只能移动一个木块,盘子可以累起 来,但是必须把半径小的放在半径大的 上面。 3操作指南:在挂有圆盘的柱子上方点击 向上按钮 W 或者 UPDOWN按键选 中圆盘,按左右移动键移动到相对应的 柱子上方,按向下键放下圆盘,至此完 成一次圆盘移

2、动。二、设计思路及程序设计流程 1 设计思路:本设计中将盘子的数目设 定为39个。设三个柱子A、B、C移动的过程可分解为三个步骤: 第一步 把A上的n-1个圆盘移到B上; 第二步 把A上的一个圆盘移到C上; 第三步 把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。 其实际思想是利用一个递归原理。例如最简单的三阶汉诺塔移动方法: AC,AB,CB,AC,BA,BC,AC 2 程序设计流程图:三、源程序及其讲解1 源程序:见win tc 2 主程序构架 main() INITIAL(); /*界面初始化*/ Start_Logo(); /*游戏启动始界面*/ getch(); again

3、: nStep=0;/*判断条件*/ Logo();/*进入游戏*/ goto again; 3. 主要程序分析#include “stdio.h“ #include “conio.h“ #include “stdlib.h“ #include “dos.h“ #include “time.h“ #include “graphics.h“ #define S setcolor #define F setfillstyle #define R rectangle #define C circle #define B bar #define B3D bar3d #define L line #de

4、fine O outtextxy #define X 200 #define Y 20 int nStep=0; int nRecord7=7,15,31,63,127,255,511,nRec; int nDisk,nDisknum; int nBaseNum; float nDelay; char chMark15;struct rod int nDisk105; int nDiskName10; tree3;/* */ ntoa(int s) int b15; int i,j; for (i=0;i=10;i+) bi=s%10; s/=10; bi=s; for(j=i;j=0;j-)

5、 chMarki-j=bj+0; void INITIAL() /*GAME INITIAL*/ int gd=DETECT,gm=0; initgraph( setbkcolor(0); void Start_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,“HANOI TOWER“); S(1); O(232,179,“HANOI TOWER

6、“); S(WHITE); settextstyle(DEFAULT_FONT,HORIZ_ DIR,2); O(284,204,“V 2.0“); S(1); O(283,203,“V 2.0“); settextstyle(DEFAULT_FONT,HORIZ_ DIR,1); S(WHITE); O(205,240,“WERTE BY LiuLu AND JiaWeiHua!“); O(204,239,“WERTE BY LiuLu AND JiaWeiHua!“); void FLASH_REC() int NUM,x1=8,x2=10; randomize(); for(NUM=0;

7、NUM,A,D :MOVE THE RED BALL TO SELECT A ROD“); O(50,365,“2).KEY: UP,W :TO SELECT THE TOP DISK“); O(50,390,“3).KEY: DOWN,S :TO GET DOWN THE DISK WHICH SELECT“); O(50,415,“4).KEY: ESC :QUIT THE GAME“); S(12); O(50,442,“5).IF STEP-RECORD9); nInput=nInput-48; nDisk=nInput; delay (1000); void Mode_1() /*P

8、LAYER PLAY*/ again: DRAW(); Game(); /*GAME*/ cleardevice(); if(nDisk TO ENTER“); O(264,234,“PRESS TO ENTER“); S(15); settextstyle(DEFAULT_FONT,HORIZ_DIR,1); O(324,279,“PLAY“); O(325,280,“PLAY“); while(1) if(kbhit()/*检查当前按下的键 */ switch(getch() case 13:GameMode(nPlay_Mode);return;break; case 27:Quit(); default:sound(100);delay(10);nosound();break; main() INITIAL(); Start_Logo(); getch(); again: nStep=0; Logo(); goto again; /*END*/四、程序注意事项 1:注意汉诺塔实现的原理 2:程序设计中函数的嵌套调用 3:程序中某些特殊函数的作用 4:游戏界面设计中各个函数的参数 5:各函数实现的功能 6:整个游戏程序设计的主线

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号