130 likes | 302 Views
汉诺塔. 制作小组:水果篮子 制作人:徐旼之. 汉诺塔. 头文件: #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 :柱间的距离. 汉诺塔. 函数声明:
E N D
汉诺塔 制作小组:水果篮子 制作人:徐旼之
汉诺塔 • 头文件: • #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:柱间的距离
汉诺塔 • 函数声明: • int Start () //显示游戏开始画面 • void take (int n,int m) //从m柱中拿走第n块方块 • int takeb (int m) // 从m柱中拿走最上面的一块方块 • void put (int n,int m) //将第n块方块放到m柱中
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) • //自动
int gameOver()//判断是否游戏结束 • void autoH() //自动 • int get(char m) //判断输入字符 • void play() • void playH() • void main()
汉诺塔 • 具体函数作用: • void main(): • 选择方块块数1~5,大于五块则因在屏幕中画不下而不取 • 选择自动或自己玩,若在自己玩时按p则转为自动 • void autoH(): • Start(); • hanoi(deep,x,y,z);
int Start (): • 设置gdriver,gmode等 • 画背景、标题与三个柱子 • 根据deep(方块的块数)自动画出方块 • 疑惑:无返回值,不只当初为何用int 型 • void hanoi (int n,char x, char y,char z): • 如果是第一块方块,则move(x,1,z) • 如果不是第一块方块,则递归
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块方块放在底部
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) 在下一个柱子上放上该方块
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;若有,则返 回该方块的号数
void putb (int n,int m,char next): • 找m柱中最上层的方块 • 判断其为第几号方块 • 若比n大,则用put (int n,int m)将n放在其上;若比n小则按输入的next字符移向下个柱子,若下一个柱子的方块也小于当前方块则将当前方块放于原地不动 • int gameOver(): • 判断方块是否都在z柱 • 若是,则清屏,出现结束画面,返回0;若不 是,则返回-1