1 / 13

汉诺塔

汉诺塔. 制作小组:水果篮子 制作人:徐旼之. 汉诺塔. 头文件: #include "stdio.h" #include "graphics.h. 汉诺塔. 全局变量: int deep; // 方块的块数 int n; // 当前的方块为第几块 char x='x',y='y',z='z ’ ; //x , y , z 三个柱子 int dx=-15,dy=40,d=160; //dx :方块 x 方向上的长度差 //dy :方块 y 方向上的长度差 //d :柱间的距离. 汉诺塔. 函数声明:

elias
Download Presentation

汉诺塔

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 汉诺塔 制作小组:水果篮子 制作人:徐旼之

  2. 汉诺塔 • 头文件: • #include "stdio.h" • #include "graphics.h

  3. 汉诺塔 • 全局变量: • int deep; //方块的块数 • int n; //当前的方块为第几块 • char x='x',y='y',z='z’; //x,y,z三个柱子 • int dx=-15,dy=40,d=160; //dx:方块x方向上的长度差 //dy:方块y方向上的长度差 //d:柱间的距离

  4. 汉诺塔 • 函数声明: • int Start () //显示游戏开始画面 • void take (int n,int m) //从m柱中拿走第n块方块 • int takeb (int m) // 从m柱中拿走最上面的一块方块 • void put (int n,int m) //将第n块方块放到m柱中

  5. void putb (int n,int m,char next) // 将第n块方块放到m柱中,若m柱中的方块小于//当前方块则按输入的next字符移向下个柱子, //若下一个柱子的方块也小于当前方块则将当 //前方块放于原地不动 void move (char x,int n,char z) //将第n块方块从x移至z (并不是指从x柱移 //动至z柱) • void hanoi • (int n,char x, char y,char z) • //自动

  6. int gameOver()//判断是否游戏结束 • void autoH() //自动 • int get(char m) //判断输入字符 • void play() • void playH() • void main()

  7. 汉诺塔 • 具体函数作用: • void main(): • 选择方块块数1~5,大于五块则因在屏幕中画不下而不取 • 选择自动或自己玩,若在自己玩时按p则转为自动 • void autoH(): • Start(); • hanoi(deep,x,y,z);

  8. int Start (): • 设置gdriver,gmode等 • 画背景、标题与三个柱子 • 根据deep(方块的块数)自动画出方块 • 疑惑:无返回值,不只当初为何用int 型 • void hanoi (int n,char x, char y,char z): • 如果是第一块方块,则move(x,1,z) • 如果不是第一块方块,则递归

  9. void move (char x,int n,char z): • 判断x为何值而从该柱中拿走第n块方块,用到函数:take (int n,int m) • 判断y为何值而将第n块方块放到该柱中,用到函数:put (int n,int m) • void take (int n,int m): • 找m柱中第n块方块 • 将第n块方块拿走 • put (int n,int m): • 找m柱中比第n块方块大的方块 • 若有,则将第n块方块放至其上 • 若无,则将第n块方块放在底部

  10. void playH(): • Start(); • play(); • 若flag=gameOver(),则退出;否则,重做ii • void play(): • 输入一个字符(x,y,z柱) • 若该字符是否符合get(char m),则继续;否则,重做i • 判断该字符为何值,从而确定柱值 • 在输入一个字符(表示左移”<”或右移”>”) • 用 take (int n,int m) 拿走原来的方块 • 用putb(n,m,next) 在下一个柱子上放上该方块

  11. int get(char m): • 判断m是否是x、y、z、X、Y、Z、p、P之外的字符,若是,则返回-1 • 若m为p、P,则转为autoH(),返回0 • 若不是,则返相对应的takeb(int m)的返回值 • int takeb (int m): • 找到m柱的最上层方块 • 判断此方块为第几号方块 • 更改其颜色,表示激活状态 • 如果m柱上没有方块,则返回-1;若有,则返 回该方块的号数

  12. void putb (int n,int m,char next): • 找m柱中最上层的方块 • 判断其为第几号方块 • 若比n大,则用put (int n,int m)将n放在其上;若比n小则按输入的next字符移向下个柱子,若下一个柱子的方块也小于当前方块则将当前方块放于原地不动 • int gameOver(): • 判断方块是否都在z柱 • 若是,则清屏,出现结束画面,返回0;若不 是,则返回-1

  13. GAMEOVER

More Related